V knihovně async-tar, napsané v Rustu a poskytující funkce pro čtení a zápis archivů tar, byla objevena zranitelnost (CVE-2025-62518, kódové označení TARmageddon). Tato zranitelnost umožňuje rozbalení speciálně vytvořeného archivu tar a extrahování nejen souborů v něm, ale také souborů obsažených ve vnořených archivech tar. Tuto zranitelnost lze zneužít k obejití systémů ověřování archivů a rozbalení souborů, které nebyly ověřeny.
Zranitelnost se týká také forků knihovny async-tar, jako jsou tokio-tar, krata-tokio-tar a astral-tokio-tar, a také utilit na nich založených, jako je správce balíčků uv, který je vyvíjen jako vysoce výkonná náhrada pipu pro projekty v Pythonu. Mezi oblíbené projekty využívající zranitelné knihovny patří také sada nástrojů testcontainers pro spouštění kontejnerů Docker a běhové prostředí wasmCloud WebAssembly. V repozitáři crates.is má za posledních 90 dní knihovna async-tar 1.3 milionu stažení, tokio-tar 2.2 milionu a testcontainers 2.9 milionu.
Zranitelnost je způsobena nesprávným výběrem pozice při parsování různých hodnot velikosti v hlavičkách ustar a PAX. V archivech tar formátovaných ve formátu PAX obsahuje každý soubor v archivu dvě hlavičky: klasickou hlavičku ustar a rozšířenou hlavičku PAX. Problém je způsoben zranitelnými knihovnami, které při rozbalování souborů používají starší hlavičku ustar namísto výpočtu offsetu na základě velikosti v rozšířené hlavičce PAX. Pokud hlavička ustar obsahovala nulovou hodnotu velikosti, byl obsah souboru, který za ní následoval, zpracován jako platný blok hlaviček TAR pro další soubor.


Pro provedení útoku jednoduše vytvořte TAR archiv s nulovou hlavičkou USTAR a skutečnou velikostí v hlavičce PAX. Tím se obsah souboru obsahujícího druhý tar archiv zpracuje jako součást hlavního archivu. Ukázkový kód pro vytváření takových archivů je k dispozici na GitHubu. Zranitelnost byla opravena ve verzích tokio-tar 0.5.6 a uv 0.9.5. Opravy pro další knihovny dosud nebyly publikovány, ale pro astral-tokio-tar, async-tar a krata-tokio-tar byly připraveny samostatné záplaty.
Zranitelnost knihovny je klasifikována jako závažná na úrovni 8.1 z 10, protože ji lze zneužít k přepsání rozbalených souborů (zranitelné implementace rozbalí soubory odlišné od těch, které jsou viditelné v archivu). Zranitelnost ve správci balíčků uv je však hodnocena jako neškodná, protože pokud útočník může ovlivnit obsah původního archivu, nemá smysl komplikovat útok a zneužívat zranitelnost prostřednictvím vnořeného archivu, když lze spuštění kódu dosáhnout pomocí skriptů pro sestavení v hlavním archivu.
Výzkumníci, kteří objevili zranitelnost, navrhli několik hypotetických scénářů útoku, které by mohly obejít bezpečnostní kontroly a dosáhnout spuštění kódu nahrazením konfiguračních souborů nebo narušením procesu sestavení. Předpoklad je, že odeslaný archiv by byl schopen projít automatickým bezpečnostním skenováním a manuálním auditem, během kterého by auditor přehlédl podivný vložený archiv obsahující další soubory. Poté, po rozbalení pomocí knihoven Rust, by archiv vrátil jiný obsah, než se očekávalo.
Útočník by například mohl nahrát upravený archiv do repozitáře PyPI, který by byl ověřen na základě obsahu hlavního archivu obsahujícího legitimní soubor pyproject.toml. Při zpracování tohoto balíčku pomocí utility uv by byl legitimní soubor pyproject.toml nahrazen škodlivou verzí z podarchivu, který obsahuje příkazy, jež by byly spuštěny během sestavení na počítači vývojáře nebo v systému průběžné integrace. Podobně by mohly být soubory kontejnerů přepsány při stahování obrazu kontejneru pomocí nástroje testcontainers.
Zdroj: opennet.ru
