Намерена е уязвимост в sudo, която позволява присвояването на права

1
103
Намерена е уязвимост в sudo, която позволява присвояването на права

Намерена е уязвимост в помощната програма за 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 сесии.

Прочетете още:  Излезе Arch Linux 2020.01.01

Ако има 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. Всички по-стари версии са засегнати.

Повече подробности можете да намерите тук.

5/5 (1 Review)
1 Comment
нови
стари оценка
Inline Feedbacks
View all comments