GitHub har afsløret detaljer om syv sårbarheder i pakkerne tar og @npmcli/arborist, som giver funktioner til håndtering af tar-arkivfiler og beregning af afhængighedstræer i Node.js. Sårbarhederne gør det muligt at overskrive filer uden for rodkataloget ved udpakning af et specielt tilrettelagt arkiv, så længe de nuværende adgangsrettigheder tillader det. Problemerne giver mulighed for at udføre vilkårlig kode i systemet, for eksempel ved at tilføje kommandoer i ~/.bashrc eller ~/.profile, når en ikke-privilegeret bruger udfører operationen eller ved at erstatte systemfiler, når den køres med root-rettigheder.
Faren ved sårbarhederne forværres af, at den problematiske kode anvendes i pakketmanageren npm under operationer med npm-pakker, hvilket muliggør et angreb på brugerne ved at uploade en specielt tilrettelagt npm-pakke i et repository, der gør det muligt for angriberen at køre kode på systemet. Angrebet er muligt, selv ved installation af pakker i "--ignore-scripts"-tilstand, der deaktiverer udførelsen af indbyggede scripts. I alt påvirker npm fire sårbarheder (CVE-2021-32804, CVE-2021-37713, CVE-2021-39134 og CVE-2021-39135) ud af de syv. De første to problemer vedrører pakken tar, mens de sidste to vedrører pakken @npmcli/arborist.
Den mest alvorlige sårbarhed, CVE-2021-32804, skyldes, at ved rensning af de angivne absolutte stier i tar-arkivet håndteres gentagne tegn "\/" forkert — kun det første tegn fjernes, mens de øvrige efterlades. For eksempel vil stien "\/home\/user\/bashrc" blive omdannet til "home\/user\/bashrc", mens stien "\/\/home\/user\/bashrc" bliver til "\/home\/user\/bashrc". Den anden sårbarhed, CVE-2021-37713, optræder kun på Windows-platformen og vedrører forkert rensning af relative stier, der inkluderer en ikke-opdelt drevtegn ("C:some\path") og en sekvens til at vende tilbage til den foregående mappe ("C:..\/foo").
Sårbarhederne CVE-2021-39134 og CVE-2021-39135 er specifikke for modulet @npmcli/arborist. Det første problem opstår kun på systemer, der ikke skelner mellem store og små bogstaver i FS (macOS og Windows) og tillader, at filer skrives til vilkårlige dele af FS ved at angive to moduler i afhængighederne: ‘»foo»: «file:/some/path»‘ og ‘FOO: «file:foo.tgz»‘. Behandlingen af disse vil føre til sletning af indholdet i kataloget /some/path og skrivning af indholdet fra foo.tgz til dette. Det andet problem gør det muligt at overskrive filer gennem manipulation med symbolske links.
Sårbarhederne er blevet rettet i versionerne Node.js 12.22.6 og 14.17.6, npm CLI 6.14.15 og 7.21.0, samt i separate udgivelser af pakken tar 4.4.19, 5.0.11 og 6.1.10. Efter at have modtaget oplysninger om problemet gennem initiativet 'bug bounty' har GitHub udbetalt $14500 til forskere og scannet indholdet i det repository, hvor der ikke blev fundet forsøg på at udnytte sårbarhederne. For at beskytte mod de nævnte problemer har GitHub også indført et forbud mod offentliggørelse af NPM-pakker indeholdende symbolske links, hårde links og absolutte stier.
Kilde: opennet.ru
