Kritisk sårbarhet i Exim som gjør at kode kan kjøres på serveren med root-privilegier

I Exim e-postserver identifisert kritisk sårbarhet (CVE-2019-10149), som kan føre til ekstern kjøring av kode på serveren med rotrettigheter ved behandling av en spesiallaget forespørsel. Muligheten for utnyttelse av problemet ble notert i versjoner fra 4.87 til og med 4.91 eller ved bygging med alternativet EXPERIMENTAL_EVENT.

I standardkonfigurasjonen kan angrepet utføres uten unødvendige komplikasjoner av en lokal bruker, siden "verify = recipient" ACL brukes, som utfører ytterligere kontroller for eksterne adresser. Et eksternt angrep kan oppstå når innstillinger endres, for eksempel å fungere som en sekundær MX for et annet domene, fjerne "verify=recipient" ACL eller visse endringer i local_part_suffix). Et eksternt angrep er også mulig hvis angriperen er i stand til å holde tilkoblingen til serveren åpen i 7 dager (for eksempel ved å sende en byte per minutt for å omgå en tidsavbrudd). Samtidig er det mulig at det finnes enklere angrepsvektorer for fjernutnyttelse av problemet.

Sårbarheten er forårsaket av feil bekreftelse av mottakerens adresse i delivery_message()-funksjonen definert i filen /src/deliver.c. Ved å manipulere adresseformateringen, kan en angriper oppnå erstatning av dataene sine i argumentene til en kommando kalt gjennom execv()-funksjonen med rotrettigheter. Drift krever ikke bruk av komplekse teknikker som brukes for bufferoverløp eller minnekorrupsjon er tilstrekkelig.

Problemet er relatert til bruken av konstruksjonen for adressekonvertering:

levere_lokalpart = utvide_streng(
string_sprintf("${local_part:%s}", ny->adresse));
levere_domene = utvide_streng(
string_sprintf("${domene:%s}", ny->adresse));

Expand_string()-funksjonen er en overkomplisert kombinator, inkludert gjenkjennelse av kommandoen "${run{command arguments}", som fører til lanseringen av en ekstern behandler. For å angripe innenfor en SMTP-økt, trenger en lokal bruker bare å sende en kommando som 'RCPT TIL «brukernavn+${run{...}}@localhost»', der localhost er en av vertene fra listen local_domains, og brukernavn er navnet på en eksisterende lokal bruker.

Hvis serveren fungerer som et e-postrelé, er det nok å eksternt sende kommandoen 'RCPT TIL "${run{...}}@relaydomain.com"', der relaydomain.com er en av vertene som er oppført i relay_to_domains innstillingsdelen. Siden Exim ikke er standard for å droppe rettighetsmodus (deliver_drop_privilege = false), vil kommandoer som sendes via "${run{...}}" bli utført som root.

Det er bemerkelsesverdig at sårbarheten var eliminert i 4.92-utgivelsen som ble utgitt i februar, uten å understreke at reparasjonen kan føre til sikkerhetsproblemer. Det er ingen grunn til å tro at det var en bevisst fortielse av sårbarheten av Exim-utviklerne, siden problemet ble løst under fikser feil som oppstår når feil adresser overføres, og sårbarheten ble identifisert av Qualys under en revisjon av endringer i Exim.

En rettelse for tidligere versjoner som fortsatt brukes i distribusjoner er foreløpig kun tilgjengelig som lapp. Korrigerende utgivelser for tidligere grener for å fikse problemet er planlagt til 11. juni. Pakkeoppdateringer er klare for Debian, Ubuntu, opensuse. Arch Linux и Fedora De leverer versjon 4.92, der problemet ikke vises. RHEL og CentOS-problem ikke mottakelig, siden Exim ikke er inkludert i deres vanlige pakkelager.

Kilde: opennet.ru

Legg til en kommentar