Submitted via IRC for TheMightyBuzzard
A bug in Linux's systemd init system causes root permissions to be given to services associated with invalid usernames, and while this could pose a security risk, exploitation is not an easy task.
A developer who uses the online moniker "mapleray" last week discovered a problem related to systemd unit files, the configuration files used to describe resources and their behavior. Mapleray noticed that a systemd unit file containing an invalid username – one that starts with a digit (e.g. "0day") – will initiate the targeted process with root privileges instead of regular user privileges.
Systemd is designed not to allow usernames that start with a numeric character, but Red Hat, CentOS and other Linux distributions do allow such usernames.
"It's systemd's parsing of the User= parameter that determines the naming doesn't follow a set of conventions, and decides to fall back to its default value, root," explained developer Mattias Geniar.
While this sounds like it could be leveraged to obtain root privileges on any Linux installation using systemd, exploiting the bug in an attack is not an easy task. Geniar pointed out that the attacker needs root privileges in the first place to edit the systemd unit file and use it.
[...] Systemd developers have classified this issue as "not-a-bug" and they apparently don't plan on fixing it. Linux users are divided on the matter – some believe this is a vulnerability that could pose a serious security risk, while others agree that a fix is not necessary.
See, this is why we can't have nice init systems.
Source: http://www.securityweek.com/linux-systemd-gives-root-privileges-invalid-usernames
(Score: 2) by frojack on Tuesday July 04 2017, @01:21AM (12 children)
No, that's not what happens here.
Using an invalid username causes that unit to run as root. That unit can do anything.
Using a valid user name causes that unit to run as that (valid) user. The unit can't do anything the user couldn't do.
Only root can instantiate a new unit.
No, you are mistaken. I've always had this sig.
(Score: 3, Disagree) by Arik on Tuesday July 04 2017, @01:32AM (9 children)
If laughter is the best medicine, who are the best doctors?
(Score: 2) by isostatic on Tuesday July 04 2017, @02:20PM (3 children)
no one gives a fsck what Poettering thinks, it's simply not his call
Sadly that's not true. I don't know why, but for some reason what he decides goes. Time and time again he causes a horrendous mess, and time and time again we follow him. He has an obscene amount of power - on the order of that of Linus. What he says goes, that's the new reality.
(Score: 1) by Arik on Tuesday July 04 2017, @02:51PM (2 children)
Not even the distro he works for actually considers these filenames invalid.
If laughter is the best medicine, who are the best doctors?
(Score: 0) by Anonymous Coward on Tuesday July 04 2017, @02:53PM
(Score: 2) by isostatic on Tuesday July 04 2017, @06:51PM
Sure, but that's effectively changed now. As systemd is so ingrained into linux, and pottering is in charge, if he decides that "usernames beginging with a number aren't valid", that makes them defacto invalid.
Technically you're correct, but in practice mroe and more of systemd will refuse to work with usernames begining with numbers, and it will become the defacto standard.
(Score: 2) by butthurt on Tuesday July 04 2017, @08:23PM (4 children)
> There's nothing 'invalid' about a *nix username starting with a null and many, many have done so.
I disagree. A commenter on Stack Exchange wrote that the allowable characters (according to IEEE Std 1003.1-2001) are:
-- https://www.linuxquestions.org/questions/linux-server-73/valid-user-names-573768/ [linuxquestions.org]
The summary mentions "usernames that start with a numeric character." A null character is not a numeric character. It's a control character. Perhaps you're confusing it with the zero symbol, "0"?
https://en.wikipedia.org/wiki/Null_character [wikipedia.org]
(Score: 1) by Arik on Wednesday July 05 2017, @12:27AM (3 children)
If laughter is the best medicine, who are the best doctors?
(Score: 2) by FatPhil on Wednesday July 05 2017, @08:06AM (1 child)
Great minds discuss ideas; average minds discuss events; small minds discuss people; the smallest discuss themselves
(Score: 1) by Arik on Wednesday July 05 2017, @05:23PM
If laughter is the best medicine, who are the best doctors?
(Score: 2) by butthurt on Thursday July 06 2017, @12:37AM
In the context of character sets in computing, they have distinct meanings. In the character set used for POSIX usernames, a printable "0" is different from the non-printable NUL.
https://en.wikipedia.org/wiki/File:US-ASCII_code_chart.png [wikipedia.org]
If you refer to "0" as a null, you're just going to cause confusion.
(Score: 2, Informative) by Anonymous Coward on Tuesday July 04 2017, @01:38AM
This is false. If the username is "1strike" it is a valid Linux username but not to systemd so it gets root privileges. If the username is invalid, or starts with a number (which systemd says is bad), it runs as root.
(Score: 0) by Anonymous Coward on Tuesday July 04 2017, @01:41AM
You are wrong. From the article:
Perfectly *valid* usernames ("0day") are *invalid* in crappyd. Yet another case of Poopering and his cronies getting things wrong and failing to support perfectly legal semantics. The rest of the system doesn't care if your username starts with a digit but somehow systemd does care.