Qualys avastas kaks haavatavust apport (CVE-2025-5054) ja systemd-coredump (CVE-2025-4598) tööriistades, mis on mĂ”eldud core-failide töötlemiseks, mis genereeritakse pĂ€rast protsesside ootamatut lĂ”petamist. Haavatavused vĂ”imaldavad pÀÀseda juurde core-failidele, mis on salvestatud pĂ€rast suid-rakenduste vĂ”i mĂ”nede sĂŒsteemsete taustprotsesside ootamatut lĂ”petamist, mille mĂ€lu vĂ”ib sisaldada vahemĂ€llu salvestatud mandaate vĂ”i krĂŒpteerimisvĂ”tmeid. Utility apport kutsutakse automaatselt Ubuntu-s core-dump'ide salvestamiseks, samas kui systemd-coredump on kasutusel Red Hat Enterprise Linux 9+, Fedora ja paljude teiste Linuxi distributsioonide puhul.
Kuvati rĂŒnnetehnika, mille kĂ€igus loodud tingimustes viidi suid-rakenduse unix_chkpwd ootamatuks lĂ”petamiseks ja pÀÀseti juurde core-failile, mis sisaldas seisundi dumpi avarii ajal. Salvestatud core-dumpis olid sĂŒsteemi kasutajate paroolide hashid, mis jĂ€id ootamatult lĂ”petatud protsessi mĂ€llu pĂ€rast sisu laadimist /etc/shadow failist. Haavatavuste Ă€rakasutamise vĂ”imalust demonstreeriti Ubuntu 24.04 ja Fedora 40/41 puhul, kuid arvatakse, et ka teised distributsioonid on sarnaste rĂŒnnakute suhtes vastuvĂ”tlikud.
MĂ”lemad haavatavused on pĂ”hjustatud jooksva oleku Ă€rakasutamise vĂ”imalusest, mis vĂ”imaldab vahetada ootamatult lĂ”petatud suid-protsessi teise protsessi vastu vahetult peale seda, kui tuum on algatavane avariiprosesside töötlemiseks, kuid enne, kui kasutaja ruumi kĂ€sitleja kontrollib protsessi parameetreid /proc/pid/files kaudu. Apport ja systemd-coredump kutsutakse ĂŒles jĂ€rgmiselt: tuum, saades teavet protsessi lĂ”petamisest, kutsub vĂ€lja kĂ€sitleja, mille on mÀÀranud failis /proc/sys/kernel/core_pattern, ja edastab sellele core-dump'i sisu sissevoolu kaudu.
Core-dumpi genereerimine ja kÀsitleja kÀivitamine ei toimu hetkega ja see aeg on piisav, et asendada lÔpetatud suid-protsess tavalise kasutaja protsessiga. Juhul kui asendamine toimub, arvab kÀivitunud core-dumpide kÀitleja, et rike toimus mitte suid-protsessis, vaid tavalises kasutaja rakenduses, ja seega salvestab core-faili, millele pÀÀseb ligi tavaline kasutaja, mitte ainult administraator.
RĂŒnnak apport'ile hĂ”lmab jĂ€rgmisi samme:
- Loob uus protsess ja kutsub vÀlja execve() funktsiooni suid-programmi kÀivitamiseks, nagu unix_chkpwd.
- JÀtab piisavalt aega suid-protsessil konfidentsiaalsete andmete mÀlu laadimiseks (unix_chkpwd puhul eeldatakse, et laetakse kasutajate paroolide hashid failist /etc/shadow).
- Enne kÀsku lÔpetamist saadetakse protsessile signaal SIGSEGV vÔi SIGSYS ootamatuks lÔpetamiseks.
- Reaktsioonina ootamatule lÔpetamisele genereerib tuum core-dump'i ja kÀivitab apporti protsessi core-dump'i töötlemiseks kasutaja ruumis.
- PÀrast apporti kÀivitamist, kuid enne korrapÀrase töö alustamist saadetakse signaal SIGKILL ning protsess asendatakse teisega, millel pole suid-lippu. Et vÀltida kontrolle apportis, luuakse uus protsess eri nimed ruumides (kasutaja, pid ja mount nimede ruumides).
- Apport ĂŒhendub unix-soketiga /run/apport.socket loodud uue protsessi mĂ€lumĂ€lu nimedega ja edastab failide deskriptorid, et pÀÀseda juurde core-dump'ile.
Et uue protsessi jaoks vajalik identifikaator vastaks suid-protsessi identifikaatorile, peatatakse suid-protsess signaaliga SIGSTOP enne SIGSEGV signaali edastamist ja peatamise ajal kuvavad uued protsessid, kuni saavutatakse PID, mis on eelneva numbriga sarnane asendatavale suid-protsessile. PÀrast PID numbrite nihutamist saadetakse suid-protsessile signaalid SIGSEGV ja SIGCONT, seejÀrel saadetakse SIGKILL ning uued protsessid kÀivituvad pidevalt, et saavutada sama PID, mis suid-protsessil.
Mis puutub systemd-coredump'i, siis rĂŒnnaku tegemine on lihtsam, kuna pole vajadust asendada suid-protsessi, vaid on piisav saavutada AT_UID ja AT_EUID vastavus. Teisest kĂŒljest on systemd-coredump kirjutatud C keeles ja kĂ€ivitub piisavalt kiiresti, mis annab vĂ€he aega asendamiseks, erinevalt apport'ist, mis on kirjutatud Pythonis ja laadib alguses erinevaid pyc-failide. Sarnaste probleemide lahendamiseks viiakse systemd-coredump'i kunstlik viivitus â suid-faili kutsumisel edastatakse vĂ€ga suur hulga kĂ€surea argumendid, mis tekitavad vajaliku viivituse, mis tekib /proc/pid/cmdline'i töötlemise ajal.
Haavatavuste analĂŒĂŒsi kĂ€igus tuvastasid uurijad samuti, et systemd-coredump ei nĂ€ita \/proc\/sys\/kernel\/core_pattern'is "flag "%d"" seadistust, mis vĂ”imaldab rĂŒndajal pĂ”hjustada taustprotsesside kokkuvarisemise, mis töötavad root-Ă”igustes ja kĂ€ivitavad teisi protsesse, muutes kasutaja ID madalamatele Ă”igustele, millega rĂŒnnak teostatakse. See vĂ”imalus vĂ”imaldab rĂŒnnata mitte ainult setuid-rakendusi, vaid ka protsesse nagu sshd-session (OpenSSH), sd-pam (systemd) ja cron, et saada neis mĂ€lus olevaid konfidentsiaalseid andmeid, nagu privaatvĂ”tmed, paroolihĂ€kked \/etc\/shadow-st, kanaria mĂ€rgid kuhjas ja andmed adresseerimise ruumi (ASLR) randomiseerimise ĂŒletamiseks.
Pakettide vĂ€rskenduste avaldamise jĂ€lgimine distsipliinides on vĂ”imalik lehekĂŒlgedelt: Debian, Ubuntu, RHEL, openSUSE, Fedora, Gentoo, Arch. Haavatavuste blokeerimise ajutiseks lahenduseks soovitatakse keelata core-Ă€ri jÀÀkide salvestamine suid-programmide ja Ă”iguste vĂ€hendamise protsesside jaoks, seadistades parameeter \/proc\/sys\/fs\/suid_dumpable vÀÀrtuseks 0. Probleemi tĂ€ielikuks lahendamiseks on vajalik muudatused Linuxi tuumas, mis vĂ”imaldavad edastada infot kokkuvarisenud protsessi kohta pidfd-mekanismi kaudu (pidfd seondub konkreetsete protsessidega ja erinevalt pid-ist ei mÀÀrata teda uuesti).
Allikas: opennet.ru
