Mastodon Mastodon Mastodon Mastodon

Was sich mit npm 12 ändert: explizite Freigabe für Skripte

Foto des Autors

CyberSecureFox Editorial Team

Veröffentlicht:

GitHub hat eine Reihe kritischer Änderungen in npm Version 12 angekündigt, deren wichtigste die Deaktivierung der Ausführung von Install-Skripten von Abhängigkeiten standardmäßig ist. Die Änderung betrifft alle Entwickler, die das Node.js-Ökosystem nutzen: Der Befehl npm install wird die Skripte preinstall, install und postinstall aus Abhängigkeiten nicht mehr automatisch ohne ausdrückliche Zustimmung ausführen. Die Veröffentlichung von npm 12 ist für den nächsten Monat geplant. Zur Vorbereitung empfiehlt GitHub, auf npm 11.16.0 oder neuer zu aktualisieren und den Befehl npm approve-scripts zu verwenden, um vertrauenswürdige Pakete explizit zu genehmigen.

Was sich konkret ändert

GitHub hat die bei der Installation ausgeführten Lifecycle-Skripte in einer Beschreibung als die „größte Codeausführungsoberfläche im gesamten npm-Ökosystem“ bezeichnet. Das Problem besteht darin, dass npm install Skripte aus jeder transitiven Abhängigkeit ausführt – was bedeutet, dass ein einziges kompromittiertes Paket an beliebiger Stelle im Abhängigkeitsbaum beliebigen Code auf der Maschine des Entwicklers oder in der CI/CD-Umgebung ausführen kann.

npm 12 führt drei zentrale Einschränkungen ein:

  • Blockierung von Install-Skripten:npm install wird die Skripte preinstall, install und postinstall aus Abhängigkeiten nicht ausführen, sofern sie nicht ausdrücklich in der Projektkonfiguration erlaubt wurden.
  • Blockierung von Git-Abhängigkeiten: direkte und transitive Git-Abhängigkeiten werden nicht aufgelöst, ohne dass der Flag --allow-git explizit angegeben wird.
  • Blockierung entfernter

Unter die Blockierung fallen auch native Builds über node-gyp: Pakete mit einer Datei binding.gyp ohne explizites Install-Skript werden ebenfalls blockiert, da npm für sie implizit den Befehl node-gyp rebuild ausführt. prepare-Skripte aus Git-, Datei- und symbolischen Abhängigkeiten werden in gleicher Weise blockiert.

Schließen des Umgehungsvektors über .npmrc

Besonders bemerkenswert ist, dass der Standardwert für --allow-git auf none gesetzt wird. Damit wird ein Angriffsvektor geschlossen, bei dem die Datei .npmrc innerhalb einer Git-Abhängigkeit die ausführbare Git-Datei überschreiben konnte. Auffällig ist, dass dieser Pfad zur Codeausführung selbst dann funktionierte, wenn der Flag --ignore-scripts verwendet wurde, der bisher als wichtigste Schutzmaßnahme gegen bösartige Skripte bei der Installation galt.

Wer davon betroffen ist

Die Änderungen betreffen praktisch das gesamte Node.js-Ökosystem. Am stärksten betroffen sind:

  • Projekte mit nativen Modulen — jede Abhängigkeit, die node-gyp zur Kompilierung von C/C++-Add-ons verwendet, erfordert eine ausdrückliche Genehmigung.
  • CI/CD-Pipelines — automatisierte Builds, die sich auf postinstall-Skripte zur Einrichtung der Umgebung stützen, können ohne Aktualisierung der Konfiguration fehlschlagen.
  • Projekte mit Git-Abhängigkeiten — Monorepos und Projekte, die direkt auf private Repositories verweisen, erfordern eine explizite Freigabe.

Ohne Gegenmaßnahmen wird ein Update auf npm 12 zu Fehlern bei der Installation von Abhängigkeiten führen – alle nicht genehmigten Skripte werden einfach nicht mehr ausgeführt.

Wie man sich vorbereitet

GitHub empfiehlt folgendes Vorgehen:

  1. npm auf Version 11.16.0 oder neuer aktualisieren.
  2. Die reguläre Installation der Abhängigkeiten durchführen und die ausgegebenen Warnungen prüfen.
  3. npm approve-scripts --allow-scripts-pending ausführen, um die Liste der Pakete mit Skripten anzuzeigen.
  4. Vertrauenswürdige Pakete genehmigen und die aktualisierte package.json im Repository festschreiben.

Nach dem Update auf npm 12 werden nur noch ausdrücklich genehmigte Skripte ausgeführt. Alles, was ohne Genehmigung bleibt, wird blockiert.

Bemerkenswert ist, dass npm zuvor bereits die Einstellung min-release-age eingeführt hat, mit der Paketversionen abgelehnt werden können, die weniger als eine angegebene Anzahl von Tagen zuvor veröffentlicht wurden – als Schutz vor neu erschienenen bösartigen Veröffentlichungen. Die Deaktivierung von Skripten standardmäßig in npm 12 ist eine logische Fortsetzung dieser Strategie zur Stärkung der Sicherheit der Lieferkette.

Der Wechsel von npm zu einem Modell expliziter Skriptgenehmigung ist ein grundlegender Übergang von „Vertrauen standardmäßig“ zu „Zero Trust“ beim Umgang mit Abhängigkeiten. Entwicklungsteams sollten bereits jetzt mit der Überprüfung der Skripte von Abhängigkeiten auf npm 11.16.0+ beginnen, damit das Update auf npm 12 nicht zu unerwarteten Ausfällen in Build-Prozessen führt.


CyberSecureFox Editorial Team

Die CyberSecureFox-Redaktion berichtet über Cybersecurity-News, Schwachstellen, Malware-Kampagnen, Ransomware-Aktivitäten, AI Security, Cloud Security und Security Advisories von Herstellern. Die Beiträge werden auf Grundlage von official advisories, CVE/NVD-Daten, CISA-Meldungen, Herstellerveröffentlichungen und öffentlichen Forschungsberichten erstellt. Artikel werden vor der Veröffentlichung geprüft und bei neuen Informationen aktualisiert.

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden.