Sikkerhetsforskere fra Qualys
Problemet er forårsaket av et heltallsoverløp i stralloc_readyplus()-funksjonen, som kan oppstå når en veldig stor melding behandles. Driften krevde et 64-bitssystem med mer enn 4 GB virtuelt minne. Da sårbarheten opprinnelig ble analysert i 2005, argumenterte Daniel J. Bernstein for at antagelsen i koden om at størrelsen på den tildelte matrisen alltid er innenfor 32-bits verdi er basert på det faktum at ingen gir gigabyte med minne til hver prosess. I løpet av de siste 15 årene har 64-bits systemer på servere erstattet 32-bits systemer, og mengden levert minne og nettverksbåndbredde har økt dramatisk.
Vedlikeholdere av qmail-pakken tok Bernsteins notat i betraktning og begrenset tilgjengelig minne da de startet qmail-smtpd-prosessen (for eksempel i Debian 10 er grensen satt til 7MB). Men ingeniører fra Qualys fant ut at dette ikke er nok, og i tillegg til qmail-smtpd, kan et eksternt angrep utføres på qmail-local-prosessen, som forble ubegrenset i alle testede pakker. Som bevis ble det utarbeidet en utnyttelsesprototype som var egnet for å angripe Debian-pakken med qmail i standardkonfigurasjonen.
For å organisere ekstern kjøring av kode under et angrep, krever serveren 4 GB ledig diskplass og 8 GB RAM.
Utnyttelsen lar deg kjøre alle shell-kommandoer med rettighetene til alle brukere i systemet, bortsett fra rot- og systembrukere som ikke har sin egen underkatalog i "/home"-katalogen (qmail-local-prosessen startes med rettighetene til den lokale brukeren som leveringen utføres til).
Angrepet gjennomføres
ved å sende en veldig stor e-postmelding, inkludert flere overskriftslinjer, som måler omtrent 4 GB og 576 MB. Behandling av en slik streng i qmail-local resulterer i et heltallsoverløp når du prøver å levere en melding til den lokale brukeren. Et heltallsoverløp fører da til bufferoverløp ved kopiering av data og mulighet for å overskrive minnesider med libc-kode. Ved å manipulere utformingen av de overførte dataene, er det også mulig å omskrive adressen til "open()"-funksjonen, og erstatte den med adressen til "system()"-funksjonen.
Deretter, i prosessen med å kalle qmesearch() i qmail-local, åpnes filen ".qmail-extension" gjennom open()-funksjonen, noe som fører til den faktiske utførelsen av funksjonen
system(".qmail-utvidelse"). Men siden «utvidelsen»-delen av filen genereres basert på mottakerens adresse (for eksempel «localuser-extension@localdomain»), kan angripere sørge for at kommandoen sendes til å kjøre ved å spesifisere brukeren «localuser-;command ;@localdomain" som mottaker av meldingen.
Under kodeanalysen ble to sårbarheter også identifisert i den ekstra qmail-verify-patchen, som er en del av pakken for Debian. Første sårbarhet (
For å omgå problemet anbefalte Bernstein å kjøre qmail-prosesser med en totalgrense på tilgjengelig minne ("softlimit -m12345678"), i så fall er problemet blokkert. Som en alternativ beskyttelsesmetode nevnes også å begrense den maksimale størrelsen på den behandlede meldingen gjennom "control/databytes"-filen (som standard er den ikke opprettet med standardinnstillinger qmail forblir sårbar). I tillegg beskytter ikke "control/databytes" mot lokale angrep fra systembrukere, siden grensen kun tas i betraktning av qmail-smtpd.
Problemet påvirker pakken
Kilde: opennet.ru