Vulnerabilitéit an OpenSMTPD déi d'Remote Code Ausféierung mat Root Privilegien erlaabt

Am Mail Server entwéckelt vum OpenBSD Projet OpenSMTPD identifizéiert kritesch Schwachstelle (CVE-2020-7247), wat Iech erlaabt Shell Kommandoen um Server mat root Benotzerrechter op afstand auszeféieren. D'Schwachstelle gouf identifizéiert wärend engem Neiaudit duerch Qualys Security (virdrun OpenSMTPD Audit) duerchgefouert gouf am 2015, an déi nei Schwachstelle ass zënter Mee 2018 präsent). Problem eliminéiert an OpenSMTPD 6.6.2 Verëffentlechung. All Benotzer ginn recommandéiert direkt den Update z'installéieren (fir OpenBSD kann de Patch iwwer Syspatch installéiert ginn).

Zwee Attack Optiounen sinn proposéiert. Déi éischt Optioun funktionnéiert an der Standard OpenSMTPD Konfiguratioun (akzeptéiert Ufroe just vum localhost) an erlaabt Iech de Problem lokal auszenotzen, wann den Ugräifer fäeg ass op d'lokal Netzwierk Interface (loopback) um Server (zum Beispill op Hostingsystemer) ze kommen. . Déi zweet Optioun geschitt wann OpenSMTPD konfiguréiert ass fir extern Netzwierk Ufroen ze kréien (e Mailserver deen Drëtt Partei Mail akzeptéiert). D'Fuerscher hunn e Prototyp vun engem Exploit virbereet deen erfollegräich funktionnéiert souwuel mat der OpenSMTPD Versioun abegraff an OpenBSD 6.6 a mat enger portable Versioun fir aner Betribssystemer (duerchgefouert an Debian Testen).

De Problem ass verursaacht duerch e Feeler an der smtp_mailaddr () Funktioun, déi genannt gëtt fir d'Korrektheet vun de Wäerter an de Felder "MAIL FROM" an "RCPT TO" ze kontrolléieren, déi de Sender / Empfänger definéieren a wärend der Verbindung passéiert ginn. mam Mailserver. Fir den Deel vun der E-Mailadress ze kontrolléieren déi virum "@" Symbol kënnt, gëtt d'Funktioun smtp_mailaddr() genannt
valid_localpart(), déi d'Zeechen "!#$%&'*/?^`{|}~+-=_" akzeptéiert (MAILADDR_ALLOWED), wéi néideg vum RFC 5322.

An dësem Fall gëtt direkt Flucht vun der String an der Funktioun mda_expand_token () duerchgefouert, déi nëmmen d'Zeechen "!#$%&'*?`{|}~" (MAILADDR_ESCAPE) ersetzt. Duerno gëtt d'Linn virbereet an mda_expand_token () benotzt wann Dir den Liwwerungsagent (MDA) rufft mam Kommando 'execle ("/bin/sh", "/bin/sh", "-c", mda_command,...' Am Fall wou Bréiwer op mbox iwwer /bin/sh gesat ginn, gëtt d'Linn "/usr/libexec/mail.local -f %%{mbox.from} %%{user.username}" gestart, wou de Wäert "% {mbox.from}" enthält entkomm Daten aus dem "MAIL FROM" Parameter.

D'Essenz vun der Schwachstelle ass datt smtp_mailaddr() e logesche Feeler huet, wéinst deem, wann en eidelen Domain op E-Mail geschéckt gëtt, d'Funktioun en erfollegräiche Verifizéierungscode zréckginn, och wann den Deel vun der Adress virun "@" ongëlteg Zeechen enthält . Weider, wann Dir eng String virbereet, entkommt d'mda_expand_token () Funktioun net all méiglech Shell Spezialzeechen, awer nëmmen speziell Zeechen erlaabt an der E-Mailadress. Also, fir Äre Kommando auszeféieren, ass et genuch fir de Symbol ";" am lokalen Deel vun der E-Mail ze benotzen. a Raum, déi net am MAILADDR_ESCAPE Set abegraff sinn an net entkomm sinn. Zum Beispill:

$nc 127.0.0.1 25

HELO professor.falken
MAIL VUN:<;schlof 66;>
RCPT AN:
DATA
.
QUIT

No dëser Sessioun wäert OpenSMTPD, wann se op mbox geliwwert ginn, de Kommando duerch d'Shell starten

/usr/libexec/mail.local -f ;schlof 66; root

Zur selwechter Zäit sinn d'Attackméiglechkeeten limitéiert duerch d'Tatsaach, datt de lokalen Deel vun der Adress net méi wéi 64 Zeeche ka sinn, an d'Spezialzeechen '$' an '|' ginn duerch ":" ersat beim Flucht. Fir dës Begrenzung ëmzegoen, benotze mir d'Tatsaach datt de Kierper vum Bréif iwwerdroe gëtt nodeems Dir /usr/libexec/mail.local duerch den Input Stream leeft, d.h. Andeems Dir d'Adress manipuléiert, kënnt Dir nëmmen den sh Kommando Dolmetscher starten an de Kierper vum Bréif als Set vun Instruktiounen benotzen. Zënter Service SMTP Header ginn um Ufank vum Bréif uginn, gëtt proposéiert de Liesbefehl an enger Loop ze benotzen fir se ze iwwersprangen. En Aarbechtsexploit gesäit sou eppes aus:

$nc 192.168.56.143 25

HELO professor.falken
MAIL VUN:<;fir i an 0 1 2 3 4 5 6 7 8 9 abcd;do liesen r;gemaach;sh;exit 0;>
RCPT AN:[Email geschützt]>
DATA
#0
#1
...
#d
fir ech an WOPR; maachen
echo -n "($i) " && id || briechen
gemaach > /root/x."`id -u`.""$$"
.
QUIT

Source: opennet.ru

Setzt e Commentaire