A Rust nyelven írt async-tar könyvtárban, amely funkciókat biztosít a tar archívumok olvasására és írására, egy sebezhetőséget fedeztek fel (CVE-2025-62518, kódnév TARmageddon), amely lehetővé teszi, hogy egy speciálisan megformázott tar archívum kibővítése során ne csak a benne található fájlokat, hanem a beágyazott tar archívumban található fájlokat is kinyerjék. A sebezhetőség felhasználható az archívumok ellenőrzési rendszereinek megkerülésére és olyan fájlok kibővítésére, amelyeken nem végeztek ellenőrzést.
A sebezhetőség megjelenik az async-tar könyvtár forkjaiban is, mint például a tokio-tar, krata-tokio-tar és astral-tokio-tar, valamint az ezek alapjain készült eszközökben, például az uv csomagkezelőben, amelyet a Python nyelvű projektek számára létrehozott nagy teljesítményű alternatívaként fejlesztenek. A népszerű projektek között, amelyek sebezhető könyvtárakat használnak, megemlítendő a testcontainers eszköz a docker konténerek indításához és a WebAssembly runtime wasmCloud. Az crates.is tárolóban az elmúlt 90 nap során az async-tar könyvtár 1,3 millió letöltést, a tokio-tar 2,2 milliót, a testcontainers pedig 2,9 milliót regisztrált.
A sebezhetőség a különböző méretadatok pozíciójának helytelen választásából fakad az ustar és PAX fejlécének elemzése során. A PAX formátumú tar archívumokban minden fájlhoz két fejléc tartozik — klasszikus ustar és kibővített PAX. A probléma abból adódik, hogy a sebezhető könyvtárak a fájlok kibővítésekor nem a kibővített PAX fejléc alapján számolták ki a helyzetet, hanem a elavult ustar fejléc méretét használták. Nullás méret esetén az ustar fejlécben a mögötte lévő fájl tartalmát az előző fájl következő TAR-fejlécek érvényes blokkjaként kezelték.


A támadáshoz elegendő létrehozni egy TAR archívumot, amelyben az ustar fejlécben nullás méret szerepel, míg a PAX formátumú fejlécben a tényleges méret található, ennek következtében egy másik tar archívum tartalmát az alap archívum részének fogják kezelni. Példa kód a hasonló archívumok létrehozására a GitHubon elérhető. A sebezhetőséget a tokio-tar 0.5.6 és az uv 0.9.5 verziókban kijavították. A többi könyvtár esetében a javítások még nem kerültek nyilvánosságra, de az astral-tokio-tar, async-tar és krata-tokio-tar esetében külön javítócsomagokat készítettek.
A könyvtárakban felfedezett sebezhetőségek veszélyességi szintje 8.1 a 10-ből, mivel a probléma kihasználható az kicsomagolható fájlok felülírására (a sebezhető megoldások esetén nem azok a fájlok lesznek kicsomagolva, amelyek a tömörítésben láthatók). A uv csomagkezelő sebezhetősége viszont nem minősül veszélyesnek, hiszen ha a támadó képes befolyásolni az eredeti tömörítést, nincs értelme bonyolítani a támadást és kihasználni a sebezhetőséget egy beágyazott archívumon keresztül, amikor a kód futtatása egyszerűen elérhető az alap archívumban található build szkriptek révén.
A sebezhetőséget felfedező kutatók több hipotetikus támadási forgatókönyvet javasoltak, amelyek lehetővé teszik a biztonsági ellenőrzések megkerülését és a kód futtatását konfigurációs fájlok cseréjével vagy a build folyamatba való beavatkozással. Feltételezik, hogy a beküldött archívum képes lesz átkelni egy automatizált biztonsági szkenner és egy manuális audit vizsgálatán, amely során a vizsgálóbiztos nem fogja észrevenni a szokatlan beágyazott archívumot más fájlokkal, így a Rust könyvtárak segítségével kicsomagolt tartalom eltér az elvárttól.
Például, a támadó módosított archívumot tölthet fel a PyPI tárolóba, amely átmegy az alap archívum tartalma alapján végzett ellenőrzésen, amely tartalmazza a jogtiszta pyproject.toml fájlt. A csomag feldolgozása során az uv eszköz segítségével a jogtiszta pyproject.toml fájl helyére egy rosszindulatú változat kerül a beágyazott archívumból, amely parancsokat tartalmaz, amelyek futni fognak a fejlesztő számítógépén vagy a folyamatos integrációs rendszerében. Hasonló módon a konténer fájljainak felülírását is meg lehet szervezni a konténer képének kicsomagolásakor a testcontainers eszközkészlettel.
Forrás: opennet.ru
