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
