Sårbarheder i OpenSMTPD, der muliggør fjern- og lokal adgang til root-rettigheder

Qualys har afsløret endnu en kritisk sårbarhed (CVE-2020-8794) i mailserveren OpenSMTPD, udviklet af OpenBSD-projektet. Ligesom den, der blev identificeret i slutningen af januar ASLR i programmer med setuid-flaget og bestemme adressefordelingen i de indlæste biblioteker gennem manipulation af miljøvariablen LD_PREFER_MAP_32BIT_EXEC., giver det nye problem mulighed for at udføre vilkårlige shell-kommandoer på serveren med root-brugerrettigheder. Sårbarheden er blevet løst i versionen OpenSMTPD 6.6.4p1.

Problemet skyldes en fejl i koden, der administrerer levering af e-mail til en ekstern mailserver (ikke i koden, der håndterer indgående forbindelser). Angrebet kan udføres både på klient- og serversiden. På klientsiden kan angrebet finde sted i standardkonfigurationen af OpenSMTPD, hvor OpenSMTPD kun accepterer anmodninger på den interne netværksgrænseflade (localhost) og sender e-mails til eksterne servere. For at udnytte sårbarheden er det tilstrækkeligt, at OpenSMTPD under leveringen af en e-mail opretter en session med en mailserver kontrolleret af angriberen, eller at angriberen kan infiltrere forbindelsen fra klienten (MITM eller omdirigering under angreb via DNS eller BGP).

For at angrebet kan finde sted på serversiden, skal OpenSMTPD være konfigureret til at modtage eksterne netværksanmodninger fra andre mailservere eller betjene tredjepartstjenester, der tillader at sende anmodninger til vilkårlige e-mails (f.eks. bekræftelsesformularer på websteder). For eksempel kan en angriber oprette forbindelse til OpenSMTPD-serveren og sende en ugyldig e-mail (til en ikke-eksisterende bruger), hvilket vil resultere i, at der sendes et fejlmeddelelse (bounce) tilbage til angriberens server. Angriberen kan udnytte sårbarheden, når OpenSMTPD opretter forbindelse for at levere en meddelelse til angriberens server. Shell-kommandoer indsat under angrebet placeres i en fil, der køres med root-rettigheder ved genstart af OpenSMTPD, så angriberen skal vente på genstarten af OpenSMTPD eller initiere et nedbrud af OpenSMTPD.

Problemet findes i funktionen mta_io() i koden til at analysere det multiline svar, der returneres af den fjerntliggende server efter oprettelse af forbindelse (f.eks. "250-ENHANCEDSTATUSCODES" og "250 HELP"). I OpenSMTPD forventes det, at den første linje indeholder et tresifret tal og tekst, adskilt af symbolet "-", og den anden linje et tresifret tal og tekst, adskilt af et mellemrum. Hvis der efter det tresifrede tal i den anden linje ikke følger et mellemrum og tekst, sættes pegeren, der bruges til at bestemme teksten, til den byte, der følger efter symbolet '\0', og der gøres et forsøg på at kopiere til bufferen for data, der følger efter slutningen af linjen.

Efter anmodning fra OpenBSD-projektet er offentliggørelse af detaljer om udnyttelsen af sårbarheden udsat til 26. februar for at give brugerne mulighed for at opdatere deres systemer. Problemet har været til stede i kodebasen siden december 2015, men udnyttelse til eksekvering af kode med root-rettigheder har været muligt siden maj 2018. Forskere har udviklet en fungerende prototype af et exploit, som er blevet testet med succes i OpenSMTPD-versioner for OpenBSD 6.6, OpenBSD 5.9, Debian 10, Debian 11 (testing) og Fedora 31.

I OpenSMTPD er der også opdaget en anden sårbarhed (CVE-2020-8793), som gør det muligt for en lokal bruger at læse den første linje af enhver fil i systemet. For eksempel kan man læse den første linje i /etc/master.passwd, som indeholder hash-værdien for root-brugerens kodeord. Sårbarheden tillader også læsning af hele indholdet af en fil, der tilhører en anden bruger, hvis denne fil findes på samme filsystem som kataloget /var/spool/smtpd/. Problemet kan ikke udnyttes i mange Linux-distributioner, hvor værdien af /proc/sys/fs/protected_hardlinks er sat til 1.

Problemet er en konsekvens af en utilstrækkelig afhjælpning problemer, som blev fremhævet i en revision udført af Qualys i 2015. Angriberen kan opnå udførelse af sin kode med rettighederne til gruppen «_smtpq» ved at indstille variablen «PATH=.» og placere et script med navnet makemap i det aktuelle katalog (værktøjet smtpctl kalder makemap uden eksplicit angivelse af stien). Efter at have fået adgang til gruppen «_smtpq» kan angriberen derefter udløse en race condition (oprette en stor fil i offline-kataloget og sende signalet SIGSTOP) og, inden behandlingen er færdig, erstatte filen i offline-kataloget med en hård symbolsk link, der peger på den ønskede fil, hvis indhold skal læses.

Bemærkelsesværdigt er det, at i Fedora 31 giver sårbarheden straks adgang til root-gruppens privilegier, da processen smtpctl er udstyret med setgid root-flaget i stedet for setgid smtpq. Ved at få adgang til root-gruppen kan man overskrive indholdet af /var/lib/sss/mc/passwd og opnå fuld root-adgang til systemet.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster