Dobësi në apport dhe systemd-coredump që lejojnë nxjerrjen e hash-eve të fjalëkalimeve të përdoruesve të sistemit

Kompania Qualys zbuloi dy vulnerabilitete në mjetet apport (CVE-2025-5054) dhe systemd-coredump (CVE-2025-4598), të cilat përdoren për procesimin e skedarëve core, të gjeneruar pas përfundimit të papritur të proceseve. Vulnerabilitetet lejojnë qasje në skedarët core, të ruajtur pas përfundimit të papritur të aplikacioneve suid ose disa proceseve sistemike, në memorien e të cilave mund të përmbahen kredenciale të ruajtura ose çelësa enkriptimi. Utilita apport thirret automatikisht për të ruajtur core-dump në Ubuntu, ndërsa systemd-coredump në Red Hat Enterprise Linux 9+, Fedora dhe shumë shpërndarje të tjera të Linux-it.

Demonstruar një teknikë sulmi, gjatë së cilës krijoheshin kushte për përfundimin e papritur të aplikacionit suid unix_chkpwd dhe për të fituar qasje në skedarin core me dump-in e gjendjes gjatë rënies. Në core-dump-in e ruajtur ishin prezentë hash-at e fjalëkalimeve të përdoruesve të sistemit, që mbeteshin në memorien e procesit të përfunduar papritur pas ngarkimit të përmbajtjes /etc/shadow. Mundësia e shfrytëzimit të vulnerabiliteteve u demonstrua në Ubuntu 24.04 dhe Fedora 40/41, por supozohet se edhe shpërndarje të tjera janë të ndjeshme ndaj sulmeve të ngjashme.

Të dy vulnerabilitetet shkaktohen nga një gjendje garë që lejon zëvendësimin e procesit suid të përfunduar papritur me një proces tjetër në momentin pas fillimit të përpunimit nga bërthama të përfundimit, por përpara verifikimit nga përpunuesi në hapësirën e përdoruesit të parametrave të procesit përmes /proc/pid/files. Thirrja apport dhe systemd-coredump bëhet në këtë mënyrë: bërthama, duke marrë informacion për përfundimin e procesit, thërret përpunuesin e specifikuar në skedarin /proc/sys/kernel/core_pattern, dhe më pas i transmeton përmbajtjen e core-dump-it përmes rrjedhës hyrëse.

Generimi i core-dump-it dhe aktivizimi i përpunuesit nuk ndodhin menjëherë dhe ky kohë është e mjaftueshme për të zëvendësuar procesin e ndaluar suid me një proces të zakonshëm të përdoruesit. Në rastin e zëvendësimit, përpunuesi i aktivizuar i core-dump-eve do të mendojë se dështimi ndodhi jo në procesin suid, por në një aplikacion të zakonshëm të përdoruesit dhe për rrjedhojë do të ruajë skedarin core me mundësinë e hyrjes për përdoruesit e zakonshëm, dhe jo vetëm për administratorin.

Sulmi në apport përbëhet nga hapet e mëposhtme:

  • Krijohet njĂ« proces i ri dhe thirret funksioni execve() pĂ«r tĂ« aktivizuar programin suid, siç Ă«shtĂ« unix_chkpwd.
  • Kalimi i nevojshĂ«m pĂ«r ngarkimin e tĂ« dhĂ«nave tĂ« ndjeshme nĂ« memorje nga programi suid Ă«shtĂ« i lĂ«nĂ« pas dore (nĂ« rastin e unix_chkpwd, pritet ngarkimi i hash-eve tĂ« fjalĂ«kalimeve tĂ« tĂ« gjithĂ« pĂ«rdoruesve nga skedari /etc/shadow).
  • Para se tĂ« pĂ«rfundojĂ« ekzekutimi i komandĂ«s, procesit i dĂ«rgohet sinjali SIGSEGV ose SIGSYS pĂ«r ndĂ«rprerje tĂ« papritur.
  • NĂ« pĂ«rgjigje tĂ« ndĂ«rprerjes sĂ« papritur, bĂ«rthamja krijon njĂ« core-dump dhe nis procesin apport pĂ«r pĂ«rpunimin e core-dump-it nĂ« hapĂ«sirĂ«n e pĂ«rdoruesit.
  • Pas nisjes sĂ« apport, por para se tĂ« fillojĂ« analizimi, procesit tĂ« ndĂ«rprerĂ« i dĂ«rgohet sinjali SIGKILL, dhe vetĂ« procesi zĂ«vendĂ«sohet me njĂ« tjetĂ«r pa flamurin suid. PĂ«r tĂ« anashkaluar verifikimet nĂ« apport, procesi i ri krijohet brenda hapĂ«sirave tĂ« ndryshme tĂ« emrave (user, pid dhe mount namespace).
  • Apport lidhet me unix-soketin /run/apport.socket nĂ« hapĂ«sirĂ«n e emrave tĂ« pikave tĂ« montimit tĂ« krijuar pĂ«r procesin e ri dhe dĂ«rgon njĂ« tregues skedari pĂ«r qasje nĂ« core-dump.

Për të marrë identifikuesin e nevojshëm për procesin e ri, i cili përputhet me identifikuesin e procesit suid, para dërgimit të sinjalit SIGSEGV, procesi suid ndalohet me sinjalin SIGSTOP dhe gjatë ndalimit proceset e reja nisën ciklikisht derisa të merret një PID me një numër të mëparshëm, afër procesit suid që zëvendësohet. Pas zhvendosjes së numërimit të PID, procesit suid i dërgohen sinjalet SIGSEGV dhe SIGCONT, pas së cilës dërgohet SIGKILL dhe proceset e reja nisen ciklikisht për të arritur PID-në e njëjtë si ajo e procesit suid.

Sa i pĂ«rket systemd-coredump, nga njĂ«ra anĂ«, kryerja e njĂ« sulmi ndaj tij Ă«shtĂ« mĂ« e lehtĂ«, pasi nuk ka nevojĂ« tĂ« zĂ«vendĂ«sohet procesi suid me njĂ« proces nĂ« njĂ« hapĂ«sirĂ« tĂ« ndarĂ« pĂ«rdoruesi dhe mjafton tĂ« arrihet pĂ«rputhja e AT_UID dhe AT_EUID. Nga ana tjetĂ«r, systemd-coredump Ă«shtĂ« shkruar nĂ« gjuhĂ«n C dhe niset mjaft shpejt, e cila i jep mĂ« pak kohĂ« pĂ«r zĂ«vendĂ«sim, nĂ« krahasim me apport, i cili Ă«shtĂ« shkruar nĂ« Python dhe nĂ« procesin e inicializimit ngarkon skedarĂ« tĂ« ndryshĂ«m .pyc. Ky problem zgjidhet me vonesĂ« artificiale tĂ« systemd-coredump — kur thirret njĂ« skedar suid, dĂ«rgohet njĂ« numĂ«r shumĂ« i madh argumentesh tĂ« linjĂ«s sĂ« komandave, duke krijuar vonesĂ«n e nevojshme qĂ« ndodh gjatĂ« analizimit tĂ« /proc/pid/cmdline.

Në procesin e analizës së dobësive, studiuesit gjithashtu zbuluan se systemd-coredump gjatë konfigurimit të thirrjeve nuk tregon në /proc/sys/kernel/core_pattern flagun "%d", që i lejon një sulmuesi të shkaktojë një mbyllje të papritur të proceseve në sfond që ekzekutohen me të drejta root dhe që krijojnë procese të tjera duke ndryshuar identifikuesin e përdoruesit në një përdorues jo privilegjuar nën të cilin kryhet sulmi. Një mundësi e tillë lejon sulme jo vetëm ndaj aplikacioneve setuid, por edhe ndaj proceseve si sshd-session (OpenSSH), sd-pam (systemd) dhe cron, për të marrë të dhënat e ndjeshme që janë akumuluar në memorjen e tyre, si çelësat privatë, hash-et e fjalëkalimeve nga /etc/shadow, etiketat canary nga staku dhe të dhënat për të anashkaluar randomizimin e hapësirës adresave (ASLR).

Mund të ndjekësh publikimin e përditësimeve të pakove në shpërndarje në faqet: Debian, Ubuntu, RHEL, openSUSE, Fedora, Gentoo, Arch. Si një zgjidhje për bllokimin e dobësive, rekomandohet çaktivizimi i ruajtjes së core-dump-eve për programet suid dhe proceset që heqin privilegjet, duke vendosur parametrin /proc/sys/fs/suid_dumpable në vlerën 0. Për të zhdukur plotësisht problemin, kërkohen ndryshime në kernel-in e Linux-it, i cili implementon mundësinë e transmetimit të informacionit për një proces të mbyllur papritur përmes mekanizmit pidfd (pidfd lidhet me procese specifike dhe, ndryshe nga pid, nuk rishpërndahet).

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster