- In npm v12 werden die sicherheitsrelevanten Standardwerte von
npm installvon automatischer Ausführung/Auflösung auf ein Modell mit expliziter Erlaubnis umgestellt; eine Vorabprüfung ist über Warnungen ab npm 11.16.0 möglich - Der Standardwert von
allowScriptswird auf deaktiviert gesetzt, wodurchpreinstall-,install- undpostinstall-Skripte nicht ausdrücklich erlaubter Abhängigkeiten sowie implizitenode-gyp rebuild-Ausführungen undprepare-Skripte von Git-, File- und Link-Abhängigkeiten blockiert werden - Mit
npm approve-scripts --allow-scripts-pendinglassen sich die Pakete prüfen, die blockiert werden würden; mitnpm approve-scriptsundnpm deny-scriptswerden Erlauben und Blockieren festgelegt, danach sollte die erzeugte Allowlist inpackage.jsoncommitted werden - Der Standardwert von
--allow-gitwird aufnonegeändert, wodurch die Auflösung direkter und transitiver Git-Abhängigkeiten gestoppt wird, sofern sie nicht ausdrücklich mit--allow-giterlaubt wurden - Es wird ein Code-Ausführungspfad blockiert, über den
.npmrcvon Git-Abhängigkeiten trotz Verwendung von--ignore-scriptsdas Git-Executable überschreiben konnte - Der Standardwert von
--allow-remotewird aufnonegeändert, wodurch die Auflösung von Abhängigkeiten über Remote-URLs wie HTTPS-Tarballs gestoppt wird, sofern sie nicht ausdrücklich mit--allow-remoteerlaubt wurden - Die Standardwerte von
--allow-fileund--allow-directorybleiben in npm v12 unverändert - Zur Vorbereitung sollte auf npm 11.16.0 oder höher aktualisiert, anschließend eine normale Installation ausgeführt und die Warnungen geprüft werden; nur vertrauenswürdige Pakete sollten freigegeben werden, und nach dem Upgrade werden nur noch genehmigte Skripte weiter ausgeführt
- Zugehörige Dokumentation:
npm approve-scripts,npm deny-scripts,allow-scriptsconfig
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?