Sårbarheder i apport og systemd-coredump, der muliggør udtræk af systembrugerens adgangskodens hashes.

Qualys har identificeret to sårbarheder i apport-værktøjerne (CVE-2025-5054) og systemd-coredump (CVE-2025-4598), der bruges til at håndtere core-filer genereret efter uventet afslutning af processer. Sårbarhederne gør det muligt at få adgang til core-filer, der er gemt efter uventet afslutning af suid-applikationer eller visse systembaggrundsprocesser, hvis hukommelse kan indeholde cachede legitimationsoplysninger eller krypteringsnøgler. Apport-værktøjet kaldes automatisk for at gemme core-dumps i Ubuntu, mens systemd-coredump bruges i Red Hat Enterprise Linux 9+, Fedora og mange andre Linux-distributioner.

Der blev demonstreret en angrebsteknik, hvor der blev skabt betingelser for uventet afslutning af suid-applikationen unix_chkpwd og adgang til core-filen med dumpede tilstande under nedbruddet. Den gemte core-dump indeholdt hash-værdier for brugernes adgangskoder, der forblev i hukommelsen på den uventet afsluttede proces efter indlæsning af indholdet fra /etc/shadow. Muligheden for udnyttelse af sårbarhederne blev demonstreret i Ubuntu 24.04 og Fedora 40/41, men det antages, at også andre distributioner er sårbare over for sådanne angreb.

Begge sårbarheder stammer fra en racecondition, der gør det muligt at erstatte en uventet afsluttet suid-proces med en anden proces lige efter at kernen har påbegyndt håndteringen af nedbruddet, men før kontrolhukommelsen i brugerprocessen tjekker procesparametrene via /proc/pid/files. Kaldet til apport og systemd-coredump foregår på følgende måde: kernen, efter at have modtaget information om en procesfejl, kalder den angivne behandler i filen /proc/sys/kernel/core_pattern, hvorefter den sender indholdet af core-dumpen gennem inputstrømmen.

Genereringen af core-dumpen og kaldet til behandleren sker ikke øjeblikkeligt, og der er tilstrækkelig tid til at erstatte den afsluttede suid-proces med en almindelig brugerproces. I tilfælde af substitution vil den kørende core-dump-behandler antage, at fejlen ikke skete i suid-processen, men i en almindelig brugerapplikation, og derfor vil den gemme core-filen med adgangsretter for almindelige brugere, i stedet for kun administratorer.

Angrebet mod apport kan opsummeres i følgende trin:

  • Et nyt proces oprettes, og funktionen execve() kaldes for at starte en suid-program, såsom unix_chkpwd.
  • Tiden, der kræves for at indlæse sensitive data i hukommelsen af suid-programmet, overses (i tilfælde af unix_chkpwd forventes det, at hash-værdierne for alle systembrugeres adgangskoder indlæses fra filen /etc/shadow).
  • Inden kommandoen er udført, sendes der et SIGSEGV eller SIGSYS signal til processen for nødstop.
  • Som svar på nødstop genererer kernen en core-dump og starter apport-processen for at behandle core-dump'en i brugerrummet.
  • Efter at apport er startet, men før det nødstop skete, sendes der et SIGKILL signal til den nødstoppe proces, og selve processen erstattes af en anden uden suid-flaget. For at omgå kontrollerne i apport oprettes den nye proces inden for separate navnerum (user, pid og mount namespace).
  • apport opretter forbindelse til unix-socketen /run/apport.socket i det navnerum af monteringspunkter, der er oprettet til den nye proces, og sender en filbeskrivelse for adgang til core-dump'en.

For at tilvejebringe den ønskede identifikator for den nye proces, der matcher identifikatoren for suid-processen, stoppes suid-processen med signalet SIGSTOP, og mens den er stoppet, startes der cyklisk nye processer, indtil der opnås en PID med et tidligere nummer, der er tæt på den erstatningsdygtige suid-proces. Efter at PID'erne er forskudt, sendes der SIGSEGV og SIGCONT signaler til suid-processen, hvorefter der sendes et SIGKILL signal, og der startes cyklisk nye processer for at opnå den samme PID som suid-processen.

Hvad angår systemd-coredump, er det på den ene side lettere at udføre et angreb mod det, da det ikke er nødvendigt at erstatte suid-processen med en proces i et separat brugerrum, og det er tilstrækkeligt at opnå en overensstemmelse mellem AT_UID og AT_EUID. På den anden side er systemd-coredump skrevet i C og køres hurtigt, hvilket giver mindre tid til substitution, i modsætning til apport, der er skrevet i Python og under initializationen indlæser forskellige pyc-filer. Dette problem løses ved kunstigt at forsinke systemd-coredump — når suid-filen kaldes, overføres et meget stort antal kommandolinjeargumenter, hvilket skaber den nødvendige forsinkelse, der opstår under analysen af /proc/pid/cmdline.

Under analysen af sårbarheder har forskere også identificeret, at systemd-coredump ved indstillingen af opkald ikke angiver flaget «%d» i /proc/sys/kernel/core_pattern, hvilket giver en angriber mulighed for at påtvinge en nedbrudt tilstand af baggrundsprocesser, der kører med root-rettigheder og afleder andre processer med ændring af brugeridentifikatoren til en ikke-privilegeret bruger, som angriberen benytter. Denne mulighed muliggør angreb ikke kun på setuid-programmer, men også på processer som sshd-session (OpenSSH), sd-pam (systemd) og cron, for at få adgang til fortrolige data, der er gemt i deres hukommelse, såsom hemmelige nøgler, hashværdier af adgangskoder fra /etc/shadow, canary-værdier fra stakken og data til at omgå randomisering af adresseplads (ASLR).

Opdateringer af pakker i distributioner kan følges på siderne: Debian, Ubuntu, RHEL, openSUSE, Fedora, Gentoo, Arch. Som en midlertidig løsning til at blokere for sårbarheder foreslås det at deaktivere gemningen af core-dumps for suid-programmer og privilegiebeskyttede processer ved at sætte parameteren /proc/sys/fs/suid_dumpable til 0. For at løse problemet helt kræves der ændringer i Linux-kernen, som implementerer muligheden for at overføre information om den nedbrudte proces gennem mekanismen pidfd (pidfd er knyttet til specifikke processer og genudpeges ikke som pid).

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster