systemd – nazwy użytkowników zaczynające się od liczb otrzymują roota
Napisał: Patryk Krawaczyński
16/07/2017 w Bezpieczeństwo Brak komentarzy. (artykuł nr 623, ilość słów: 182)
L
uka została ujawniona podczas zgłoszenia błędu na githubie. systemd nie potrafi obsłużyć odpalenia procesu użytkownika, którego login zaczyna się od liczby np. 0day i tym samym uruchamia proces z prawami administratora zamiast owego użytkownika. Brzmi to dość drastycznie:
> In case of bug report: Expected behaviour you didn’t see
The process started by systemd should be user previlege> In case of bug report: Unexpected behaviour you saw
The process started by systemd was root previlege
Jeśli przyjrzymy się poniższemu plikowi unit to proces socat powinien zostać wystartowany z prawami użytkownika “0day
”
[Unit] Description=0day socat service After=network.target [Service] User=0day Restart=always Type=simple WorkingDirectory=/home/0day/ ExecStart=/usr/bin/socat TCP-LISTEN:18086,reuseaddr,fork EXEC:"/opt/run-elf" [Install] WantedBy=multi-user.target
– niestety zostanie on cofnięty do standardowej polityki dla pola User=
i uruchomiony z prawami użytkownika root. Definitywnie jest to błąd, ponieważ takie dystrybucje jak RedHat/CentOS, czy Ubuntu/Debian pozwalają na tego typu nazwy użytkowników. Wydawać się to może problemem bezpieczeństwa, ale luka ta jest dość specyficzna w eksploatacji. Przed jej wykorzystaniem potrzebne są już podwyższone uprawnienia, aby stworzyć lub edytować wybrany plik unit. Dokonać tego można poprzez oszukanie administratora jakimś trikiem lub spreparowanym, wrogim pakietem, który umożliwi nam dalszą eskalację uprawnień.