Eksternt utnyttbar sårbarhet i qmail-e-postserveren

Sikkerhetsforskere fra Qualys viste mulighet utnyttelse sårbarheter i qmail-postserveren, berømt tilbake i 2005 (CVE-2005-1513), men forble uopprettet fordi forfatteren av qmail hevdet at det var urealistisk å lage en fungerende utnyttelse som kan brukes til å angripe systemer i standardkonfigurasjonen. Qualys var i stand til å forberede en utnyttelse som tilbakeviser denne antagelsen og lar en starte ekstern kjøring av kode på serveren ved å sende en spesialdesignet melding.

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 (CVE-2020-3811) lar deg omgå e-postadressebekreftelse, og den andre (CVE-2020-3812) fører til lekkasje av lokal informasjon. Spesielt lar den første sårbarheten deg omgå verifiseringen av riktigheten til adressen som ble brukt i utnyttelsen for å sende en kommando (verifiseringen fungerer ikke for adresser uten domene, for eksempel "localuser-;command;"). Den andre sårbarheten kan brukes til å sjekke tilstedeværelsen av filer og kataloger på systemet, inkludert de som bare er tilgjengelige for root (qmail-verify kjører med root-rettigheter), gjennom et direkte anrop til den lokale behandleren.

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 netqmail, inkludert i Debian-repositoriene. Det er utarbeidet et sett med patcher for denne pakken, som eliminerer både gamle sårbarheter fra 2005 (ved å legge til grenser for hardt minne til alloc()-funksjonskoden) og nye problemer i qmail-verify. Hver for seg forberedt oppdatert versjon av qmail-verify-oppdateringen. Utviklere grener notqmail forberedte sine egne patcher for å blokkere gamle problemer, og begynte også å jobbe med å eliminere alle mulige heltallsoverløp i koden.

Kilde: opennet.ru

Legg til en kommentar