Qualys avastas kaks haavatavust apport'i (CVE-2025-5054) ja systemd-coredump'i (CVE-2025-4598) tööriistades, mida kasutatakse pĂ€rast protsesside ootamatut sulgemist genereeritud core-failide töötlemiseks. Need haavatavused vĂ”imaldavad pÀÀseda juurde core-failidele, mis on salvestatud pĂ€rast suid-rakenduste vĂ”i mĂ”ne sĂŒsteemi taustprotsessi ootamatut sulgemist, mille mĂ€lu vĂ”ib sisaldada vahemĂ€llu salvestatud mandaate vĂ”i krĂŒpteerimisvĂ”tmeid. Apport'i utiliiti kutsutakse automaatselt, et salvestada core-dumpid Ubuntu's, samas kui systemd-coredump'i kasutatakse Red Hat Enterprise Linux 9+, Fedora ja paljude teiste Linuxi jaotiste puhul.
RĂŒnnakutehnika demonstreerimisel loodi tingimused suid-rakenduse unix_chkpwd ootamatuks sulgemiseks ja pÀÀsuks core-faili, kus on seisundid rikke ajal. Salvestatud core-dump'is olid sĂŒsteemi kasutajate paroolide rĂ€si, mis jÀÀvad ootamatult sulgunud protsessi mĂ€llu pĂ€rast /etc/shadow sisu laadimist. Haavatavuste Ă€rakasutamise vĂ”imalust demonstreeriti Ubuntu 24.04 ja Fedora 40/41 korral, kuid eeldatakse, et ka teised jaotised on sarnastele rĂŒnnakutele avatud.
MÔlemad haavatavused on pÔhjustatud vÔidusÔidutingimustest, mis vÔimaldavad asendada ootamatult sulgunud suid-protsessi teise protsessiga ajavahemikus peale selle kÀivitamist tuuma poolt, kuid enne kui kasutajaruumi töötlija kontrollib protsessi parameetreid lÀbi /proc/pid/files. Apport'i ja systemd-coredump'i kutse tehakse jÀrgmiselt: tuum, saades teavet protsessi ootamatu sulgemise kohta, kÀivitab töötlija, mis on mÀÀratud failis /proc/sys/kernel/core_pattern, seejÀrel edastab core-dump'i sisu selle sisendi kaudu.
Core-dump'i genereerimine ja töötlija kÀivitamine ei toimu koheselt ning see aeg on piisav, et asendada lÔpetatud suid-protsess tavakasutaja protsessiga. Kui asendamine toimub, peab kÀivitatud core-dumpi töötlija olema veendunud, et rike ei toimunud suid-protsessis, vaid tavakasutaja rakenduses, ja seega salvestab core-faili, millele on juurdepÀÀs tavakasutajal, mitte ainult administraatoril.
RĂŒnnak apport'i vastu koosneb jĂ€rgmistest sammudest:
- Loodud uus protsess ja kutsutakse vÀlja execve() funktsioon suid-programmi, nagu unix_chkpwd, kÀivitamiseks.
- Kuluva aeg, mis on vajalik suid-programmi konfidentsiaalsete andmete laadimiseks mĂ€llu (unix_chkpwd korral oodatakse, et kĂ”ikide sĂŒsteemi kasutajate paroolihĂ€kkide laadimine toimub failist /etc/shadow).
- Enne kÀsu tÀitmise lÔppu saadetakse protsessile SIGSEGV vÔi SIGSYS signaal, et see Àkki lÔpetada.
- Ăkilise lĂ”petamise korral genereerib kernel core-dump'i ja kĂ€ivitab apport' protsessi core-dump'i töötlemiseks kasutajate ruumis.
- PĂ€rast apport'i kĂ€ivitamist, kuid enne Ă€kiliselt lĂ”petatud protsessi analĂŒĂŒsimist saadetakse sellele SIGKILL signaal ja protsess asendatakse teisega, millel ei ole suid lippu. Kontrollide ringi mööda pÀÀsemiseks luuakse uus protsess erinevatesse nimede ruumidesse (kasutaja, pid ja mount namespace).
- apport ĂŒhendub unix-soketiga /run/apport.socket, mis on loodud uue protsessi mount namespace'is, ja saadab failihalduri, et pÀÀseda core-dump'ile.
Selleks, et saada uuele protsessile vajalik ID, mis vastab suid-protsessi ID-le, peatatakse suid-protsess SIGSTOP signaaliga enne SIGSEGV signaali saatmist, ja selle peatamise ajal kĂ€ivitatakse tsĂŒkliliselt uusi protsesse, kuni saadakse PID, mille eelmine number on lĂ€hedane asendatavale suid-protsessile. PID nummerdamise nihke jĂ€rel saadetakse suid-protsessile SIGSEGV ja SIGCONT signaalid, pĂ€rast mida saadetakse SIGKILL ja tsĂŒkliliselt kĂ€ivitatakse uusi protsesse, et saavutada sama PID, mis on suid-protsessil.
Mis puudutab systemd-coredump'i, siis ĂŒhelt poolt on rĂŒnnaku lĂ€biviimine sellele lihtsam, kuna ei ole vaja asendada suid-protsessi eraldi kasutajaruumi protsessiga, piisab AT_UID ja AT_EUID sarnasusest saavutamisest. Teiselt poolt on systemd-coredump kirjutatud C keeles ja kĂ€ivitub piisavalt kiiresti, mis annab vĂ€hem aega asendamiseks, erinevalt apport'ist, mis on kirjutatud Pythonis ja kĂ€ivitumisetapis laadib erinevaid pyc-faile. Sellise probleemi lahendamiseks kasutatakse systemd-coredump'i kunstlikku aeglustamist â suid-faili kutsumisel edastatakse vĂ€ga suur hulk kĂ€skluse argumente, mis tekitab vajaliku viivituse, mis tekib /proc/pid/cmdline analĂŒĂŒsimise ajal.
Haavatavuste analĂŒĂŒsi kĂ€igus tuvastasid uurijad, et systemd-coredump ei mÀÀrata vĂ€ljakutse seadistamisel /proc/sys/kernel/core_pattern lipukest â%dâ, mis vĂ”imaldab rĂŒndajal kĂ€ivitada hĂ€daolukorra lĂ”petamise juurte Ă”igustega taustaprotsesside jaoks, mis kĂ€ivitavad teisi protsesse kasutaja ID muutmisega privileegidevabaks kasutajaks, kelle all rĂŒnnak toimub. See vĂ”imalus vĂ”imaldab rĂŒnnata mitte ainult setuid-rakendusi, vaid ka selliseid protsesse nagu sshd-session (OpenSSH), sd-pam (systemd) ja cron, et saada nende mĂ€lus pĂŒsivate konfidentsiaalsete andmete, nagu privaatvĂ”tmed, paroolihĂ€kkide hĂ€shed /etc/shadow, kanaripostid virnast ja andmed adresseerimise ruumi (ASLR) ĂŒmberminekuks.
Paketiuuenduste avaldamise jĂ€lgimist jaotustes saab teha lehtedel: Debian, Ubuntu, RHEL, openSUSE, Fedora, Gentoo, Arch. KĂŒberturbehaavatavuste blokeerimiseks pakutakse vĂ€lja lahendus, mille kohaselt keelatakse core-Ă€rakogude salvestamine suid-programmide ja privileegide ĂŒlekandvate protsesside jaoks, seadistades parameetri /proc/sys/fs/suid_dumpable vÀÀrtuseks 0. Probleemi tĂ€ielikuks kĂ”rvaldamiseks on vajalik muudatused Linuxi tuumas, mis rakendab teabe edastamise vĂ”imaluse kokku kukkunud protsessi kaudu pidfd mehhanismi (pidfd on seotud konkreetsete protsessidega ja erinevalt pid-st ei saa see uuesti mÀÀrata).
Allikas: opennet.ru
