Beveiligingsonderzoekers van Qualys
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 (
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
Bron: opennet.ru