A segédprogramban , amelyet arra használnak, hogy más felhasználók nevében parancsokat hajtsanak végre, vulnerability (), lehetővé téve a rendszeren való jogosultságaink növelését root felhasználói szintre. A probléma a sudo 1.7.1 kiadásától kezdődően jelentkezik, csak akkor, amikor az /etc/sudoers fájlban a "pwfeedback" opciót használják, amely alapértelmezetten ki van kapcsolva, de egyes disztribúciókban, mint például a Linux Mint és az Elementary OS, be van kapcsolva. A probléma az alábbi kiadásban javítva lett, , amelyet néhány órával ezelőtt tettek közzé. A disztribúciókban a sérülékenység egyelőre javítatlan marad.
A "pwfeedback" opció aktiválja a "*" karakter megjelenítését minden egyes beírt karakter után a jelszó megadásakor. Ennek következtében a getln() függvény megvalósításában, amely a tgetpass.c fájlban található, a standard bemeneten (stdin) keresztül megadott túl hosszú jelszó sor bizonyos körülmények között nem fér el a lefoglalt pufferen, és más adatokat írhat felül a veremben. A túlcsordulás a sudo kód root jogosultságaival történő végrehajtása során lép fel.
A probléma lényege, hogy a speciális karakter, a ^U (sor törlése) használata során, és a write operációs hiba esetén a "*" karakterek törléséért felelős kód visszaállítja a puffer elérhető méretéről szóló adatokat, de nem állítja vissza a pufferben lévő aktuális pozícióra mutató mutatót. Egy másik tényező, amely hozzájárul a kihasználáshoz, az a "pwfeedback" mód automatikus kikapcsolásának hiánya, amikor a bemenet nem terminálból érkezik, hanem bemeneti áramlás (ez a hiányosság lehetővé teszi az írási hiba kialakulásának feltételeit, például egyirányú a hiba akkor lép fel, amikor a kiolvasás végén próbálkozunk írni).
Mivel a támadó teljes mértékben kontrollálja az adatok felülírását a veremben, nem nehéz olyan exploitot létrehozni, amely lehetővé teszi a jogosultságok root felhasználói szintre emelését. A probléma bármely felhasználó által kihasználható, függetlenül a sudo használati jogaitól és a felhasználóra vonatkozó sudoers beállításoktól. A probléma blokkolásához győződjön meg arról, hogy az /etc/sudoers fájlban nincs "pwfeedback" beállítás, és ha szükséges, kapcsolja ki azt ("Defaults !pwfeedback"). A probléma meglétének ellenőrzéséhez futtatható a következő kód:
$ perl -e ‘print(("A" x 100 . "\x{00}") x 50)’ | sudo -S id
Jelszó: Szegmentációs hiba
Forrás: opennet.ru
