Sikkerhedsforskere fra Qualys
Problemet er forårsaget af et heltalsoverløb i stralloc_readyplus()-funktionen, som kan opstå ved behandling af en meget stor besked. Betjening krævede et 64-bit system med mere end 4 GB virtuel hukommelse. Da sårbarheden oprindeligt blev analyseret i 2005, argumenterede Daniel J. Bernstein for, at antagelsen i koden om, at størrelsen af det allokerede array altid er inden for 32-bit værdi, er baseret på, at ingen leverer gigabyte hukommelse til hver proces. I løbet af de sidste 15 år har 64-bit systemer på servere erstattet 32-bit systemer, og mængden af leveret hukommelse og netværksbåndbredde er steget dramatisk.
Vedligeholderne af qmail-pakken tog Bernsteins notat i betragtning og begrænsede den tilgængelige hukommelse, da de startede qmail-smtpd-processen (for eksempel i Debian 10 er grænsen sat til 7MB). Men ingeniører fra Qualys fandt ud af, at dette ikke er nok, og ud over qmail-smtpd kan et fjernangreb udføres på qmail-local-processen, som forblev ubegrænset i alle testede pakker. Som bevis blev der udarbejdet en exploit-prototype, der var egnet til at angribe Debian-pakken med qmail i standardkonfigurationen.
For at organisere fjernudførelse af kode under et angreb kræver serveren 4 GB ledig diskplads og 8 GB RAM.
Udnyttelsen giver dig mulighed for at køre enhver shell-kommando med rettighederne for enhver bruger i systemet, undtagen for root- og systembrugere, der ikke har deres egen undermappe i "/home"-mappen (qmail-local-processen startes med rettighederne af den lokale bruger, til hvem leveringen udføres).
Angrebet udføres
ved at sende en meget stor postbesked, inklusive flere header-linjer, der måler ca. 4GB og 576MB. Behandling af en sådan streng i qmail-local resulterer i et heltalsoverløb, når man forsøger at levere en besked til den lokale bruger. Et heltalsoverløb fører så til et bufferoverløb ved kopiering af data og muligheden for at overskrive hukommelsessider med libc-kode. Ved at manipulere layoutet af de transmitterede data er det også muligt at omskrive adressen på funktionen "open()" og erstatte den med adressen på funktionen "system()".
Dernæst, i processen med at kalde qmesearch() i qmail-local, åbnes filen ".qmail-extension" gennem funktionen open(), hvilket fører til den faktiske udførelse af funktionen
system(".qmail-udvidelse"). Men da "udvidelses"-delen af filen er genereret baseret på modtagerens adresse (for eksempel "localuser-extension@localdomain"), kan angribere sørge for, at kommandoen sendes til at køre ved at angive brugeren "localuser-;command ;@localdomain" som modtager af beskeden.
Under kodeanalysen blev to sårbarheder også identificeret i den ekstra qmail-verify patch, som er en del af pakken til Debian. Første sårbarhed (
For at omgå problemet anbefalede Bernstein at køre qmail-processer med en samlet begrænsning på tilgængelig hukommelse ("softlimit -m12345678"), i hvilket tilfælde problemet er blokeret. Som en alternativ beskyttelsesmetode nævnes også begrænsning af den maksimale størrelse af den behandlede meddelelse gennem "control/databytes"-filen (som standard er den ikke oprettet med standardindstillinger qmail forbliver sårbar). Derudover beskytter "control/databytes" ikke mod lokale angreb fra systembrugere, da grænsen kun tages i betragtning af qmail-smtpd.
Problemet påvirker pakken
Kilde: opennet.ru