Op afstand exploiteerbare kwetsbaarheid in de qmail-mailserver

Beveiligingsonderzoekers van Qualys toonde kans exploitatie kwetsbaarheden in de qmail mailserver, bekend uit 2005 (CVE-2005-1513), maar bleef ongepatcht omdat de auteur van qmail betoogde dat het onrealistisch was om een ​​werkende exploit te creëren die gebruikt zou kunnen worden om systemen in de standaardconfiguratie aan te vallen. Qualys heeft een exploit kunnen voorbereiden die deze veronderstelling weerlegt en waarmee men op afstand code op de server kan uitvoeren door een speciaal ontworpen bericht te verzenden.

Het probleem wordt veroorzaakt door een overflow van gehele getallen in de functie stralloc_readyplus(), die kan optreden bij het verwerken van een zeer groot bericht. Voor de werking was een 64-bits systeem nodig met meer dan 4 GB virtueel geheugen. Toen de kwetsbaarheid oorspronkelijk in 2005 werd geanalyseerd, betoogde Daniel J. Bernstein dat de aanname in de code dat de grootte van de toegewezen array altijd binnen de 32-bits waarde ligt, gebaseerd is op het feit dat niemand gigabytes aan geheugen aan elk proces levert. De afgelopen vijftien jaar hebben 15-bits systemen op servers de 64-bits systemen vervangen, en is de hoeveelheid geleverd geheugen en netwerkbandbreedte dramatisch toegenomen.

De beheerders van het qmail-pakket hielden rekening met de opmerking van Bernstein en beperkten het beschikbare geheugen bij het starten van het qmail-smtpd-proces (Debian 10 stelt bijvoorbeeld een limiet van 7 MB in). Maar engineers van Qualys ontdekten dat dit niet genoeg is en naast qmail-smtpd kan er ook een aanval op afstand worden uitgevoerd op het qmail-local proces, dat in alle geteste pakketten onbeperkt bleef. Als bewijs werd een exploit-prototype voorbereid, geschikt om het Debian-pakket aan te vallen met qmail in de standaardconfiguratie.
Om de uitvoering van code op afstand tijdens een aanval te organiseren, heeft de server 4 GB vrije schijfruimte en 8 GB RAM nodig.
Met de exploit kun je alle shell-opdrachten uitvoeren met de rechten van elke gebruiker in het systeem, behalve voor root- en systeemgebruikers die geen eigen submap hebben in de map “/home” (het qmail-local proces wordt gestart met de rechten van de lokale gebruiker aan wie wordt geleverd).

De aanval wordt uitgevoerd
door het verzenden van een zeer groot e-mailbericht, inclusief verschillende kopregels, van ongeveer 4 GB en 576 MB. Het verwerken van een dergelijke tekenreeks in qmail-local resulteert in een overflow van gehele getallen wanneer wordt geprobeerd een bericht af te leveren bij de lokale gebruiker. Een integer-overflow leidt vervolgens tot een buffer-overflow bij het kopiëren van gegevens en de mogelijkheid om geheugenpagina's te overschrijven met libc-code. Door de lay-out van de verzonden gegevens te manipuleren, is het ook mogelijk om het adres van de functie “open()” te herschrijven en te vervangen door het adres van de functie “system()”.

Vervolgens wordt tijdens het aanroepen van qmesearch() in qmail-local het bestand “.qmail-extension” geopend via de functie open(), wat leidt tot de daadwerkelijke uitvoering van de functie
system(".qmail-extensie"). Maar aangezien het “extensie”-gedeelte van het bestand wordt gegenereerd op basis van het adres van de ontvanger (bijvoorbeeld “localuser-extension@localdomain”), kunnen aanvallers ervoor zorgen dat de opdracht wordt uitgevoerd door de gebruiker “localuser-;command” op te geven. ;@localdomain” als de ontvanger van het bericht.

Tijdens de codeanalyse werden ook twee kwetsbaarheden geïdentificeerd in de aanvullende qmail-verify-patch, die deel uitmaakt van het pakket voor Debian. Eerste kwetsbaarheid (CVE-2020-3811) kunt u de e-mailadresverificatie omzeilen, en met de tweede (CVE-2020-3812) leidt tot het lekken van lokale informatie. Met name door de eerste kwetsbaarheid kun je de verificatie van de juistheid van het in de exploit gebruikte adres omzeilen om een ​​commando te versturen (de verificatie werkt niet voor adressen zonder domein, zoals “localuser-;command;”). De tweede kwetsbaarheid kan worden gebruikt om de aanwezigheid van bestanden en mappen op het systeem te controleren, inclusief bestanden die alleen toegankelijk zijn voor root (qmail-verify draait met root-rechten), door een directe oproep naar de lokale handler.

Om het probleem te omzeilen raadde Bernstein aan om qmail-processen uit te voeren met een totale limiet op het beschikbare geheugen (“softlimit -m12345678”), in welk geval het probleem wordt geblokkeerd. Als alternatieve beschermingsmethode wordt ook het beperken van de maximale grootte van het verwerkte bericht via het “control/databytes”-bestand genoemd (standaard wordt dit niet aangemaakt met standaardinstellingen, qmail blijft kwetsbaar). Bovendien beschermt "control/databytes" niet tegen lokale aanvallen van systeemgebruikers, omdat de limiet alleen in aanmerking wordt genomen door qmail-smtpd.

Het probleem heeft invloed op het pakket netqmail, opgenomen in de Debian-opslagplaatsen. Voor dit pakket is een reeks patches voorbereid, waarmee zowel oude kwetsbaarheden uit 2005 (door het toevoegen van harde geheugenlimieten aan de functiecode alloc()) als nieuwe problemen in qmail-verify worden geëlimineerd. Afzonderlijk bereid bijgewerkte versie van de qmail-verify-patch. Ontwikkelaars takken notqmail bereidden hun eigen patches voor om oude problemen te blokkeren, en begonnen ook te werken aan het elimineren van alle mogelijke integer-overflows in de code.

Bron: opennet.ru

Voeg een reactie