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
