- Das Standardverhalten von
npm installwird auf sicherheitsorientiert umgestellt: Funktionen, die bisher automatisch ausgeführt wurden, funktionieren künftig nur noch, wenn der Nutzer sie explizit erlaubt (opt-in) allowScriptsstandardmäßig deaktiviert —preinstall-,install- undpostinstall-Skripte in installierten externen Paketen werden standardmäßig blockiert; ausgeführt werden nur noch Pakete, die im Projekt ausdrücklich erlaubt sind- Skripte, die bisher schon beim bloßen Installieren eines Pakets automatisch liefen, werden unterbunden, um die Angriffsfläche für eingeschleusten Schadcode zu verringern
- Auch Native Builds mit
node-gypwerden blockiert. Dadurch werden selbst Pakete nicht gebaut, die nurbinding.gyphaben und kein eigenes Install-Skript besitzen, da npm internnode-gyp rebuildausführt - Ebenso werden
prepare-Skripte von Paketen blockiert, die per git, file oder link bezogen werden - Verwendung: Mit
npm approve-scripts --allow-scripts-pendingprüfen, welche Pakete Skripte enthalten → mitnpm approve-scriptsnur die vertrauenswürdigen erlauben, den Rest mitnpm deny-scriptsblockieren → die Allowlist wird inpackage.jsongespeichert und sollte daher committet werden
--allow-gitstandardmäßignone— Pakete, die direkt aus Git-Repositories bezogen werden, einschließlich deren transitiver Abhängigkeiten, werden standardmäßig blockiert und nur mit--allow-gitinstalliert- Dadurch wird ein Angriffsweg geschlossen, über den
.npmrcin Git-Paketen das ausführbare Git-Programm selbst austauschen konnte (ein Problem, das auch mit--ignore-scriptsumgangen werden konnte) (npm 11.10.0+)
- Dadurch wird ein Angriffsweg geschlossen, über den
--allow-remotestandardmäßignone— Pakete, die über Remote-URLs wie HTTPS-Tarballs bezogen werden, einschließlich transitiver Abhängigkeiten, werden standardmäßig blockiert und nur mit--allow-remoteinstalliert (npm 11.15.0+)--allow-fileund--allow-directoryändern in diesem v12 allerdings nicht ihren Standardwert
- Alle diese Änderungen werden in npm 11.16.0 und neuer zunächst als Warnungen bereitgestellt, damit vor dem offiziellen Release geprüft und reagiert werden kann
- Der voraussichtliche Veröffentlichungstermin von v12 ist Juli 2026
1 Kommentare
Hacker-News-Kommentare
Ich weiß nicht, wie ich übersehen konnte, dass npm von GitHub übernommen wurde, aber plötzlich ergibt vieles einen Sinn
Für einen so wichtigen Teil des Node-Ökosystems fällt mir kaum ein schlimmeres Zuhause ein
https://github.blog/news-insights/company-news/npm-is-joinin...
„Embrace, extend, extinguish“
https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguis...
postinstall-Skripte hätten schon vor langer Zeit abgeschafft werden sollen und sind ein Krebsgeschwür in NPM-Paketen
Viel zu oft werden beim Holen von irgendetwas tief verschachtelte, unkontrollierte postinstall-Skripte zufällig ausgeführt
Ich weiß nicht, wer das jemals für eine gute Idee gehalten hat
In der Regel führt man den paketierten Abhängigkeitscode ohnehin irgendwann aus, meist mit denselben Rechten wie während der Installation
Dann kann man diese Setup-Skripte, ob gut oder schlecht, einfach vom Einstiegspunkt npm dorthin verschieben, wo
importoderrequirestattfindetSolange nicht das ganze Ökosystem in eine Sandbox-Umgebung wie Deno wechselt, wirkt das bestenfalls wie eine kleine Hürde. Vielleicht ist genau das der Plan
Das erste Beispiel, das mir einfällt, ist https://www.npmjs.com/package/patch-package
Hoffentlich führt die aktuelle Hysterie nicht zu solchen unsinnigen Entscheidungen
Das dürfte intern bei NPM hunderte Male diskutiert worden sein, seit das vor 10 Jahren öffentlich wurde
Wegen Shai Halud ist es jetzt zu groß geworden, um es weiter zu ignorieren
„Das reparieren wir bald“ wird fast immer zu „Verdammt, jetzt müssen wir es reparieren“
Ich frage mich, ob die aktuellen LTS-Versionen von Node, soweit ich mich erinnere 22, 24, 26, das mitgelieferte npm auf v12 anheben werden, damit sie von diesem Sicherheits-Fix profitieren
Im Moment enthalten sie alle npm v11
In v18.19.0[1] und v20.10.0[2] wurde npm von 9 auf 10 angehoben
[1]: https://nodejs.org/en/blog/release/v18.19.0#npm-updated-to-v...
[2]: https://nodejs.org/en/blog/release/v20.10.0
Wie im Artikel steht, muss man nur die passenden Defaults setzen
Das Beste an dieser Änderung ist, dass mit den neuen Defaults sofort auffällt, welche nervigen Pakete kaputtgehen, wenn neue Entwickler einfach install ausführen und davon ausgehen, dass solche Einstellungen aktiv sind
Das könnte dazu führen, dass man endlich von der Praxis wegkommt, vorauszusetzen, dass Skripte ausführbar sind
Aus dem Artikel geht das nicht ganz klar hervor, aber es scheint, dass die Skript-Allowlist nicht nur global konfigurierbar ist, sondern Freigaben pro Paket unterstützt
Das dürfte es erleichtern, organisationsweite Regeln beizubehalten, die Skripte nur für bestimmte Pakete erlauben
Ich frage mich, ob es einen Linter gibt, mit dem man in Package-Manager-Konfigurationen unsichere Defaults dieser Art verhindern kann
grep?Ich frage mich, ob es noch einen Grund gibt, Yarn zu verwenden
Ich weiß nicht, ob Yarn ebenfalls Schutzmechanismen gegen Supply-Chain-Angriffe implementiert hat
Bisher kannte ich nur pnpm, daher ist es gut, dass npm nachzieht
Die aktuelle Yarn-Version 4.x garantiert in fast übertriebenem Maß deterministisches Verhalten, und man kann im ganzen Team konsistentes Verhalten erwarten
Funktional gibt es viele kleine Details, und wenn man sich daran gewöhnt hat, summieren sie sich zu einem großen Unterschied
Das nächste Major-Release soll denselben Weg weitergehen – mit besserer Performance und Funktionen, die bisher nicht möglich waren, weil sie von diesen Performance-Verbesserungen abhängen
Zur Einordnung: Ich bin der leitende Maintainer von Yarn
Schutzfunktionen für die Supply Chain gibt es auch
Irgendwann konnte ich es nicht mehr ertragen und bin auf pnpm umgestiegen; sowohl in CI als auch auf lokalen Entwicklungsrechnern liefen die Installationen deutlich schneller
Mit Hilfe eines LLM hat die Migration etwa einen Tag gedauert
node_modulesentpackt werden, sondern direkt aus komprimierten Archiven ausgeführt werdenhttps://yarnpkg.com/features/pnp
Das ist ziemlich ähnlich dazu, in Java
.jarstatt eines Verzeichnisbaums mit.class-Dateien zu verwendenAllerdings ist es etwas hacky, und die Unterstützung durch Editoren und Tools ist uneinheitlich
Die Zahl kleiner Dateien ist viel geringer, daher kann es besonders schneller sein, wenn man gezwungenermaßen unter Windows arbeiten muss
Man kann die Archive auch ins Git-Repository legen und so die Abhängigkeit vom Internet und von Paket-Registern beseitigen
Ich weiß es wirklich nicht
Ich wusste nicht, dass npm GitHub gehört
Das erklärt so einiges
Einiges davon liest sich im Rückblick interessant
Der oberste Kommentar lautete: „Microsoft macht nicht alles richtig, aber die GitHub-Übernahme ist ehrlich gesagt viel besser gelaufen als erwartet. Statt GitHub Microsoft-zentrierte Richtlinien aufzuzwingen, hat Microsoft aus Produktsicht mehr Dinge von GitHub übernommen. GitHub arbeitet weiterhin wie ein separates Unternehmen.“
Sie hatte Venture Capital aufgenommen, aber kein tragfähiges Geschäftsmodell gefunden
GitHub hat sie übernommen, um das Ökosystem zu retten, und diese Übernahme hat GitHub selbst kaum großen Nutzen gebracht
Und Microsoft hat GitHub auf Azure umgezogen
Ich frage mich, ob die Allowlist in
package.jsonauf Paketversionen festgenagelt ist oder nur auf PaketnamenSchön zu sehen, dass
allowScriptsstandardmäßig deaktiviert ist[blickt auf die Uhr] Das sind also nur 18 Monate, um pnpm zu folgen?
Wofür genau ist das im JavaScript-Umfeld gedacht?