Намерена е уязвимост в помощната програма за Linux sudo, която позволява присвояването на права.
Новата уязвимост позволява изпълнението на команди с правата на root потребителя в Linux системите и е заведена като CVE-2019-14287.
Когато sudo е конфигуриран да позволява на потребителя да стартира команди от името на друг произволен потребител посредством ключовта дума ALL в Runas спецификациите, е възможно да бъдат изпълнявани команди като root, чрез определянето на потребителско ID -1 или 4294967295.
Експлоатирането на бъга изисква потребителите да имат sudo права, което им позволява старирането на команди като потребител с произволно потребителско ID. Обикновено това означава, че този потребител има специалната стойност ALL в Runas спецификацията.
Sudo позволява не само стартиране на команди с повишени права с указано потребителско име или потребителсто ID, ако това е упоменато в sudoers правилата, но и позволява стартирането на командите с произволен потребител с използването на #uid синтаксиса.
sudo -u#1234 id -u
ще върне 1234, но системните извиквания setresuid(2) и setreuid(2), които sudo използва за смяната на потребителското ID преди стартирането на командата, третират потребителското ID -1 (или неговия неподписан еквивалент 4294967295) по специален начин и не променя потребителското ID за тази стойност.
В резултат на това
sudo -u#-1 id -u
или
sudo -u#4294967295 id -u
ще върнат нула (0), защото sudo командата вече е стартирана като потребител с ID 0, така че когато sudo се опитва да промени ID -1, всъщност промяната не се осъществява.
В sudo логовете се съобщава, че командата е била стартирана от потребителско ID 4294967295, а не от root или от потребителско ID 0. Допълнително, понеже потребителското ID, което е указано с опцията -u, не съществува в базата данни с паролите, не се стартират никакви PAM сесии.
Ако има sudoers запис, позволяващ на потребител да стартира команди като всеки потребител, с изключение на root, новата уязвимост може да бъде използвана, за да се избегне тази забрана.
Да вземем за пример следния sudoers запис:
myhost bob = (ALL, !root) /usr/bin/vi
Потребителят bob получава права да стартира vi с всеки един потребител, с изключение на root. Поради уязвимостта обаче bob всъщност може да стартира vi като root, нарушавайки зададените права чрез командата:
sudo -u#-1 vi
Засегнати са конфигурациите, при които присъства ключовата дума ALL в Runas. В следващия пример се показва случай, който не е засегнат, защото не присъства ALL:
myhost alice = /usr/bin/id
В този пример на потребителя alice е позволено да стартира id като root, а всеки опит id да бъде стартиран с друг потребител ще бъде отказан.
Уязвимостта CVE-2019-14287 вече е поправена в новата версия на sudo 1.8.28. Всички по-стари версии са засегнати.
Повече подробности можете да намерите тук.