Spoločnosť Qualys ďalšiu vzdialenú kritickú zraniteľnosť (CVE-2020-8794) v poštovom serveri , vyvíjanom projektom OpenBSD. Rovnako ako zistená na konci januára , nový problém umožňuje vzdialene vykonať ľubovoľné príkazy shell na serveri s právami používateľa root. Zraniteľnosť v vydaní .
Problém je spôsobený chybou v kóde, ktorý zabezpečuje doručovanie pošty na vzdialený poštový server (nie v kóde, ktorý spracováva prichádzajúce spojenia). Útok je možný ako na strane klienta, tak aj na strane servera. Na strane klienta je útok možný v predvolenej konfigurácii OpenSMTPD, v ktorej OpenSMTPD akceptuje požiadavky iba na vnútornom sieťovom rozhraní (localhost) a odosiela poštové správy na externé servery. Na vykonanie zraniteľnosti stačí, aby počas doručovania e-mailu OpenSMTPD nadviazal reláciu s poštovým serverom ovládaným útočníkom, alebo aby útočník mohol zasiahnuť do spojenia klienta (MITM alebo presmerovanie počas útokov cez DNS alebo BGP).
Na útok na strane servera je potrebné, aby bol OpenSMTPD nastavený na prijímanie externých sieťových požiadaviek od iných poštových serverov alebo obsluhoval externé služby, ktoré umožňujú zaslať požiadavku na ľubovoľný e-mail (napríklad formuláre potvrdzujúce adresu na webových stránkach). Napríklad útočník sa môže pripojiť k serveru OpenSMTPD a odoslať neplatný e-mail (neexistujúcemu používateľovi), čo spôsobí spätnú reakciu s chybovým kódom (bounce) na server útočníka. Útočník môže zraniteľnosť využiť v okamihu, keď sa OpenSMTPD pripojí na doručenie oznámenia na server útočníka. Vloženej počas útoku shell-príkazy sa ukladajú do súboru, ktorý sa vykoná s právami root pri reštartovaní OpenSMTPD, preto útočník musí na potvrdenie útoku počkať na reštart OpenSMTPD alebo iniciovať pád OpenSMTPD.
Problém sa nachádza vo funkcii mta_io() v kóde na spracovanie viacriadkových odpovedí, ktoré vracia vzdialený server po nadviazaní spojenia (napríklad „250-ENHANCEDSTATUSCODES“ a „250 HELP“). V OpenSMTPD sa predpokladá, že prvý riadok obsahuje trojciferné číslo a text oddelené znakom „-“, a druhý riadok trojciferné číslo a text oddelené medzerou. Ak za trojciferným číslom v druhom riadku nasleduje text bez medzery, ukazovateľ používaný na určenie textu sa nastaví na bajt nasledujúci za znakom ‘\0’ a pokusí sa skopírovať do dátového buffera nasledujúce po konci riadku.
Na žiadosť projektu OpenBSD bola publikácia podrobností o zneužiteľnosti odložená do 26. februára, aby sa používateľom umožnilo aktualizovať svoje systémy. Problém sa nachádza v kódovej základni od decembra 2015, ale zneužitie umožňujúce vykonanie kódu s právami root je možné od mája 2018. Výskumníci pripravili funkčný prototyp exploit-u, ktorý bol úspešne testovaný na zostavách OpenSMTPD pre OpenBSD 6.6, OpenBSD 5.9, Debian 10, Debian 11 (testing) a Fedora 31.
V OpenSMTPD sa nachádza ešte jedna zraniteľnosť (CVE-2020-8793), ktorá umožňuje lokálnemu používateľovi prečítať prvý riadok akéhokoľvek súboru v systéme. Napríklad je možné prečítať prvý riadok /etc/master.passwd, kde je uložený hash hesla používateľa root. Zraniteľnosť tiež umožňuje prečítať celý obsah súboru, ktorý patrí inému používateľovi, ak sa tento súbor nachádza v tej istej FS ako adresár /var/spool/smtpd/. Problém nie je zneužiteľný vo viacerých distribúciách Linuxu, v ktorých je hodnota /proc/sys/fs/protected_hardlinks nastavená na 1.
Problém je dôsledkom neúplného odstránenia , ktoré boli vyslovené počas auditu vykonaného spoločnosťou Qualys v roku 2015. Útočník môže dosiahnuť vykonanie svojho kódu s právami skupiny „_smtpq“, nastavením premennej „PATH=.“ a umiestnením skriptu s názvom makemap do aktuálneho adresára (nástroj smtpctl spúšťa makemap bez explicitného určenia cesty). Získaním prístupu do skupiny „_smtpq“ môže útočník následne vyvolať podmienku pre závod (vytvoriť veľký súbor v adresári offline a poslať signál SIGSTOP) a pred dokončením spracovania zameniť súbor v adresári offline na tvrdú symbolickú referenciu ukazujúcu na cieľový súbor, ktorého obsah je potrebné prečítať.
Zaujímavé je, že vo Fedore 31 zraniteľnosť umožňuje okamžité získanie privilégií skupiny root, pretože proces smtpctl má flag setgid root namiesto setgid smtpq. Získaním prístupu do skupiny root je možné prepisovať obsah /var/lib/sss/mc/passwd a získať plný root prístup v systéme.
Zdroj: opennet.ru
