Rust'i keeles kirjutatud async-tar teegis, mis pakub funktsioone tar-arkivide lugemiseks ja kirjutamiseks, avastati haavatavus (CVE-2025-62518, koodnimi TARmageddon), mis vĂ”imaldab spetsiaalselt kujundatud tar-arkivi lahtipakkimisel mitte ainult selle sisu faile vĂ€lja vĂ”tta, vaid ka faile, mis asuvad sisestatud tar-arkivis. Haavatavust saab kasutada arhiivide valideerimisse sĂŒsteemide petmiseks ja faile lahti pakkimiseks, mille puhul ei toimunud kontrollimist.
Haavatavus avaldub ka async-tar teegi forkides, nagu tokio-tar, krata-tokio-tar ja astral-tokio-tar, samuti nende pĂ”hjal töötavates utiliitides, nĂ€iteks uv pakihaldur, mis on arendatud kĂ”rge jĂ”udlusega asenduseks pipâile Python projektide jaoks. Populaarsetest projektidest, mis kasutavad haavatavaid teeke, on mĂ€rgitud ka testcontainers tööriist docker konteinerite kĂ€ivitamiseks ja WebAssembly runtime wasmCloud. Crates.is hoidlas on async-tar teek viimase 90 pĂ€eva jooksul saanud 1,3 miljonit allalaadimist, tokio-tar 2,2 miljonit, testcontainers 2,9 miljonit.
Haavatavus on pĂ”hjustatud vale positsiooni valimisest ustar ja PAX pĂ€iste erinevate suuruste parsimisel. PAX formaadis tar-arkivides iga faili jaoks arhivi sees on kaks pĂ€ist â klassikaline ustar ja laiendatud PAX. Probleem tuleneb sellest, et haavatavad teegid lahtipakkimise ajal ei arvutanud nihket pĂ”hinedes PAX'i laiendatud pĂ€ise suurusele, vaid vĂ”tsid suuruse vanast ustar pĂ€isest. Kui ustar pĂ€ises on suurus null, töödeldakse sellele jĂ€rgnevat faili sisu kui Ă”igesti vormindatud TAR pĂ€iste plokk jĂ€rgmisele failile.


RĂŒnnaku teostamiseks piisab, kui luua TAR-arkiv, kus ustar pĂ€ises on mĂ€rgitud null suurus, kuid PAX formaadi pĂ€ises tegelik suurus, mistĂ”ttu faili sisu teise tar-arkivi kohta töödeldakse kui osa pĂ”hjast arhiivist. NĂ€ide sarnaste arkivide loomiseks on saadaval GitHubis. Haavatavuse kĂ”rvaldamine on toimunud tokio-tar versioonides 0.5.6 ja uv 0.9.5. Muude teeke kohta ei ole parandusi veel avaldatud, kuid astral-tokio-tar, async-tar ja krata-tokio-tar jaoks on eraldi valmistatud plaastrid.
Teekides tuvastatud haavatust on antud ohtlikkuse tase 8.1 skaalal 10, kuna probleem vĂ”imaldab lahtipakkimise jĂ€rgselt failide ĂŒle kirjutamist (haavatavates versioonides lahtipakidakse mitte need failid, mis olid nĂ€htavad arhiivis). Samas on uv pakihalduri haavatavus mĂ€rgitud kui mitteohtlik, kuna kui rĂŒndajal on vĂ”imalik mĂ”jutada algse arhiivi sisu, pole mĂ”tet rĂŒnnakut keerulisemaks teha ja haavatavust kasutada lĂ€bi sisestatud arhiivi, kui koodi tĂ€itmine on vĂ”imalik saavutada peamise arhiivi koostamisprotsesside kaudu.
Haavatuse avastanud teadlased on esitanud mitu hĂŒpoteetilist rĂŒnnakutsenaariumi, mis vĂ”imaldavad turvavoogude petmist ja koodi tĂ€itmist konfiguratsioonifailide asendamise vĂ”i koostamisprotsessi sekkumise kaudu. Eeldatakse, et saadetud arhiiv vĂ”ib automaatse turvaskanneri kontrolli ja kĂ€sitsi auditi lĂ€bida, kus kontrollija ei pööra tĂ€helepanu kummalisele sisestatud arhiivile, millel on teised failid, mille jĂ€rel Rust'i teekide abil lahtipakkimisel eraldatakse arhiivist ootamatult erinev sisu, kui oli oodata.
NĂ€iteks vĂ”ib rĂŒndaja laadida muudetud arhiivi PyPI hoidlasse, mis lĂ€bib kontrolli pĂ”hinedes peamise arhiivi sisu analĂŒĂŒsile, mis sisaldab legitiimset fail: pyproject.toml. Kui seda paketti töödeldakse utiliidi uv abil, asendatakse legitiimne pyproject.toml rĂŒndaja muudetud variandiga sisestatud arhiivist, mis sisaldab kĂ€sklusi, mis kĂ€ivitatakse arendaja arvutis vĂ”i pideva integratsiooni sĂŒsteemis. Samamoodi on vĂ”imalik korraldada konteineri failide ĂŒle kirjutamist konteineri pildi lahtipakkimisel testcontainers tööriista abil.
Allikas: opennet.ru
