
Befehlszeilen-Scanner ohne Abhängigkeiten für npm/PyPI-Lieferkettenkompromittierungen. Erkennt kompromittierte Pakete in Lockfiles und systemweite IOCs von Angriffen wie Mini Shai-Hulud (CVE-2026-45321).
Zero-Dependency-CLI-Scanner für npm- und PyPI-Lieferkettenkompromittierungen.
Am 11. Mai 2026 kompromittierte ein sich selbst verbreitender Lieferkettenwurm namens Mini Shai-Hulud (CVE-2026-45321, GHSA-g7cv-rxg3-hmpx) das npm-Ökosystem. Der Malware wurde TeamPCP (auch bekannt als DeadCatx3, PCPcat, ShellForce, CipherForce) zugeschrieben. Er kaperte GitHub Actions OIDC-Tokens, um bösartige Pakete mit gültiger SLSA Build Level 3-Provenienz zu veröffentlichen. Er stahl Anmeldeinformationen aus CI/CD-Pipelines, Cloud-Anbietern und Kryptowährungs-Wallets und installierte Persistenz-Hooks in Claude Code und VS Code. Ein eingebauter Dead-Man-Switch drohte, das Home-Verzeichnis des Benutzers zu löschen, wenn npm-Tokens widerrufen wurden.
Betroffene Pakete umfassten TanStack Router und Start-Pakete, Mistral AI SDKs, OpenSearch-Client, UiPath-Tooling und Dutzende andere. Da Lieferkettenangriffe schnell ablaufen, benötigen Organisationen einen leichten, vertrauenswürdigen Scanner, den sie überall ausführen können, ohne ihrer eigenen Angriffsfläche neue Abhängigkeiten hinzuzufügen.
package-lock.json, pnpm-lock.yaml, yarn.lock, bun.lock, bun.lockb, poetry.lock, Pipfile.lock und requirements.txtfs, path, child_process, os). Der Scanner erhöht Ihr Lieferkettenrisiko nicht0 = sauber, 1 = Funde, 2 = Fehler)src/db.ts hinzugefügt; die Datei aktualisieren und erneut ausführenKeine Installation erforderlich. Direkt mit Ihrem bevorzugten Paket-Runner ausführen:
# npx
npx @digi4care/shai-scan
# bunx
bunx @digi4care/shai-scan
# pnpm dlx
pnpm dlx @digi4care/shai-scan
Globale Installation (optional):
npm install -g @digi4care/shai-scan
# oder
pnpm add -g @digi4care/shai-scan
Aus dem Quellcode:
git clone https://github.com/digi4care/shai-scan.git
cd shai-scan
pnpm install
bun run src/cli.ts --help # Bun (für die Entwicklung empfohlen)
# oder bauen und mit Node.js ausführen:
pnpm run build && node dist/cli.js --help
npx @digi4care/shai-scan
npx @digi4care/shai-scan ~/projects/my-app
npx @digi4care/shai-scan --json .
npx @digi4care/shai-scan --sarif --sarif-file results.sarif .
#!/bin/bash
npx @digi4care/shai-scan --severity high . || {
code=$?
if [ "$code" -eq 1 ]; then
echo "Lieferketten-Funde erkannt"
exit 1
elif [ "$code" -eq 2 ]; then
echo "Scanner-Fehler"
exit 2
fi
}
name: Supply Chain Scan
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: pnpm install --frozen-lockfile
- run: npx @digi4care/shai-scan --severity high .
name: Supply Chain Scan SARIF
on:
push:
branches: [main]
pull_request:
branches: [main]
schedule:
- cron: '0 6 * * 1'
jobs:
scan:
runs-on: ubuntu-latest
permissions:
security-events: write
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: pnpm install --frozen-lockfile
- run: npx @digi4care/shai-scan --sarif --sarif-file results.sarif .
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
| Format | Flag | Beschreibung |
|---|---|---|
| Text | (Standard) | Menschenlesbare Tabelle der Funde mit Schweregrad, Paketname, Version und Kampagnendetails |
| JSON | --json | Strukturiertes JSON-Array der Funde, geeignet für die Aufnahme in SIEMs oder benutzerdefinierte Dashboards |
| SARIF | --sarif | OASIS SARIF 2.1.0-Format für den Upload zu GitHub Code Scanning, GitLab Secure oder anderen SARIF-Konsumenten |
Beispiel-JSON-Auszug:
[
{
"package": "@tanstack/react-router",
"version": "1.169.5",
"ecosystem": "npm",
"severity": "critical",
"campaign": "mini-shai-hulud-wave4",
"cve": "CVE-2026-45321",
"reference": "https://github.com/TanStack/router/security/advisories/GHSA-g7cv-rxg3-hmpx"
}
]
| Code | Bedeutung |
|---|---|
| 0 | Keine kompromittierten Pakete oder IOCs erkannt |
| 1 | Ein oder mehrere Funde erkannt |
| 2 | Laufzeitfehler (ungültiger Pfad, nicht lesbare Lockfile usw.) |
Wenn ein neuer Lieferkettenangriff entdeckt wird, aktualisieren Sie src/db.ts:
CompromisedVersion[]-Array mit den betroffenen Paketen und Versionen hinzuCampaign-Objekt an das CAMPAIGNS-Array an, einschließlich CVE/GHSA-Identifikatoren, Schweregrad, Beschreibung, Referenz-URLs und IOC-IndikatorenbuildLookup() erstellt die Nachschlagetabelle beim nächsten Lauf automatisch neuBei Verwendung von Bun ist kein Neubauschritt erforderlich. Änderungen an src/db.ts werden mit bun run src/cli.ts sofort wirksam. Für das npm-Paket führen Sie nach der Bearbeitung pnpm run build aus.
Null Laufzeitabhängigkeiten: Der Scanner verwendet nur Node.js/Bun-Built-in-Module. Er lädt zur Laufzeit keinen Drittanbieter-Code herunter oder führt ihn aus, wodurch das Risiko eliminiert wird, dass der Scanner selbst zu einem Kompromittierungsvektor wird.
pnpm als Paketmanager: pnpm verwendet strikte Lockfiles, führt standardmäßig keine Lebenszyklus-Skripte aus und unterstützt inhaltsadressierbaren Speicher. Diese Eigenschaften verringern die Angriffsfläche im Vergleich zu anderen Paketmanagern.
Empfohlene .npmrc-Einstellungen: Für maximalen Schutz bei der Installation von Paketen fügen Sie Folgendes zu Ihrer Projekt- oder globalen .npmrc hinzu:
ignore-scripts=true
engine-strict=true
Keine Netzwerkaufrufe: shai-scan telefoniert nicht nach Hause, lädt keine Signaturen herunter und benötigt keinen API-Schlüssel. Alle Kampagnendaten werden mit dem Paket ausgeliefert.
Die folgenden Pakete und Versionen sind bekanntermaßen in CVE-2026-45321 (Mini Shai-Hulud Wave 4) kompromittiert. Dies ist eine repräsentative Teilmenge; die vollständige Liste wird in src/db.ts gepflegt.