Zraniteľnosť v OpenSMTPD, ktorá umožňuje vzdialené spustenie kódu s oprávneniami root

V poštovom serveri vyvinutom projektom OpenBSD OpenSMTPD identifikované kritická zraniteľnosť (CVE-2020-7247), ktorý vám umožňuje vzdialene spúšťať príkazy shellu na serveri s právami užívateľa root. Zraniteľnosť bola identifikovaná počas opätovného auditu, ktorý vykonala spoločnosť Qualys Security (predchádzajúci audit OpenSMTPD bola vykonaná v roku 2015 a nová zraniteľnosť je prítomná od mája 2018). Problém eliminovaný vo vydaní OpenSMTPD 6.6.2. Všetkým používateľom sa odporúča, aby si aktualizáciu ihneď nainštalovali (pre OpenBSD je možné opravu nainštalovať cez syspatch).

Navrhujú sa dve možnosti útoku. Prvá možnosť funguje v predvolenej konfigurácii OpenSMTPD (prijíma požiadavky iba z localhost) a umožňuje zneužiť problém lokálne, keď má útočník prístup k rozhraniu lokálnej siete (loopback) na serveri (napríklad na hostiteľských systémoch) . Druhá možnosť nastane, keď je OpenSMTPD nakonfigurovaný na prijímanie externých sieťových požiadaviek (e-mailový server, ktorý prijíma poštu tretích strán). Výskumníci pripravili prototyp exploitu, ktorý úspešne funguje ako s verziou OpenSMTPD zahrnutou v OpenBSD 6.6, tak aj s prenosnou verziou pre iné operačné systémy (vykonané v testovaní Debianu).

Problém je spôsobený chybou vo funkcii smtp_mailaddr(), ktorá sa volá na kontrolu správnosti hodnôt v poliach „MAIL FROM“ a „RCPT TO“, ktoré definujú odosielateľa/príjemcu a ktoré sa odovzdávajú počas pripojenia. s poštovým serverom. Ak chcete skontrolovať časť e-mailovej adresy, ktorá sa nachádza pred symbolom „@“, zavolá sa funkcia smtp_mailaddr()
valid_localpart(), ktorá akceptuje (MAILADDR_ALLOWED) znaky "!#$%&'*/?^`{|}~+-=_", ako to vyžaduje RFC 5322.

V tomto prípade sa priame escapovanie reťazca vykonáva vo funkcii mda_expand_token(), ktorá nahrádza iba znaky „!#$%&’*?`{|}~“ (MAILADDR_ESCAPE). Následne sa riadok pripravený v mda_expand_token() použije pri volaní doručovacieho agenta (MDA) pomocou príkazu 'execle("/bin/sh", "/bin/sh", "-c", mda_command,...' V prípade umiestňovania písmen do mbox cez /bin/sh sa spustí riadok „/usr/libexec/mail.local -f %%{mbox.from} %%{user.username}“, kde je hodnota „% {mbox.from}” obsahuje uniknuté údaje z parametra „MAIL FROM“.

Podstata zraniteľnosti spočíva v tom, že smtp_mailaddr() má logickú chybu, kvôli ktorej v prípade odoslania prázdnej domény na email funkcia vráti úspešný overovací kód, aj keď časť adresy pred „@“ obsahuje neplatné znaky. . Ďalej, pri príprave reťazca funkcia mda_expand_token() neunikne všetkým možným špeciálnym znakom shellu, ale iba špeciálnym znakom povoleným v e-mailovej adrese. Na spustenie príkazu teda stačí použiť symbol „;“ v lokálnej časti e-mailu. a medzera, ktoré nie sú zahrnuté v množine MAILADDR_ESCAPE a nie sú zakódované. Napríklad:

$nc 127.0.0.1 25

HELO profesor.falken
POŠTA OD:
RCPT TO:
ÚDAJE
.
KONIEC

Po tejto relácii OpenSMTPD po doručení do mbox spustí príkaz cez shell

/usr/libexec/mail.local -f ;sleep 66; koreň

Možnosti útoku sú zároveň obmedzené tým, že lokálna časť adresy nemôže presiahnuť 64 znakov a špeciálne znaky „$“ a „|“ sú pri escapovaní nahradené „:“. Na obídenie tohto obmedzenia využívame fakt, že telo listu sa prenáša po spustení /usr/libexec/mail.local cez vstupný stream, t.j. Manipuláciou s adresou môžete spustiť iba interpret príkazov sh a použiť telo listu ako súbor pokynov. Keďže hlavičky SMTP služby sú uvedené na začiatku písmena, odporúča sa použiť príkaz read v slučke na ich preskočenie. Pracovný exploit vyzerá asi takto:

$nc 192.168.56.143 25

HELO profesor.falken
POŠTA OD:
RCPT TO:<[chránené e-mailom]>
ÚDAJE
#0
#1
...
#d
pre i vo W O PR; robiť
echo -n "($i) " && id || prestávka
hotovo > /root/x."`id -u`.""$$"
.
KONIEC

Zdroj: opennet.ru

Pridať komentár