GitHub on avaldanud teavet seitsme haavatavuse kohta paketides tar ja @npmcli/arborist, mis pakuvad funktsioone tar-arhiivide haldamiseks ja sõltuvuspuude arvutamiseks Node.js-is. Haavatavused võimaldavad erikujundatud arhiivi lahtipakkimisel kirjutada üle failid väljaspool lahtipakkimise juurkatalooge, sõltuvalt kohalike juurdepääsuõigustest. Need probleemid võivad võimaldada suvalise koodi käivitamist süsteemis, näiteks käskude lisamine ~/.bashrc või ~/.profile käitamise ajal, kui operatsiooni teostab õigusteta kasutaja või süsteemifailide asendamine root-õigustega käivitamise korral.
Haavatavuste oht suureneb seetõttu, et probleemne kood kasutatakse npm-i pakihalduris npm-pakettide toimingutes, mis võimaldab rünnakut kasutajate vastu, paigutades spetsiaalselt kujundatud npm-paketi hoidlasse, mille töötlemisel süsteemis täidetakse kurjategija kood. Rünnak on võimalik isegi pakettide installimisel režiimis "--ignore-scripts", mis keelab sisseehitatud skriptide täitmise. Kokku mõjutab npm nelja haavatavust (CVE-2021-32804, CVE-2021-37713, CVE-2021-39134 ja CVE-2021-39135) seitsmest. Esimesed kaks probleemi puudutavad paketti tar, ülejäänud kaks paketti @npmcli/arborist.
Kõige ohtlikum haavatavus CVE-2021-32804 tuleneb sellest, et tar-arhiivis määratud absoluutsete teede puhastamisel töödeldakse korduvaid sümboleid "\/" valesti — eemaldatakse ainult esimene sümbol ja ülejäänud jäetakse alles. Näiteks tee "\/home\/user\/ .bashrc" muudetakse "home\/user\/ .bashrc"-ks, samas kui tee "\/\/home\/user\/ .bashrc" jääb "\/home\/user\/ .bashrc"-ks. Teine haavatavus CVE-2021-37713 avaldub ainult Windowsi platvormil ja on seotud vale puhastamisega, mille puhul suhtelised teed sisaldavad mitte-eraldatud kettasümbolit ("C:some\path") ja tagasi mineku järjestust eelnevasse katalooge ("C:..\/foo").
Haavatavused CVE-2021-39134 ja CVE-2021-39135 on spetsiifilised @npmcli/arborist mooduli jaoks. Esimene probleem avaldub ainult failisüsteemides, mis ei erista sümbolite suurtähti (macOS ja Windows), ja võimaldab kirjutada faile suvalisse failisüsteemi ossa, kui sõltuvuste hulka on lisatud kaks moodulit ‘"foo": "file:/some/path"‘ ja ‘FOO: "file:foo.tgz"‘, mille töötlemine toob endaga kaasa katalooge \/some\/path sisu kustutamise ja selle asemel foo.tgz sisu kirjutamise. Teine probleem võimaldab faile üle kirjutada, manipuleerides sümboolsete linkidega.
Haavat on kõrvaldatud Node.js väljaannetes 12.22.6 ja 14.17.6, npm CLI 6.14.15 ja 7.21.0 ning ka eraldi tar pakettide väljaannetes 4.4.19, 5.0.11 ja 6.1.10. Saades teavet probleemi kohta bug bounty algatuse raames, maksis GitHub teadlastele 14 500 dollarit ning skaneeris hoidla sisu, kus ei tuvastatud haavatavuste kuritarvitamise katseid. Nendel probleemidel kaitsmiseks kehtestas GitHub ka keelu NPM-pakettide hoidla avaldamisele, mis sisaldavad sümboolseid linke, kõvasid linke ja absoluutseid teid.
Allikas: opennet.ru
