Abhängigkeiten
npm audit
npm audit gleicht die Pakete in Ihrem Projekt mit bekannten Sicherheits-Advisories ab und meldet, was es findet. Es gehört zu npm, kostet nichts und braucht nur Sekunden. Damit ist es der einfachste SCA-Scan, den Sie ausführen können. Wenn Sie wissen, was es liest, wissen Sie auch, was es übersehen kann.
Aktualisiert am
So funktioniert npm audit
npm audit sendet eine Beschreibung der Abhängigkeiten Ihres Projekts an Ihre Standard-Registry und fragt nach bekannten
Schwachstellen. Es braucht eine package-lock.json oder eine Shrinkwrap-Datei, denn daher weiß es, welche
Versionen Sie haben. Die Details stehen in der npm-Dokumentation.
npm audit # report everything
npm audit --omit=dev # skip dev dependencies
npm audit --audit-level=high # fail only on high or critical
npm audit --json # machine-readable output
So lesen Sie den Bericht
- Der Schweregrad stammt aus dem Advisory. Er sagt, wie schwer die Lücke allgemein ist, nicht wie schwer sie für Sie ist.
- Der Abhängigkeitspfad zeigt, was das Paket nachgezogen hat. Die meisten Befunde sind transitive Abhängigkeiten, und die Lösung liegt meist im Paket darüber.
- Entwicklung oder Produktion. Eine Lücke in einem Test-Tool wird nicht an Nutzer ausgeliefert, läuft aber trotzdem in Ihrem Build. Ignorieren Sie sie also nicht ganz.
Bei einer langen Liste beginnen Sie mit dem, was ausgenutzt wird und was ausgeliefert wird. Siehe so priorisieren Sie Schwachstellen.
npm audit fix und wann Sie es nicht erzwingen sollten
| Befehl | Was er tut | Risiko |
|---|---|---|
npm audit fix |
Wendet kompatible Updates innerhalb Ihrer Versionsbereiche an | Niedrig. Führen Sie trotzdem Ihre Tests aus, denn der Befehl löst eine vollständige Installation aus |
npm audit fix --force |
Erlaubt auch Änderungen außerhalb Ihrer Versionsbereiche, einschließlich Major-Versionen | Hoch. Er kann Ihre Anwendung beschädigen, und npm rät davon ab, ihn ohne klare Vorstellung davon zu nutzen, was Sie erreichen wollen |
Gibt es keinen Fix, können Sie das übergeordnete Paket aktualisieren oder mit dem Feld overrides in der
package.json eine gepatchte transitive Version erzwingen. Testen Sie das, denn das übergeordnete Paket wurde nicht
mit dieser Version gebaut.
npm audit im CI ausführen
Standardmäßig beendet sich npm audit mit einem Exit-Code ungleich null, sobald es etwas findet. Das lässt den Job bei jedem
Advisory mit niedrigem Schweregrad fehlschlagen. Teams setzen daher meist einen Schwellenwert. Beachten Sie, dass --audit-level nur den Schwellenwert
für das Fehlschlagen ändert und den Bericht nicht filtert.
- run: npm ci
- run: npm audit --omit=dev --audit-level=high
Eine solche Prüfung kann einen Build auch ohne Codeänderung fehlschlagen lassen, weil über Nacht ein neues Advisory veröffentlicht wurde. Legen Sie fest, wer für diesen Fehlschlag zuständig ist, bevor Sie sie aktivieren. Mehr dazu unter wo SCA-Scans laufen sollten.
Was npm audit übersieht
-
Alles außerhalb von npm. Ihr Basis-Image, Betriebssystempakete, Python-Tools und GitHub Actions
stehen nicht in der
package-lock.json. - Code, der bei der Installation geladen wird. Install-Skripte können Dateien herunterladen, die kein Lockfile aufzeichnet. Siehe was ein Lockfile nicht aufzeichnet.
- Neue bösartige Pakete. Es gleicht veröffentlichte Advisories ab, ein Paket ohne Advisory kommt also ohne Befund durch.
- Was bereits ausgeliefert ist. Es berichtet über das Projekt, das vor ihm liegt. Ein neues Advisory für das Release vom letzten Jahr taucht nur auf, wenn jemand es für diese Version erneut ausführt.
- Ob Sie betroffen sind. Es weiß nicht, ob Ihr Code die verwundbare Funktion nutzt. Erreichbarkeitsanalyse geht dieser Frage nach.
npm audit signatures ist ein eigener Befehl, der Registry-Signaturen und Provenienz-Attestierungen
der installierten Pakete prüft. Er prüft, woher ein Paket stammt, nicht ob es sicher ist.
npm audit und CRACI
Führen Sie npm audit weiter bei Pull Requests aus. Es ist kostenlos und findet bekannte Probleme früh. CRACI deckt ab, was
es nicht sehen kann: Als Ihr GitHub-Actions-Runner zeichnet CRACI jedes Paket auf, das jeder Job tatsächlich von npm und aus jeder
anderen Quelle geladen hat, einschließlich der aus CI-Caches wiederhergestellten Pakete und der von Install-Hooks geladenen Dateien. Anschließend prüft es
die SBOM des Ausgelieferten laufend weiter, sobald neue Schwachstellen veröffentlicht werden. Siehe
die besten SCA-Tools oder
SBOM-Generierung im Build.
npm audit: häufig gestellte Fragen
Was macht npm audit?
Es sendet eine Beschreibung Ihrer Abhängigkeiten an die npm-Registry, gleicht sie mit bekannten Sicherheits-Advisories ab und meldet verwundbare Pakete mit ihrem Schweregrad und dem Weg, auf dem sie in Ihr Projekt gelangt sind.
Ist npm audit fix sicher?
Das einfache npm audit fix ist meist sicher, weil es innerhalb Ihrer Versionsbereiche bleibt. Führen Sie danach aber Ihre Tests aus. npm audit fix --force kann neue Major-Versionen installieren und Ihre Anwendung beschädigen.
Warum zeigt npm audit so viele Schwachstellen?
Die meisten stammen aus transitiven Abhängigkeiten und Entwicklungswerkzeugen. Nutzen Sie --omit=dev, um sich auf das Ausgelieferte zu konzentrieren, und priorisieren Sie nach Ausnutzung und Exposition statt nach der Anzahl.
Wie ignorieren Sie eine Schwachstelle in npm audit?
npm audit hat keine integrierte Ignorierliste. Teams nutzen das Feld overrides, um die Version zu ändern, einen Schwellenwert mit --audit-level oder ein Wrapper-Tool, das akzeptierte Befunde festhält.
Braucht npm audit ein Lockfile?
Ja, standardmäßig braucht es package-lock.json oder eine Shrinkwrap-Datei. Mit --no-package-lock können Sie das umgehen, dann können die Ergebnisse aber zwischen den Läufen abweichen.
Erkennt npm audit Malware?
Erst wenn für das Paket ein Advisory veröffentlicht wurde. Zu einem neuen bösartigen Paket gibt es kein Advisory, es wird also am Tag seines Erscheinens nicht gemeldet.
Sehen Sie, was npm audit nicht sehen kann
Lassen Sie einen GitHub-Actions-Workflow auf CRACI laufen und vergleichen Sie die aufgezeichnete SBOM mit Ihrer package-lock.json.
Demo buchen