Enlightenmenti kasutajakeskkonnas on tuvastatud haavatavus (CVE-2022-37706), mis võimaldab privileege mitteomaval kohalikel kasutajatel käivitada koodi root-õigustega. Haavatavust ei ole veel parandatud (0-day), kuid avatud juurdepääs on juba olemas eksploite, mis on testitud Ubuntu 22.04-s.
Probleem esineb failis enlightenment_sys, mis on tarnitud suid root lipuga ja käivitab system() kutsumise kaudu teatud lubatud käsklusi, nagu seadme mountimine utiliidiga mount. Funktsiooni vale käitumise tõttu, mis genereerib stringi, mis edastatakse system() kutsumisele, lõigatakse käivitatava käsu argumendist jutumärgid ära, mida saab kasutada oma koodi käivitamiseks. Näiteks käsu käivitamisel mkdir -p /tmp/net mkdir -p '/tmp/;/tmp/exploit' echo '/bin/sh' > /tmp/exploit chmod a+x /tmp/exploit enlightenment_sys /bin/mount -o noexec,nosuid,utf8,nodev,iocharset=utf8,utf8=0,utf8=1,uid=$(id -u), '/dev/../tmp/;/tmp/exploit' /tmp///net
Kuna topeltjutumärkide eemaldamise tõttu edastatakse system() funktsioonile string, milles puuduvad jutumärgid, siis antud käsu ' /bin/mount ... '/dev/../tmp/;/tmp/exploit' /tmp///net' asemel edastatakse string ' /bin/mount ... /dev/../tmp/;/tmp/exploit /tmp///net', mis viib käsu ' /tmp/exploit /tmp///net' eraldi täitmiseni, mitte tee osana töötluseni. Stringid '/dev/../tmp/' ja '/tmp///net' on valitud mount käsu argumentide kontrolli mööda minemiseks enlightenment_sys-is (mount seade peab algama /dev/ ja viitama olemasolevale failile, ning kolm sümbolit '/' mountimise punktis on valitud tee nõutava suuruse saavutamiseks).
Allikas: opennet.ru
