V poštovom serveri vyvinutom projektom OpenBSD
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