@lateos/npm-scan 0.18.2 → 0.18.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/.dockerignore +20 -20
  2. package/.husky/pre-commit +1 -1
  3. package/CHANGELOG.md +233 -233
  4. package/LICENSING.md +19 -19
  5. package/README.de.md +708 -708
  6. package/README.fr.md +707 -707
  7. package/README.ja.md +704 -704
  8. package/README.md +826 -826
  9. package/README.zh.md +708 -708
  10. package/SECURITY.md +72 -72
  11. package/backend/cra.js +68 -68
  12. package/backend/db/schema.sql +32 -32
  13. package/backend/db.js +88 -88
  14. package/backend/detectors/atk-001-lifecycle.js +17 -17
  15. package/backend/detectors/atk-002-obfusc.js +261 -261
  16. package/backend/detectors/atk-003-creds.js +13 -13
  17. package/backend/detectors/atk-004-persist.js +13 -13
  18. package/backend/detectors/atk-005-exfil.js +13 -13
  19. package/backend/detectors/atk-006-depconf.js +14 -14
  20. package/backend/detectors/atk-007-typosquat.js +34 -34
  21. package/backend/detectors/atk-008-tarball-tamper.js +91 -91
  22. package/backend/detectors/atk-009-dormant-trigger.js +62 -62
  23. package/backend/detectors/atk-010-sandbox-evasion.js +50 -50
  24. package/backend/detectors/atk-011-transitive-prop.js +76 -76
  25. package/backend/detectors/cve-2026-48710-badhost/codePattern.js +99 -99
  26. package/backend/detectors/cve-2026-48710-badhost/findings.js +105 -105
  27. package/backend/detectors/cve-2026-48710-badhost/index.js +15 -15
  28. package/backend/detectors/cve-2026-48710-badhost/manifest.js +305 -305
  29. package/backend/detectors/cve-2026-48710-badhost/transitive.js +189 -189
  30. package/backend/detectors/hf-impersonation/index.js +396 -396
  31. package/backend/detectors/hf-impersonation/jaro-winkler.js +44 -44
  32. package/backend/detectors/hf-impersonation/known-orgs.js +5 -5
  33. package/backend/detectors/hf-impersonation/simhash.js +46 -46
  34. package/backend/detectors/index.js +81 -81
  35. package/backend/detectors/megalodon/d1-workflow-scan.js +147 -147
  36. package/backend/detectors/megalodon/d2-credential-harvest.js +61 -61
  37. package/backend/detectors/megalodon/d3-publish-velocity.js +67 -67
  38. package/backend/detectors/megalodon/d4-publisher-drift.js +124 -124
  39. package/backend/detectors/megalodon/d5-bot-commit-identity.js +3 -3
  40. package/backend/detectors/megalodon/d6-date-anachronism.js +3 -3
  41. package/backend/detectors/megalodon/index.js +80 -80
  42. package/backend/detectors/megalodon/types.js +9 -9
  43. package/backend/detectors/mini-shai-hulud/d1-burst-publish.js +42 -42
  44. package/backend/detectors/mini-shai-hulud/d2-sibling-compromise.js +116 -116
  45. package/backend/detectors/mini-shai-hulud/d3-slsa-mismatch.js +72 -72
  46. package/backend/detectors/mini-shai-hulud/d4-maintainer-anomaly.js +45 -45
  47. package/backend/detectors/mini-shai-hulud/d5-ioc-check.js +95 -95
  48. package/backend/detectors/mini-shai-hulud/d6-token-exfil.js +38 -38
  49. package/backend/detectors/mini-shai-hulud/index.js +118 -118
  50. package/backend/detectors/mini-shai-hulud/iocs.json +79 -79
  51. package/backend/fetch.js +175 -175
  52. package/backend/index.js +4 -4
  53. package/backend/license.js +89 -89
  54. package/backend/lockfile.js +379 -379
  55. package/backend/pdf.js +245 -245
  56. package/backend/policy.js +193 -193
  57. package/backend/report.js +254 -254
  58. package/backend/sbom.js +66 -66
  59. package/backend/siem/cef.js +32 -32
  60. package/backend/siem/ecs.js +40 -40
  61. package/backend/siem/index.js +18 -18
  62. package/backend/siem/qradar.js +56 -56
  63. package/backend/siem/sentinel.js +27 -27
  64. package/backend/vsix-scan/detectors/activation-event-risk.js +116 -116
  65. package/backend/vsix-scan/detectors/burst-publish.js +52 -52
  66. package/backend/vsix-scan/detectors/exfil-pattern.js +88 -88
  67. package/backend/vsix-scan/detectors/known-ioc.js +105 -105
  68. package/backend/vsix-scan/detectors/orphan-commit-fetch.js +69 -69
  69. package/backend/vsix-scan/detectors/publisher-anomaly.js +70 -70
  70. package/backend/vsix-scan/index.js +183 -183
  71. package/backend/vsix-scan/marketplace-client.js +145 -145
  72. package/backend/vsix-scan/vsix-iocs.json +31 -31
  73. package/cli/cli.js +458 -458
  74. package/deploy/helm/npm-scan/Chart.yaml +21 -21
  75. package/deploy/helm/npm-scan/templates/_helpers.tpl +8 -8
  76. package/deploy/helm/npm-scan/templates/api.yaml +93 -93
  77. package/deploy/helm/npm-scan/templates/ingress.yaml +27 -27
  78. package/deploy/helm/npm-scan/templates/postgresql.yaml +66 -66
  79. package/deploy/helm/npm-scan/templates/secrets.yaml +18 -18
  80. package/deploy/helm/npm-scan/templates/worker.yaml +31 -31
  81. package/deploy/helm/npm-scan/values.byoc.yaml +74 -74
  82. package/deploy/helm/npm-scan/values.yaml +102 -102
  83. package/package.json +57 -57
  84. package/scripts/download-corpus.js +30 -30
  85. package/scripts/gen-mal-corpus.js +34 -34
  86. package/test/fixtures/lockfiles/npm-lock.json +68 -68
  87. package/test/fixtures/lockfiles/pnpm-lock.yaml +117 -117
  88. package/test/fixtures/lockfiles/yarn.lock +103 -103
  89. package/test/fixtures/mock-data.js +69 -69
package/README.de.md CHANGED
@@ -1,709 +1,709 @@
1
- # @lateos/npm-scan
2
-
3
- [![English](https://img.shields.io/badge/lang-en-blue?style=flat-square)](https://github.com/lateos-ai/npm-scan/blob/main/README.md)
4
- [![中文](https://img.shields.io/badge/lang-zh--CN-red?style=flat-square)](https://github.com/lateos-ai/npm-scan/blob/main/README.zh.md)
5
- [![日本語](https://img.shields.io/badge/lang-ja-purple?style=flat-square)](https://github.com/lateos-ai/npm-scan/blob/main/README.ja.md)
6
- [![Français](https://img.shields.io/badge/lang-fr-orange?style=flat-square)](https://github.com/lateos-ai/npm-scan/blob/main/README.fr.md)
7
- [![Deutsch](https://img.shields.io/badge/lang-de-green?style=flat-square)](https://github.com/lateos-ai/npm-scan/blob/main/README.de.md)
8
-
9
- [![npm version](https://img.shields.io/npm/v/@lateos/npm-scan?style=flat-square)](https://www.npmjs.com/package/@lateos/npm-scan)
10
- [![License](https://img.shields.io/badge/license-Apache%202.0%20%2B%20Commons%20Clause-blue?style=flat-square)](LICENSING.md)
11
- [![Node](https://img.shields.io/badge/node-%3E%3D18-brightgreen?style=flat-square)](package.json)
12
- [![Tests](https://img.shields.io/badge/tests-459%20passing-brightgreen?style=flat-square)](https://github.com/lateos-ai/npm-scan)
13
- [![Coverage](https://img.shields.io/badge/coverage-85%25-yellowgreen?style=flat-square)](https://github.com/lateos-ai/npm-scan)
14
- [![Docker](https://img.shields.io/badge/docker-lateos%2Fnpm--scan-2496ED?style=flat-square&logo=docker)](https://hub.docker.com/r/lateos/npm-scan)
15
- [![Sigstore](https://img.shields.io/static/v1?label=Sigstore&message=Provenance&color=green&style=flat-square&logo=sigstore)](https://github.com/lateos-ai/npm-scan/actions/workflows/publish.yml)
16
-
17
- **Moderne Lieferkettensicherheit für das npm-Ökosystem.**
18
- Statische + verhaltensbasierte Analyse, die erkennt, was npm audit, Snyk und Socket übersehen — obfuskierte Payloads, Credential-Stealer, bedingte Auslöser, Sandbox-Evasion und wurmartige Verbreitung.
19
-
20
- ---
21
-
22
- ## 📌 Das Problem
23
-
24
- Die Welle von npm-Lieferkettenangriffen 2025-2026 hat bewiesen, dass herkömmliche Werkzeuge nicht mehr ausreichen.
25
-
26
- Angreifer haben sich längst über einfaches Typosquatting hinausentwickelt. Sie liefern nun **obfuskierte Preinstall-Hooks**, **hinter Umgebungserkennung versteckte Credential-Stealer**, **schlafende Hintertüren mit zeitbasierter Aktivierung** und **wurmartige transitive Verbreitung**, die sich über Peer-Abhängigkeiten ausbreitet.
27
-
28
- Die **Megalodon-Kampagne** (2026) kompromittierte allein über 5.500 Repositorys durch gefälschte GitHub-PRs, böswillige Workflow-Injektion und Cloud-Credential-Exfiltration - alles koordiniert durch einen einzelnen Akteur, der die gesamte Kill-Chain automatisierte. **@lateos/npm-scan** erkennt Artefakte dieser Kampagne jetzt standardmäßig.
29
-
30
- Die **Mini Shai-Hulud-Wurm-Kampagne** (Mai 2026) traf das npm-Ökosystem in drei Wellen - TanStack CI/CD-Entführung (84 Artefakte in 6 Minuten), AntV/atool-Maintainer-Kompromittierung (600+ bösartige Versionen in 300+ Paketen) und Nx Console VS-Code-Erweiterungsvergiftung (CVE-2026-48027) - alle unter Verwendung von ctf-scramble-v2-Obfuskation, dämonisierter Persistenz mit CI-Umgebungsprüfungen, geografischen Killswitches gegen sanktionierte Regionen und GitHub-C2-Dead-Drop-Kanälen zur Token-Wiederherstellung. **@lateos/npm-scan** erkennt jetzt alle 10 Mini-Shai-Hulud-Signale über zwei Detektor-Suites.
31
-
32
- Ein wachsender Angriffsvektor ist die **HuggingFace-Organisations-Identitätsdiebstahl**.
33
-
34
- Die **TrapDoor-Kampagne** (Mai 2026) erstreckt sich über npm, PyPI und Crates.io.
35
-
36
- Die **node-ipc-Kompromittierung** (14. Mai 2026) nutzte eine abgelaufene Maintainer-E-Mail-Domain aus.
37
-
38
- Die **Massen-Typosquatting-Kampagne (vpmdhaj)** (Mai 2026) bewaffnete das npm-Maintainer-Konto `vpmdhaj`, um in einem 4-Stunden-Fenster 14 Typosquatting-Pakete zu veröffentlichen - mit Preinstall-Stagern, Bun-Laufzeitmissbrauch und Cloud-Credential-Exfiltration gegen AWS/CI/CD-Umgebungen. **@lateos/npm-scan** erkennt jetzt alle 3 Typosquatting-Kampagnensignale.
39
-
40
- Die **Axios-Registry-Vergiftungskampagne** (Mai 2026) kompromittierte die npm-Registry-Metadaten des Axios-Pakets, um `axios@1.14.1` und `axios@0.30.4` mit injizierten Abhängigkeiten zu veröffentlichen, die plattformübergreifende RAT-Payloads enthielten. **@lateos/npm-scan** erkennt jetzt alle 3 Axios-Vergiftungssignale.
41
-
42
- **npm audit** prüft bekannte CVEs. **Snyk** scannt nach Schwachstellen. **Socket** untersucht das Paketverhalten. Keines dieser Tools wurde für die Angriffsgeneration entwickelt, die 2025 auftrat.
43
-
44
- **@lateos/npm-scan** wurde für diesen Moment entwickelt.
45
-
46
- ---
47
-
48
- ## 🔬 Warum @lateos/npm-scan?
49
-
50
- | Fähigkeit | npm audit | Snyk | Socket | **@lateos/npm-scan** |
51
- |---|---|---|---|---|
52
- | Bekannte CVE-Übereinstimmung | ✅ | ✅ | ❌ | ✅ |
53
- | Statische Analyse | ❌ | ✅ | ✅ | ✅ |
54
- | Erkennung obfuskierter Payloads | ❌ | ❌ | ❌ | ✅ |
55
- | AST-Level heuristische Analyse | ❌ | ❌ | ❌ | ✅ |
56
- | Runtime-Verhaltenssandbox | ❌ | ❌ | ✅ | ✅ |
57
- | Erkennung bedingter Auslöser (ATK-009) | ❌ | ❌ | ❌ | ✅ |
58
- | Sandbox-Evasion-Erkennung (ATK-010) | ❌ | ❌ | ❌ | ✅ |
59
- | Transitive Wurmverbreitung (ATK-011) | ❌ | ❌ | ❌ | ✅ |
60
- | Kampagnenerkennung (Megalodon CI/CD) | ❌ | ❌ | ❌ | ✅ |
61
- | Wurm-Kampagnenerkennung (Mini Shai-Hulud Welle 1-3) | ❌ | ❌ | ❌ | ✅ |
62
- | HF-Modell-Repo-Identitätsdiebstahl + README-Klon | ❌ | ❌ | ❌ | ✅ |
63
- | VS-Code-Erweiterungs-Supply-Chain-Scan (--vsix) | ❌ | ❌ | ❌ | ✅ |
64
- | Python-Schwachstellenerkennung (CVE-2026-48710 BadHost) | ❌ | ❌ | ❌ | ✅ |
65
- | Plattformübergreifende Angriffserkennung (TrapDoor) | ❌ | ❌ | ❌ | ✅ |
66
- | Abgelaufene-Domain-Entführungserkennung (node-ipc) | ❌ | ❌ | ❌ | ✅ |
67
- | Malware-Obfuskationserkennung (ctf-scramble-v2) | ❌ | ❌ | ❌ | ✅ |
68
- | Massen-Typosquatting-Kampagne (vpmdhaj-Maintainer) | ❌ | ❌ | ❌ | ✅ |
69
- | Registry-Vergiftungserkennung (axios-Fake-Versionen) | ❌ | ❌ | ❌ | ✅ |
70
- | Angriffstaxonomie (ATK-Serie) | ❌ | ❌ | ❌ | ✅ |
71
- | SBOM-Ausgabe (CycloneDX + SPDX) | ❌ | ✅ | ❌ | ✅ |
72
- | NIST 800-161-Compliance-Bericht | ❌ | ❌ | ❌ | ✅ |
73
- | EU-CRA-Compliance-Bericht | ❌ | ❌ | ❌ | ✅ |
74
- | SIEM-Export (CEF / ECS / Sentinel / QRadar) | ❌ | ❌ | ❌ | ✅ |
75
- | Vollständig lokale Ausführung — keine Telemetrie | ✅ | ❌ | ❌ | ✅ |
76
- | Policy-as-Code (YAML-Whitelists) | ❌ | ❌ | ❌ | ✅ |
77
-
78
- > **Datenschutz an erster Stelle.** Alle Scans erfolgen auf Ihrem Rechner. Kein Code verlässt Ihre Umgebung. Keine Telemetrie. Keine Cloud-Abhängigkeit.
79
-
80
- ---
81
-
82
- ## ✨ Hauptfunktionen
83
-
84
- | Symbol | Funktion | Beschreibung |
85
- |------|---------|-------------|
86
- | 🕵️ | **Heuristische statische Analyse** | AST-Level-Inspektion erkennt Obfuskation, eval-Ketten, Umgebungsabfragen und verdächtige Lebenszyklus-Skripte, die regex-basierten Tools entgehen |
87
- | 🧠 | **Verhaltenserkennung** | Identifiziert bedingte Auslöser (zeitbasiert, CI-bewusst), Sandbox-Evasion und schlafende Aktivierungsmuster |
88
- | 🧬 | **ATK-Angriffstaxonomie** | 11 klassifizierte Angriffstypen mit NIST 800-161-Zuordnungen — versioniert, dokumentiert und PR-fähig |
89
- | 🪱 | **Wurm-Kampagnenerkennung** | Mini Shai-Hulud - 10 Sub-Checks über 2 Suites: Burst-Publish, Sibling-Kompromittierung, SLSA-Attestierungsabweichung, Publisher-Drift, IOC-Match, Token-Exfil, ctf-scramble-v2-Obfuskation, dämonisierte Persistenz, geografischer Killswitch, GitHub-C2-Dead-Drop |
90
- | 🧩 | **VSIX-Erweiterungsscan** | `npm-scan scan --vsix` - erkennt VS Code Marketplace Supply-Chain-Angriffe |
91
- | 🐍 | **Python-Schwachstellenerkennung** | CVE-2026-48710 (BadHost) - Starlette Host-Header-Injection |
92
- | 🪤 | **Plattformübergreifende Angriffserkennung** | TrapDoor - 9 Sub-Checks |
93
- | 📡 | **Abgelaufene-Domain-Entführungserkennung** | node-ipc-Kompromittierung - 11 Sub-Checks |
94
- | ☣️ | **Malware-Obfuskationserkennung** | ctf-scramble-v2 - scannt Paket-dist/lib nach bekannten Malware-Obfuskationsmustern, stoppt Analyse sofort mit CRITICAL-Stoppbedingung |
95
- | 🎭 | **Massen-Typosquatting-Kampagnenerkennung** | vpmdhaj-Maintainer-Blocklist mit Stoppbedingung, Levenshtein-basierte Typosquatting-Erkennung, Preinstall-Stager-Identifikation, AWS-ECS/Vault/GitHub-Credential-Exfiltrationsmuster |
96
- | ☠️ | **Registry-Vergiftungserkennung** | Axios-Versions-Blocklist (1.14.1/0.30.4) mit Stoppbedingung, Decoy-Abhängigkeitserkennung (plain-crypto-js), plattformübergreifende RAT-Payload-Erkennung |
97
- | 🔏 | **Provenance-Prüfpfad** | Aureus-Elicitor v1.7-Framework - HMAC-SHA256-signierte Erkennungsmanifeste, inhaltshash-verifizierte Prüfpfade, Regel-Provenance-URLs, Kampagnenquellenattribution |
98
- | 📦 | **SBOM-Generierung** | CycloneDX 1.5 und SPDX 2.3 mit eingebetteten Ergebnissen als Schwachstellen |
99
- | 🧾 | **Compliance-Berichte** | NIST SP 800-161-Rückverfolgbarkeitsmatrix + EU Cyber Resilience Act-Zuordnung (kostenlos) |
100
- | 🔌 | **SIEM-Export** | Splunk CEF, Elastic ECS, Microsoft Sentinel, IBM QRadar-Formate (Premium) |
101
- | 📜 | **Policy-as-Code** | YAML/JSON-Policy-Engine mit Whitelists, Schweregrad-Überschreibungen, Unterdrückungen und Fehlerschwellen |
102
- | 🐳 | **Docker + GitHub Action** | Multi-Arch-Images, Ein-Befehl-Compose-Pipeline, PR-Scan-Action |
103
- | 🛡️ | **Null Telemetrie** | Keine Daten verlassen Ihren Rechner. Keine Cloud. Keine Rückrufe. |
104
- | 💾 | **Lokaler Scan-Verlauf** | SQLite-basierte Persistenz, keine externen Abhängigkeiten |
105
-
106
- ---
107
-
108
- ## ⚡ Schnellstart
109
-
110
- ```bash
111
- # Global installieren
112
- npm install -g @lateos/npm-scan
113
-
114
- # Ein einzelnes Paket scannen
115
- npm-scan scan lodash
116
-
117
- # Ihre Lock-Datei scannen
118
- npm-scan scan-lockfile
119
-
120
- # Letzte Scans anzeigen
121
- npm-scan report
122
- ```
123
-
124
- **Keine Installation? Kein Problem:**
125
-
126
- ```bash
127
- npx @lateos/npm-scan scan commander
128
- ```
129
-
130
- ---
131
-
132
- ## 🐳 @lateos/npm-scan überall mit Docker ausführen — keine Installation
133
-
134
- ```bash
135
- # Einmaligen Scan pullen und ausführen — kein Node.js oder npm erforderlich
136
- docker run --rm lateos/npm-scan:cli scan lodash
137
-
138
- # Vollständige Pipeline mit persistentem Speicher und Compose
139
- docker compose --profile pipeline up -d
140
- ```
141
-
142
- Kein Node.js. Kein `npm install`. Keine globalen Pakete. Funktioniert auf jedem System mit Docker — CI-Server, Air-Gapped-Umgebungen, Kubernetes-Cluster. Multi-Arch-Images für `linux/amd64` und `linux/arm64`.
143
-
144
- ---
145
-
146
- ## 🛡️ Behörden- & SOC 2-bereit
147
-
148
- | Funktion | SOC 2-Kontrollen | NIST 800-161 | STIG/FedRAMP-Ausrichtung |
149
- |----------|-------|--------------|--------------|
150
- | Audit-Protokolle (--audit-log) | CC6.8 | AU-2 | ✓ |
151
- | FIPS-Krypto (--fips) | CC6.1 | SC-13 | ✓ |
152
- | STIG-Bericht (--stig) | CC7.3 | RA-5 | ✓ |
153
- | Offline-Cache (--cache-dir) | A1.2 | SC-8 | ✓ |
154
- | Sigstore-Herleitung | CC6.2 | SI-7 | ✓ |
155
- | SBOM (SPDX/CycloneDX) | CC7.4 | SA-10 | ✓ |
156
-
157
- ```bash
158
- # Vollständig konformer Scan in luftdichten Umgebungen
159
- npm-scan scan-lockfile --cache-dir /offline/cache --audit-log /var/log/npm-scan.audit --fips
160
- npm-scan report --stig
161
- ```
162
-
163
- ---
164
-
165
- ## 📖 Verwendungsbeispiele
166
-
167
- ### Ein einzelnes Paket scannen
168
-
169
- ```bash
170
- # Standard-JSON-Ausgabe mit allen Ergebnissen
171
- npm-scan scan axios
172
-
173
- # SBOM zusammen mit dem Scan generieren
174
- npm-scan scan express --sbom # CycloneDX JSON
175
- npm-scan scan express --sbom xml # CycloneDX XML
176
- npm-scan scan express --sbom spdx # SPDX 2.3
177
-
178
- # Eine YAML-Policy anwenden
179
- npm-scan scan some-package --policy .npm-scan.yml
180
-
181
- # Lokales Tarball scannen (kein Registry-Abruf nötig)
182
- npm-scan scan --file path/to/malicious-package.tgz
183
- ```
184
-
185
- ### Eine Lock-Datei scannen
186
-
187
- ```bash
188
- # Die Abhängigkeiten des aktuellen Projekts scannen
189
- npm-scan scan-lockfile
190
-
191
- # Eine bestimmte Lock-Datei scannen
192
- npm-scan scan-lockfile -f ./path/to/package-lock.json
193
-
194
- # CI/CD bei hohen oder kritischen Problemen fehlschlagen (Exit-Code 1)
195
- npm-scan scan-lockfile --fail-on high
196
-
197
- # Bei allen Erkenntnissen fehlschlagen (low und höher)
198
- npm-scan scan-lockfile --fail-on low
199
-
200
- # SARIF v2.1-Ausgabe für GitHub Advanced Security / VS Code generieren
201
- npm-scan scan-lockfile --sarif results.sarif
202
-
203
- # Nur Risiko-Score ausgeben (0-10) für Dashboards/Schwellenwerte
204
- npm-scan scan-lockfile --score-only
205
- ```
206
-
207
- ### Berichte generieren
208
-
209
- ```bash
210
- # Alle letzten Scans auflisten
211
- npm-scan report
212
-
213
- # Einen bestimmten Scan anzeigen
214
- npm-scan report -i 42
215
-
216
- # HTML-Bericht (kostenlos) mit vollständigen Ergebnissen + NIST-Tabelle
217
- npm-scan report -i 42 --html
218
-
219
- # NIST 800-161-Compliance-Tabelle ausgeben
220
- npm-scan report -i 42 --nist
221
-
222
- # EU-CRA-Compliance-Tabelle ausgeben
223
- npm-scan report --cra
224
-
225
- # CSV-Export für Excel / Sheets (audit-bereit)
226
- npm-scan report --csv risks.csv
227
- npm-scan scan lodash --csv # CSV nach stdout
228
-
229
- # Textbericht (kostenlos)
230
- npm-scan report --text
231
-
232
- # PDF-Bericht (Premium)
233
- npm-scan report --pdf --license-key <key>
234
-
235
- # SIEM-Export (Premium)
236
- npm-scan report --siem cef # Splunk CEF
237
- npm-scan report --siem ecs # Elastic ECS
238
- npm-scan report --siem sentinel # Microsoft Sentinel
239
- npm-scan report --siem qradar # IBM QRadar
240
-
241
- # Alle Scans in einem einzigen Bericht zusammenfassen
242
- npm-scan report --html # alle Scans
243
- npm-scan report --pdf # alle Scans (Premium)
244
- ```
245
-
246
- ---
247
-
248
- ## 🧬 Erkennungsfähigkeiten (ATK-Taxonomie)
249
-
250
- | ID | Angriffsklasse | Erkennungsmethode | Schweregrad | NIST 800-161 |
251
- |---|---|---|---|---|
252
- | **ATK-001** | Böswillige Lebenszyklus-Skripte (`preinstall`, `postinstall`, `install`) | Statisch | 🔴 hoch | SR-3.1 |
253
- | **ATK-002** | Obfuskierte Payload-Zustellung (hex, base64, eval-Ketten) | Statisch | 🟠 mittel | SR-4.2 |
254
- | **ATK-003** | Credential-Diebstahl (Umgebungsvariablen, .npmrc, SSH-Schlüssel) | Statisch + Dynamisch | 🔴 hoch | SR-5.3 |
255
- | **ATK-004** | Persistenz über Editor-/Konfigurationsverzeichnisse (.vscode, .claude, .cursor) | Statisch | 🔴 hoch | SR-6.4 |
256
- | **ATK-005** | Netzwerk-Exfiltration (GitHub-API, DNS-Tunneling, HTTP C2) | Statisch + Dynamisch | ⚫ kritisch | SR-7.5 |
257
- | **ATK-006** | Abhängigkeitsverwirrung / Namespace-Squatting | Statisch (Lock-Datei) | 🟠 mittel | SR-2.2 |
258
- | **ATK-007** | Typosquatting (Edit-Distanz-Matching) | Statisch | 🟢 niedrig | SR-2.1 |
259
- | **ATK-008** | Tarball-Manipulation (veröffentlicht ≠ Quelle) | Statisch | 🔴 hoch | SR-8.1 |
260
- | **ATK-009** | Bedingte/schlafende Auslöser (CI-Erkennung, zeitbasiert) | Verhaltensbasiert | 🔴 hoch | SR-9.2 |
261
- | **ATK-010** | Sandbox-Evasion / Anti-Analyse | Verhaltensbasiert | 🟠 mittel | SR-10.3 |
262
- | **ATK-011** | Transitive Verbreitung (wurmartige laterale Ausbreitung) | Verhaltensbasiert | 🔴 hoch | SR-11.4 |
263
- | **CVE-2026-48710** | BadHost — Starlette Authentifizierungs-Bypass via Host-Header-Injection (CVE-2026-48710, CVSS 7.0). Python-Abhängigkeitsversionserkennung (requirements.txt, pyproject.toml, poetry.lock, Pipfile, setup.py/cfg), transitive Heuristik (15 bekannte Downstream-Pakete: fastapi, vllm, litellm, MCP-Server, etc.), statische Code-Pattern-Analyse für gefährliche `request.url.path`-Nutzung in Auth/Middleware-Kontexten mit `request.scope["path"]`-Unterdrückung | Statisch + Registry | 🔴 hoch / 🟠 mittel / ℹ️ info | SR-3.1, SR-5.3 |
264
- | **TRAPDOOR** | TrapDoor plattformübergreifende Angriffskampagne — Kampagnenmarker P-2024-001, trap-core.js-Payload-Fingerprint, Publisher-Blocklist asdxzxc, Gist-basierter Credential-Exfil, KI-Kontextvergiftung (Zero-Width-Unicode), Crypto/DeFi-Locknamen, Fernet+ECDH-Verschlüsselung, XOR-Key cargo-build-helper-2026, STS/GitHub-API-Validierung | Statisch + Registry | 🟠 mittel / 🔴 hoch / ⚫ kritisch | SR-3.1, SR-5.3, SR-7.5 |
265
- | **NODE_IPC_COMPROMISE** | node-ipc Supply-Chain-Kompromittierung (14. Mai 2026) — Versions-Blocklist (9.1.6/9.2.3/12.0.1) mit sicheren Pins, Tarball-SHA-256-Verifikation, CJS-Payload-IIFE-Injektion, DNS-over-nicht-Standard-Port-C2, Bootstrap-Resolver sh.azurestaticprovider.net, DNS-TXT-Exfiltrationszone bt.node.js, setImmediate()-Laufzeitauslöser, ~/nt-*/ Staging-Artefakte, unbefugter Publisher atiertant, Lockfile-Blastradius | Statisch + Registry | ⚫ kritisch | SR-3.1, SR-5.3, SR-7.5 |
266
- | **MSH_SUPPLEMENT** | Mini Shai-Hulud-Ergänzung - ctf-scramble-v2-Obfuskation (STOP bei Treffer), dämonisierte Persistenz, geografischer Killswitch (ru_RU/be_BY), C2-Dead-Drop-Indikatoren (OhNoWhatsGoingOnWithGitHub) | Statisch + Verhalten | ⚫ kritisch | SR-3.1, SR-7.5, SR-9.2 |
267
- | **TYPOSQUAT_VPMDHAJ** | Massen-Typosquatting-Kampagne (vpmdhaj) - Maintainer-Blocklist (STOP bei Treffer), vpmdhaj-*-Namespace-Präfixerkennung, Levenshtein-Typosquatting, Preinstall-Stager, Cloud-Credential-Exfiltration (AWS IMDSv2, ECS, Vault, GitHub) | Statisch + Registry | ⚫ kritisch | SR-2.1, SR-3.1, SR-5.3 |
268
- | **AXIOS_POISONING** | Axios-Registry-Vergiftung - Versions-Blocklist (1.14.1/0.30.4, STOP bei Treffer), Decoy-Abhängigkeitsinjektion (plain-crypto-js), plattformübergreifende RAT-Payload-Erkennung (PowerShell, launchd, systemd, DLL, C2) | Statisch + Verhalten | ⚫ kritisch | SR-3.1, SR-5.3, SR-7.5 |
269
-
270
- > **Wie ausweichende Angriffe erkannt werden:** ATK-009 erkennt Pakete, die `process.env.CI` prüfen, Hostnamen sondieren oder zeitbasierte Aktivierung verwenden. ATK-010 markiert `debugger`-Anweisungen, `os.hostname()`-Sonden und Umgebungs-Fingerprinting. ATK-011 verfolgt Peer-Abhängigkeitsgraphen, um wurmartige Verbreitungsmuster zu erkennen.
271
- > Vollständige Dokumentation der Ausweichfläche und PoC-Beispiele finden Sie in [`docs/attack-taxonomy.md`](docs/attack-taxonomy.md).
272
-
273
- ---
274
-
275
- ## 📊 Ausgaben und Berichte
276
-
277
- ### Formate
278
-
279
- | Format | Verfügbarkeit | Beschreibung |
280
- |--------|-------------|-------------|
281
- | JSON | ✅ Kostenlos | Strukturierte maschinenlesbare Ergebnisse |
282
- | HTML | ✅ Kostenlos | Reichhaltiger HTML-Bericht mit NIST-Compliance-Tabelle, Schweregrad-Abzeichen, Kontrollmatrix |
283
- | Text | ✅ Kostenlos | Sauberer, terminalfreundlicher Textbericht |
284
- | CycloneDX SBOM | ✅ Kostenlos | Branchenstandard-SBOM mit Ergebnissen als Schwachstellen eingebettet |
285
- | SPDX SBOM | ✅ Kostenlos | SPDX 2.3-Dokumentformat |
286
- | NIST 800-161 | ✅ Kostenlos | Kontroll-Rückverfolgbarkeitsmatrix (SR-2.1 → SR-11.4) |
287
- | EU CRA | ✅ Kostenlos | Zuordnung der Cyber Resilience Act-Artikel |
288
- | PDF | 🔐 Premium | Mehrseitiges PDF mit Titelseite, Ergebnistabelle, NIST-Compliance-Matrix |
289
- | Splunk CEF | 🔐 Premium | Common Event Format für Splunk-Erfassung |
290
- | Elastic ECS | 🔐 Premium | Elastic Common Schema-Format |
291
- | Microsoft Sentinel | 🔐 Premium | Sentinel-ready formatierte Ausgabe |
292
- | IBM QRadar | 🔐 Premium | QRadar-DSM-ready-Format mit QID-Zuordnungen |
293
-
294
- ### Beispielausgabe
295
-
296
- ```json
297
- {
298
- "scanId": 1,
299
- "findings": [
300
- {
301
- "id": "ATK-003",
302
- "severity": "high",
303
- "title": "Credential harvesting",
304
- "evidence": "process.env.NPM_TOKEN detected in postinstall.js:17"
305
- }
306
- ]
307
- }
308
- ```
309
-
310
- ---
311
-
312
- ## ⚙️ Konfiguration und erweiterte Nutzung
313
-
314
- ### Policy-as-Code
315
-
316
- Definieren Sie Whitelists, Schweregrad-Überschreibungen, Unterdrückungen und Fehlerschwellen in einer YAML-Datei:
317
-
318
- ```yaml
319
- # .npm-scan.yml
320
- allowlist:
321
- - lodash
322
- - chalk
323
-
324
- severity_overrides:
325
- - id: ATK-001
326
- severity: medium
327
-
328
- suppress:
329
- - atk_id: ATK-009
330
- - package: some-package
331
-
332
- fail_on: high
333
- ```
334
-
335
- ```bash
336
- npm-scan scan target --policy .npm-scan.yml
337
- ```
338
-
339
- ### Umgebungsvariablen
340
-
341
- | Variable | Beschreibung | Standard |
342
- |----------|-------------|---------|
343
- | `NPM_SCAN_LICENSE_KEY` | Premium-/Enterprise-Lizenzschlüssel | — |
344
- | `NPM_SCAN_DATA_DIR` | Scan-Verlaufsverzeichnis | `./.npm-scan` |
345
- | `NPM_SCAN_LOG_LEVEL` | Ausführlichkeitsgrad der Protokollierung | `info` |
346
-
347
- ### Premium-Lizenzierung
348
-
349
- Kontaktieren Sie leo@lateos.ai, um einen Premium/Enterprise-Lizenzschlüssel zu erhalten.
350
-
351
- ```bash
352
- # Verwenden
353
- npm-scan scan target --license-key <key>
354
- npm-scan report --pdf --license-key <key>
355
- npm-scan report --siem cef --license-key <key>
356
- ```
357
-
358
- ---
359
-
360
- ## 🔗 Integrationen
361
-
362
- ### GitHub Actions CI (für dieses Repository)
363
-
364
- Jeder Push und PR führt Tests auf Node 18, 20 und 22 aus:
365
-
366
- ```yaml
367
- # .github/workflows/ci.yml
368
- name: CI
369
- on:
370
- push:
371
- branches: [ main ]
372
- pull_request:
373
- branches: [ main ]
374
- jobs:
375
- test:
376
- runs-on: ubuntu-latest
377
- strategy:
378
- matrix:
379
- node-version: [18, 20, 22]
380
- steps:
381
- - uses: actions/checkout@v4
382
- - uses: actions/setup-node@v4
383
- with:
384
- node-version: ${{ matrix.node-version }}
385
- cache: 'npm'
386
- - run: npm ci
387
- - run: npm test
388
- - run: npm run test:coverage
389
- - run: node --test test/detectors-corpus.test.js
390
- - run: npm run lint
391
- - run: npm run build
392
- ```
393
-
394
- ### GitHub Action (für nachgelagerte Benutzer)
395
-
396
- Scannen Sie die `package-lock.json` Ihres Projekts bei jedem PR — erkennt Typosquatting, obfuskierte Payloads, Credential-Stealer und Wurmverbreitung, bevor sie die Produktion erreichen:
397
-
398
- ```yaml
399
- # .github/workflows/scan.yml
400
- name: npm-scan
401
- on:
402
- pull_request:
403
- paths:
404
- - 'package-lock.json'
405
- - '**/package.json'
406
- jobs:
407
- scan:
408
- runs-on: ubuntu-latest
409
- steps:
410
- - uses: actions/checkout@v4
411
- - uses: actions/setup-node@v4
412
- with:
413
- node-version: 20
414
- - name: Scan lockfile
415
- uses: lateos/npm-scan@v1
416
- with:
417
- scan-type: lockfile
418
- fail-on: high
419
- ```
420
-
421
- #### Action-Eingaben
422
-
423
- | Eingabe | Standard | Beschreibung |
424
- |-------|---------|-------------|
425
- | `scan-type` | `lockfile` | `lockfile` zum Scannen von `package-lock.json` oder `package` zum Scannen eines bestimmten npm-Pakets |
426
- | `package` | — | Paketname (erforderlich bei `scan-type=package`) |
427
- | `fail-on` | `high` | Workflow bei diesem Schweregrad-Schwellwert fehlschlagen lassen: `none`, `low`, `medium`, `high`, `critical` |
428
- | `policy-file` | — | Pfad zu einer YAML/JSON-Policy-Datei für Whitelists, Schweregrad-Überschreibungen und Unterdrückungen |
429
- | `license-key` | — | Premium-Lizenzschlüssel für SIEM-Export und PDF-Berichte |
430
- | `siem-format` | — | SIEM-Ausgabe: `cef`, `ecs`, `sentinel`, `qradar` (Premium) |
431
- | `sbom-format` | — | SBOM-Ausgabe: `json`, `xml`, `spdx` |
432
-
433
- #### Action-Ausgaben
434
-
435
- | Ausgabe | Beschreibung |
436
- |--------|-------------|
437
- | `findings-count` | Anzahl der erkannten Ergebnisse |
438
- | `scan-id` | Scan-ID für spätere Referenz in Berichten |
439
-
440
- #### Beispiel: Bestimmtes Paket mit Policy + SBOM scannen
441
-
442
- ```yaml
443
- - uses: lateos/npm-scan@v1
444
- with:
445
- scan-type: package
446
- package: lodash
447
- policy-file: .npm-scan.yml
448
- sbom-format: spdx
449
- fail-on: critical
450
- ```
451
-
452
- #### Beispiel: Mit SIEM-Export scannen (Premium)
453
-
454
- ```yaml
455
- - uses: lateos/npm-scan@v1
456
- with:
457
- scan-type: lockfile
458
- siem-format: cef
459
- license-key: ${{ secrets.NPM_SCAN_LICENSE_KEY }}
460
- ```
461
-
462
- ### CI/CD-Pipeline
463
-
464
- Direkte Integration in Ihre bestehende Pipeline ohne die Composite-Action:
465
-
466
- ```bash
467
- # Lock-Datei scannen, Build bei hohem Schweregrad fehlschlagen lassen
468
- npm-scan scan-lockfile --policy .npm-scan.yml || exit 1
469
-
470
- # Bestimmtes Paket scannen, nur bei kritisch fehlschlagen
471
- npm-scan scan lodash --policy .npm-scan.yml || exit 1
472
-
473
- # SBOM als Build-Artefakt generieren
474
- npm-scan scan express --sbom spdx > express-sbom.spdx.json
475
-
476
- # HTML-Compliance-Bericht in CI generieren
477
- npm-scan report --html > report.html
478
-
479
- # Bericht als Artefakt hochladen
480
- # uses: actions/upload-artifact@v4
481
- # with:
482
- # name: npm-scan-report
483
- # path: report.html
484
- ```
485
-
486
- ### Docker
487
-
488
- Siehe den obigen [Docker-Schnellstart-Abschnitt](#-lateosnpm-scan-überall-mit-docker-ausführen--keine-installation) für Pull-Befehle, Compose-Pipeline und Multi-Arch-Images.
489
-
490
- Scannen Sie die `package-lock.json` Ihres Projekts bei jedem PR — erkennt Typosquatting, obfuskierte Payloads, Credential-Stealer und Wurmverbreitung, bevor sie die Produktion erreichen:
491
-
492
- ```yaml
493
- # .github/workflows/scan.yml
494
- name: npm-scan
495
- on:
496
- pull_request:
497
- paths:
498
- - 'package-lock.json'
499
- - '**/package.json'
500
- jobs:
501
- scan:
502
- runs-on: ubuntu-latest
503
- steps:
504
- - uses: actions/checkout@v4
505
- - uses: actions/setup-node@v4
506
- with:
507
- node-version: 20
508
- - name: Scan lockfile
509
- uses: lateos/npm-scan@v1
510
- with:
511
- scan-type: lockfile
512
- fail-on: high
513
- ```
514
-
515
- #### Action-Eingaben
516
-
517
- | Eingabe | Standard | Beschreibung |
518
- |-------|---------|-------------|
519
- | `scan-type` | `lockfile` | `lockfile` zum Scannen von `package-lock.json` oder `package` zum Scannen eines bestimmten npm-Pakets |
520
- | `package` | — | Paketname (erforderlich bei `scan-type=package`) |
521
- | `fail-on` | `high` | Workflow bei diesem Schweregrad-Schwellwert fehlschlagen lassen: `none`, `low`, `medium`, `high`, `critical` |
522
- | `policy-file` | — | Pfad zu einer YAML/JSON-Policy-Datei für Whitelists, Schweregrad-Überschreibungen und Unterdrückungen |
523
- | `license-key` | — | Premium-Lizenzschlüssel für SIEM-Export und PDF-Berichte |
524
- | `siem-format` | — | SIEM-Ausgabe: `cef`, `ecs`, `sentinel`, `qradar` (Premium) |
525
- | `sbom-format` | — | SBOM-Ausgabe: `json`, `xml`, `spdx` |
526
-
527
- #### Action-Ausgaben
528
-
529
- | Ausgabe | Beschreibung |
530
- |--------|-------------|
531
- | `findings-count` | Anzahl der erkannten Ergebnisse |
532
- | `scan-id` | Scan-ID für spätere Referenz in Berichten |
533
-
534
- #### Beispiel: Bestimmtes Paket mit Policy + SBOM scannen
535
-
536
- ```yaml
537
- - uses: lateos/npm-scan@v1
538
- with:
539
- scan-type: package
540
- package: lodash
541
- policy-file: .npm-scan.yml
542
- sbom-format: spdx
543
- fail-on: critical
544
- ```
545
-
546
- #### Beispiel: Mit SIEM-Export scannen (Premium)
547
-
548
- ```yaml
549
- - uses: lateos/npm-scan@v1
550
- with:
551
- scan-type: lockfile
552
- siem-format: cef
553
- license-key: ${{ secrets.NPM_SCAN_LICENSE_KEY }}
554
- ```
555
-
556
- ### CI/CD-Pipeline
557
-
558
- Direkte Integration in Ihre bestehende Pipeline ohne die Composite-Action:
559
-
560
- ```bash
561
- # Lock-Datei scannen, Build bei hohem Schweregrad fehlschlagen lassen
562
- npm-scan scan-lockfile --policy .npm-scan.yml || exit 1
563
-
564
- # Bestimmtes Paket scannen, nur bei kritisch fehlschlagen
565
- npm-scan scan lodash --policy .npm-scan.yml || exit 1
566
-
567
- # SBOM als Build-Artefakt generieren
568
- npm-scan scan express --sbom spdx > express-sbom.spdx.json
569
-
570
- # HTML-Compliance-Bericht in CI generieren
571
- npm-scan report --html > report.html
572
-
573
- # Bericht als Artefakt hochladen
574
- # uses: actions/upload-artifact@v4
575
- # with:
576
- # name: npm-scan-report
577
- # path: report.html
578
- ```
579
-
580
- ### Docker
581
-
582
- Siehe den obigen [Docker-Schnellstart-Abschnitt](#-lateosnpm-scan-überall-mit-docker-ausführen--keine-installation) für Pull-Befehle, Compose-Pipeline und Multi-Arch-Images.
583
-
584
- ---
585
-
586
- ## 🗺️ Roadmap und Enterprise-Funktionen
587
-
588
- ### Kostenlose Stufe (ausgeliefert)
589
-
590
- - Alle 11 ATK-Detektoren (statisch + verhaltensbasiert) + **MEGALODON** (D1-D6) + **HF_IMPERSONATION** + **MINI_SHAI_HULUD** (D1-D7, 3 Wellen, mit **MSH_SUPPLEMENT** D1-D4) + **VSIX_SCAN** (6 Detektoren) + **CVE-2026-48710 (BadHost)** (3 Ebenen) + **TRAPDOOR** (9 Regeln) + **NODE_IPC_COMPROMISE** (11 Regeln) + **TYPOSQUAT_VPMDHAJ** (3 Regeln) + **AXIOS_POISONING** (3 Regeln)
591
- - SBOM-Ausgabe (CycloneDX + SPDX)
592
- - HTML-, Text- und Compliance-Berichte (NIST + EU CRA)
593
- - Policy-as-Code-Engine (YAML)
594
- - Lokaler SQLite-Scan-Verlauf
595
- - GitHub Action
596
- - Docker-Images + Compose-Pipeline
597
-
598
- ### Premium (🔐 Lizenzschlüssel)
599
-
600
- - PDF-Compliance-Berichte mit NIST-Rückverfolgbarkeitsmatrix
601
- - SIEM-Export (Splunk CEF, Elastic ECS, Microsoft Sentinel, IBM QRadar)
602
- - Dynamische Sandbox (gVisor-basiert — ATK-008–010)
603
- - Erreichbarkeitsanalyse (Call-Graph-Filterung)
604
-
605
- ### Enterprise (🏢 benutzerdefinierte Lizenz)
606
-
607
- - SAML 2.0 SSO (Okta, Azure AD, OneLogin, Keycloak)
608
- - REST-API + Webhooks (FastAPI)
609
- - Team-RBAC + Audit-Logs
610
- - Helm-Chart für Kubernetes-Bereitstellung
611
- - PostgreSQL-Backend für gehostete/Team-Stufe
612
- - SLA-gestützter Prioritätssupport
613
-
614
- ---
615
-
616
- ## 🤝 Beitragen
617
-
618
- Wir begrüßen Beiträge — insbesondere neue Detektoren, verbesserte Ausweichresistenz und Compliance-Vorlagen.
619
-
620
- Siehe [`docs/attack-taxonomy.md`](docs/attack-taxonomy.md) für den ATK-Governance-Prozess. Jeder neue Detektor erfordert:
621
-
622
- 1. Ein Proof-of-Concept-Beispiel
623
- 2. Eine Erkennungsregel mit Tests
624
- 3. False-Positive-Analyse auf den Top-500-npm-Paketen
625
- 4. NIST 800-161-Control-Zuordnung
626
-
627
- ### Tests
628
-
629
- Das Projekt verwendet den **nativen Node.js-Test-Runner** (`node:test` + `assert/strict`).
630
-
631
- ```bash
632
- # Alle Tests ausführen
633
- npm test
634
-
635
- # Tests mit Codeabdeckung ausführen
636
- npm run test:coverage
637
-
638
- # Tests mit ausführlicher Ausgabe ausführen
639
- npm run test:verbose
640
-
641
- # Lokales bösartiges/sauberes Korpus ausführen (kein Netzwerk erforderlich)
642
- node --test test/detectors-corpus.test.js
643
- ```
644
-
645
- **Teststruktur:**
646
- - `test/fixtures/mock-data.js` — gemeinsam genutzte Mock-Scans, Pakete und Code-Snippets
647
- - `test/db.test.js` — Datenbank-CRUD (Speichern, Abfragen, Persistieren)
648
- - `test/detectors-edge-cases.test.js` — detektorspezifische Grenztests (No-Ops, saubere Bereinigung, Schweregrad)
649
- - `test/detectors-corpus.test.js` — 33 bösartige + 50 saubere Tarball-Integrationstests (offline)
650
- - `test/fetch.test.js` — Tarball-Extraktion, Bereinigung temporärer Verzeichnisse
651
- - `test/policy-edge-cases.test.js` — Grenzfälle bei Unterdrückung, Überschreibung, Ladevalidierung
652
- - `test/report-snapshots.test.js` — HTML/Text/CRA/PDF-Format-Assertions
653
- - `test/cve-2026-48710-badhost/manifest.test.js` — 13 Python-Manifest-Parsing-Tests (requirements.txt, pyproject.toml, poetry.lock, Version-Grenzfälle)
654
- - `test/cve-2026-48710-badhost/transitive.test.js` — 7 transitive Abhängigkeitstests (Tier 1/2, fastapi-Version-Gating, Pin-Unterdrückung)
655
- - `test/cve-2026-48710-badhost/codePattern.test.js` — 6 statische Code-Pattern-Tests (Auth-Kontext, INFO-Durchgriff, Scope-Unterdrückung)
656
- - `test/cve-2026-48710-badhost/integration.test.js` — 4 Integrationstests (End-to-End-Composite-Findings, sauberes Projekt, keine Python-Dateien)
657
- - `test/trapdoor.test.js` — 40 TrapDoor-Kampagnenerkennungstests (D1–D9: Kampagnenmarker, Payload-Fingerprint, Publisher-Blocklist, Gist-Exfil, KI-Vergiftung, Lockname, Krypto-Primitive, XOR-Key, Credential-Validierung)
658
- - `test/node-ipc.test.js` — 37 node-ipc-Kompromittierungstests (D1–D11: Versions-Blocklist, Tarball-Hash, CJS-Injektion, Payload-Hash, DNS-C2-Muster, Bootstrap-Resolver, DNS-TXT-Exfil, Laufzeitauslöser, Temp-Artefakte, unbefugter Publisher, Blastradius)
659
- - `test/msh-supplement.test.js` - 17 MSH-Ergänzungstests (ctf-scramble-v2-Stopp, Dämonisierung, geografischer Killswitch, C2-Dead-Drop)
660
- - `test/typosquat-vpmdhaj.test.js` - 16 Typosquatting-Kampagnentests (Maintainer-Block, Präfixerkennung, Levenshtein, Preinstall-Stager, Bun-Loader, AWS/ECS/Vault/GitHub-Cred-Exfil)
661
- - `test/axios-poisoning.test.js` - 13 Axios-Vergiftungstests (Versions-Blocklist-Stopp, Decoy-Abhängigkeit, Krypto-Heuristik, plattformübergreifender RAT, C2-Callback)
662
- - `test/cli.test.js` — Commander-Integrationstests (Hilfe, Version, Scan, Bericht, Fehlerbehandlung)
663
-
664
- ### Hilfe benötigt?
665
-
666
- - 🔒 Siehe [Sicherheitsrichtlinie](SECURITY.md) für die Offenlegung von Schwachstellen
667
- - 📖 Lesen Sie den [Projektplan](docs/project-plan.md)
668
- - 🧬 Überprüfen Sie die [Angriffstaxonomie](docs/attack-taxonomy.md)
669
- - 🐛 Öffnen Sie ein Issue oder PR
670
-
671
- ---
672
-
673
- ## 📄 Lizenz
674
-
675
- Apache-2.0 Core + Commons Clause.
676
- Siehe [`LICENSING.md`](LICENSING.md) für die genaue Grenze zwischen kostenlosen und Premium-Funktionen.
677
-
678
- ---
679
-
680
- ## 👤 Über den Maintainer
681
-
682
- **Roongrunchai Chongolnee** — Ersteller und Maintainer von `@lateos/npm-scan`. Zertifizierter Sicherheitsexperte (CISSP, CEH, Cisco Security, AWS Cloud Practitioner) mit einem Jahrzehnt Erfahrung in Infrastruktur- und Anwendungssicherheit bei Philips. Ich habe dieses Tool entwickelt, um der Open-Source-Community eine praktische, detektorgesteuerte Abwehr gegen Supply-Chain-Malware zu bieten — und ich bin bestrebt, es transparent, gemeinschaftseigen und kontinuierlich verbessert zu halten.
683
-
684
- [![LinkedIn](https://img.shields.io/badge/LinkedIn-0A66C2?style=flat-square&logo=linkedin)](https://www.linkedin.com/in/roongrunchai-chong-c-ab9742108/)
685
- [![GitHub](https://img.shields.io/badge/GitHub-lateos--ai-181717?style=flat-square&logo=github)](https://github.com/lateos-ai/npm-scan)
686
-
687
- Issues, Ideen und Pull-Requests sind immer willkommen — Sicherheit ist am stärksten, wenn wir zusammenarbeiten.
688
-
689
- ---
690
-
691
- ```
692
- @lateos/npm-scan — npm supply chain security scanner
693
- Copyright (C) 2026 Lateos
694
-
695
- Licensed under the Apache License, Version 2.0 (the "License");
696
- you may not use this file except in compliance with the License.
697
-
698
- Unless required by applicable law or agreed to in writing, software
699
- distributed under the License is distributed on an "AS IS" BASIS,
700
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
701
- ```
702
-
703
- ---
704
-
705
- **Scannen Sie Ihr erstes Paket jetzt:**
706
-
707
- ```bash
708
- npx @lateos/npm-scan scan lodash
1
+ # @lateos/npm-scan
2
+
3
+ [![English](https://img.shields.io/badge/lang-en-blue?style=flat-square)](https://github.com/lateos-ai/npm-scan/blob/main/README.md)
4
+ [![中文](https://img.shields.io/badge/lang-zh--CN-red?style=flat-square)](https://github.com/lateos-ai/npm-scan/blob/main/README.zh.md)
5
+ [![日本語](https://img.shields.io/badge/lang-ja-purple?style=flat-square)](https://github.com/lateos-ai/npm-scan/blob/main/README.ja.md)
6
+ [![Français](https://img.shields.io/badge/lang-fr-orange?style=flat-square)](https://github.com/lateos-ai/npm-scan/blob/main/README.fr.md)
7
+ [![Deutsch](https://img.shields.io/badge/lang-de-green?style=flat-square)](https://github.com/lateos-ai/npm-scan/blob/main/README.de.md)
8
+
9
+ [![npm version](https://img.shields.io/npm/v/@lateos/npm-scan?style=flat-square)](https://www.npmjs.com/package/@lateos/npm-scan)
10
+ [![License](https://img.shields.io/badge/license-Apache%202.0%20%2B%20Commons%20Clause-blue?style=flat-square)](LICENSING.md)
11
+ [![Node](https://img.shields.io/badge/node-%3E%3D18-brightgreen?style=flat-square)](package.json)
12
+ [![Tests](https://img.shields.io/badge/tests-459%20passing-brightgreen?style=flat-square)](https://github.com/lateos-ai/npm-scan)
13
+ [![Coverage](https://img.shields.io/badge/coverage-85%25-yellowgreen?style=flat-square)](https://github.com/lateos-ai/npm-scan)
14
+ [![Docker](https://img.shields.io/badge/docker-lateos%2Fnpm--scan-2496ED?style=flat-square&logo=docker)](https://hub.docker.com/r/lateos/npm-scan)
15
+ [![Sigstore](https://img.shields.io/static/v1?label=Sigstore&message=Provenance&color=green&style=flat-square&logo=sigstore)](https://github.com/lateos-ai/npm-scan/actions/workflows/publish.yml)
16
+
17
+ **Moderne Lieferkettensicherheit für das npm-Ökosystem.**
18
+ Statische + verhaltensbasierte Analyse, die erkennt, was npm audit, Snyk und Socket übersehen — obfuskierte Payloads, Credential-Stealer, bedingte Auslöser, Sandbox-Evasion und wurmartige Verbreitung.
19
+
20
+ ---
21
+
22
+ ## 📌 Das Problem
23
+
24
+ Die Welle von npm-Lieferkettenangriffen 2025-2026 hat bewiesen, dass herkömmliche Werkzeuge nicht mehr ausreichen.
25
+
26
+ Angreifer haben sich längst über einfaches Typosquatting hinausentwickelt. Sie liefern nun **obfuskierte Preinstall-Hooks**, **hinter Umgebungserkennung versteckte Credential-Stealer**, **schlafende Hintertüren mit zeitbasierter Aktivierung** und **wurmartige transitive Verbreitung**, die sich über Peer-Abhängigkeiten ausbreitet.
27
+
28
+ Die **Megalodon-Kampagne** (2026) kompromittierte allein über 5.500 Repositorys durch gefälschte GitHub-PRs, böswillige Workflow-Injektion und Cloud-Credential-Exfiltration - alles koordiniert durch einen einzelnen Akteur, der die gesamte Kill-Chain automatisierte. **@lateos/npm-scan** erkennt Artefakte dieser Kampagne jetzt standardmäßig.
29
+
30
+ Die **Mini Shai-Hulud-Wurm-Kampagne** (Mai 2026) traf das npm-Ökosystem in drei Wellen - TanStack CI/CD-Entführung (84 Artefakte in 6 Minuten), AntV/atool-Maintainer-Kompromittierung (600+ bösartige Versionen in 300+ Paketen) und Nx Console VS-Code-Erweiterungsvergiftung (CVE-2026-48027) - alle unter Verwendung von ctf-scramble-v2-Obfuskation, dämonisierter Persistenz mit CI-Umgebungsprüfungen, geografischen Killswitches gegen sanktionierte Regionen und GitHub-C2-Dead-Drop-Kanälen zur Token-Wiederherstellung. **@lateos/npm-scan** erkennt jetzt alle 10 Mini-Shai-Hulud-Signale über zwei Detektor-Suites.
31
+
32
+ Ein wachsender Angriffsvektor ist die **HuggingFace-Organisations-Identitätsdiebstahl**.
33
+
34
+ Die **TrapDoor-Kampagne** (Mai 2026) erstreckt sich über npm, PyPI und Crates.io.
35
+
36
+ Die **node-ipc-Kompromittierung** (14. Mai 2026) nutzte eine abgelaufene Maintainer-E-Mail-Domain aus.
37
+
38
+ Die **Massen-Typosquatting-Kampagne (vpmdhaj)** (Mai 2026) bewaffnete das npm-Maintainer-Konto `vpmdhaj`, um in einem 4-Stunden-Fenster 14 Typosquatting-Pakete zu veröffentlichen - mit Preinstall-Stagern, Bun-Laufzeitmissbrauch und Cloud-Credential-Exfiltration gegen AWS/CI/CD-Umgebungen. **@lateos/npm-scan** erkennt jetzt alle 3 Typosquatting-Kampagnensignale.
39
+
40
+ Die **Axios-Registry-Vergiftungskampagne** (Mai 2026) kompromittierte die npm-Registry-Metadaten des Axios-Pakets, um `axios@1.14.1` und `axios@0.30.4` mit injizierten Abhängigkeiten zu veröffentlichen, die plattformübergreifende RAT-Payloads enthielten. **@lateos/npm-scan** erkennt jetzt alle 3 Axios-Vergiftungssignale.
41
+
42
+ **npm audit** prüft bekannte CVEs. **Snyk** scannt nach Schwachstellen. **Socket** untersucht das Paketverhalten. Keines dieser Tools wurde für die Angriffsgeneration entwickelt, die 2025 auftrat.
43
+
44
+ **@lateos/npm-scan** wurde für diesen Moment entwickelt.
45
+
46
+ ---
47
+
48
+ ## 🔬 Warum @lateos/npm-scan?
49
+
50
+ | Fähigkeit | npm audit | Snyk | Socket | **@lateos/npm-scan** |
51
+ |---|---|---|---|---|
52
+ | Bekannte CVE-Übereinstimmung | ✅ | ✅ | ❌ | ✅ |
53
+ | Statische Analyse | ❌ | ✅ | ✅ | ✅ |
54
+ | Erkennung obfuskierter Payloads | ❌ | ❌ | ❌ | ✅ |
55
+ | AST-Level heuristische Analyse | ❌ | ❌ | ❌ | ✅ |
56
+ | Runtime-Verhaltenssandbox | ❌ | ❌ | ✅ | ✅ |
57
+ | Erkennung bedingter Auslöser (ATK-009) | ❌ | ❌ | ❌ | ✅ |
58
+ | Sandbox-Evasion-Erkennung (ATK-010) | ❌ | ❌ | ❌ | ✅ |
59
+ | Transitive Wurmverbreitung (ATK-011) | ❌ | ❌ | ❌ | ✅ |
60
+ | Kampagnenerkennung (Megalodon CI/CD) | ❌ | ❌ | ❌ | ✅ |
61
+ | Wurm-Kampagnenerkennung (Mini Shai-Hulud Welle 1-3) | ❌ | ❌ | ❌ | ✅ |
62
+ | HF-Modell-Repo-Identitätsdiebstahl + README-Klon | ❌ | ❌ | ❌ | ✅ |
63
+ | VS-Code-Erweiterungs-Supply-Chain-Scan (--vsix) | ❌ | ❌ | ❌ | ✅ |
64
+ | Python-Schwachstellenerkennung (CVE-2026-48710 BadHost) | ❌ | ❌ | ❌ | ✅ |
65
+ | Plattformübergreifende Angriffserkennung (TrapDoor) | ❌ | ❌ | ❌ | ✅ |
66
+ | Abgelaufene-Domain-Entführungserkennung (node-ipc) | ❌ | ❌ | ❌ | ✅ |
67
+ | Malware-Obfuskationserkennung (ctf-scramble-v2) | ❌ | ❌ | ❌ | ✅ |
68
+ | Massen-Typosquatting-Kampagne (vpmdhaj-Maintainer) | ❌ | ❌ | ❌ | ✅ |
69
+ | Registry-Vergiftungserkennung (axios-Fake-Versionen) | ❌ | ❌ | ❌ | ✅ |
70
+ | Angriffstaxonomie (ATK-Serie) | ❌ | ❌ | ❌ | ✅ |
71
+ | SBOM-Ausgabe (CycloneDX + SPDX) | ❌ | ✅ | ❌ | ✅ |
72
+ | NIST 800-161-Compliance-Bericht | ❌ | ❌ | ❌ | ✅ |
73
+ | EU-CRA-Compliance-Bericht | ❌ | ❌ | ❌ | ✅ |
74
+ | SIEM-Export (CEF / ECS / Sentinel / QRadar) | ❌ | ❌ | ❌ | ✅ |
75
+ | Vollständig lokale Ausführung — keine Telemetrie | ✅ | ❌ | ❌ | ✅ |
76
+ | Policy-as-Code (YAML-Whitelists) | ❌ | ❌ | ❌ | ✅ |
77
+
78
+ > **Datenschutz an erster Stelle.** Alle Scans erfolgen auf Ihrem Rechner. Kein Code verlässt Ihre Umgebung. Keine Telemetrie. Keine Cloud-Abhängigkeit.
79
+
80
+ ---
81
+
82
+ ## ✨ Hauptfunktionen
83
+
84
+ | Symbol | Funktion | Beschreibung |
85
+ |------|---------|-------------|
86
+ | 🕵️ | **Heuristische statische Analyse** | AST-Level-Inspektion erkennt Obfuskation, eval-Ketten, Umgebungsabfragen und verdächtige Lebenszyklus-Skripte, die regex-basierten Tools entgehen |
87
+ | 🧠 | **Verhaltenserkennung** | Identifiziert bedingte Auslöser (zeitbasiert, CI-bewusst), Sandbox-Evasion und schlafende Aktivierungsmuster |
88
+ | 🧬 | **ATK-Angriffstaxonomie** | 11 klassifizierte Angriffstypen mit NIST 800-161-Zuordnungen — versioniert, dokumentiert und PR-fähig |
89
+ | 🪱 | **Wurm-Kampagnenerkennung** | Mini Shai-Hulud - 10 Sub-Checks über 2 Suites: Burst-Publish, Sibling-Kompromittierung, SLSA-Attestierungsabweichung, Publisher-Drift, IOC-Match, Token-Exfil, ctf-scramble-v2-Obfuskation, dämonisierte Persistenz, geografischer Killswitch, GitHub-C2-Dead-Drop |
90
+ | 🧩 | **VSIX-Erweiterungsscan** | `npm-scan scan --vsix` - erkennt VS Code Marketplace Supply-Chain-Angriffe |
91
+ | 🐍 | **Python-Schwachstellenerkennung** | CVE-2026-48710 (BadHost) - Starlette Host-Header-Injection |
92
+ | 🪤 | **Plattformübergreifende Angriffserkennung** | TrapDoor - 9 Sub-Checks |
93
+ | 📡 | **Abgelaufene-Domain-Entführungserkennung** | node-ipc-Kompromittierung - 11 Sub-Checks |
94
+ | ☣️ | **Malware-Obfuskationserkennung** | ctf-scramble-v2 - scannt Paket-dist/lib nach bekannten Malware-Obfuskationsmustern, stoppt Analyse sofort mit CRITICAL-Stoppbedingung |
95
+ | 🎭 | **Massen-Typosquatting-Kampagnenerkennung** | vpmdhaj-Maintainer-Blocklist mit Stoppbedingung, Levenshtein-basierte Typosquatting-Erkennung, Preinstall-Stager-Identifikation, AWS-ECS/Vault/GitHub-Credential-Exfiltrationsmuster |
96
+ | ☠️ | **Registry-Vergiftungserkennung** | Axios-Versions-Blocklist (1.14.1/0.30.4) mit Stoppbedingung, Decoy-Abhängigkeitserkennung (plain-crypto-js), plattformübergreifende RAT-Payload-Erkennung |
97
+ | 🔏 | **Provenance-Prüfpfad** | Aureus-Elicitor v1.7-Framework - HMAC-SHA256-signierte Erkennungsmanifeste, inhaltshash-verifizierte Prüfpfade, Regel-Provenance-URLs, Kampagnenquellenattribution |
98
+ | 📦 | **SBOM-Generierung** | CycloneDX 1.5 und SPDX 2.3 mit eingebetteten Ergebnissen als Schwachstellen |
99
+ | 🧾 | **Compliance-Berichte** | NIST SP 800-161-Rückverfolgbarkeitsmatrix + EU Cyber Resilience Act-Zuordnung (kostenlos) |
100
+ | 🔌 | **SIEM-Export** | Splunk CEF, Elastic ECS, Microsoft Sentinel, IBM QRadar-Formate (Premium) |
101
+ | 📜 | **Policy-as-Code** | YAML/JSON-Policy-Engine mit Whitelists, Schweregrad-Überschreibungen, Unterdrückungen und Fehlerschwellen |
102
+ | 🐳 | **Docker + GitHub Action** | Multi-Arch-Images, Ein-Befehl-Compose-Pipeline, PR-Scan-Action |
103
+ | 🛡️ | **Null Telemetrie** | Keine Daten verlassen Ihren Rechner. Keine Cloud. Keine Rückrufe. |
104
+ | 💾 | **Lokaler Scan-Verlauf** | SQLite-basierte Persistenz, keine externen Abhängigkeiten |
105
+
106
+ ---
107
+
108
+ ## ⚡ Schnellstart
109
+
110
+ ```bash
111
+ # Global installieren
112
+ npm install -g @lateos/npm-scan
113
+
114
+ # Ein einzelnes Paket scannen
115
+ npm-scan scan lodash
116
+
117
+ # Ihre Lock-Datei scannen
118
+ npm-scan scan-lockfile
119
+
120
+ # Letzte Scans anzeigen
121
+ npm-scan report
122
+ ```
123
+
124
+ **Keine Installation? Kein Problem:**
125
+
126
+ ```bash
127
+ npx @lateos/npm-scan scan commander
128
+ ```
129
+
130
+ ---
131
+
132
+ ## 🐳 @lateos/npm-scan überall mit Docker ausführen — keine Installation
133
+
134
+ ```bash
135
+ # Einmaligen Scan pullen und ausführen — kein Node.js oder npm erforderlich
136
+ docker run --rm lateos/npm-scan:cli scan lodash
137
+
138
+ # Vollständige Pipeline mit persistentem Speicher und Compose
139
+ docker compose --profile pipeline up -d
140
+ ```
141
+
142
+ Kein Node.js. Kein `npm install`. Keine globalen Pakete. Funktioniert auf jedem System mit Docker — CI-Server, Air-Gapped-Umgebungen, Kubernetes-Cluster. Multi-Arch-Images für `linux/amd64` und `linux/arm64`.
143
+
144
+ ---
145
+
146
+ ## 🛡️ Behörden- & SOC 2-bereit
147
+
148
+ | Funktion | SOC 2-Kontrollen | NIST 800-161 | STIG/FedRAMP-Ausrichtung |
149
+ |----------|-------|--------------|--------------|
150
+ | Audit-Protokolle (--audit-log) | CC6.8 | AU-2 | ✓ |
151
+ | FIPS-Krypto (--fips) | CC6.1 | SC-13 | ✓ |
152
+ | STIG-Bericht (--stig) | CC7.3 | RA-5 | ✓ |
153
+ | Offline-Cache (--cache-dir) | A1.2 | SC-8 | ✓ |
154
+ | Sigstore-Herleitung | CC6.2 | SI-7 | ✓ |
155
+ | SBOM (SPDX/CycloneDX) | CC7.4 | SA-10 | ✓ |
156
+
157
+ ```bash
158
+ # Vollständig konformer Scan in luftdichten Umgebungen
159
+ npm-scan scan-lockfile --cache-dir /offline/cache --audit-log /var/log/npm-scan.audit --fips
160
+ npm-scan report --stig
161
+ ```
162
+
163
+ ---
164
+
165
+ ## 📖 Verwendungsbeispiele
166
+
167
+ ### Ein einzelnes Paket scannen
168
+
169
+ ```bash
170
+ # Standard-JSON-Ausgabe mit allen Ergebnissen
171
+ npm-scan scan axios
172
+
173
+ # SBOM zusammen mit dem Scan generieren
174
+ npm-scan scan express --sbom # CycloneDX JSON
175
+ npm-scan scan express --sbom xml # CycloneDX XML
176
+ npm-scan scan express --sbom spdx # SPDX 2.3
177
+
178
+ # Eine YAML-Policy anwenden
179
+ npm-scan scan some-package --policy .npm-scan.yml
180
+
181
+ # Lokales Tarball scannen (kein Registry-Abruf nötig)
182
+ npm-scan scan --file path/to/malicious-package.tgz
183
+ ```
184
+
185
+ ### Eine Lock-Datei scannen
186
+
187
+ ```bash
188
+ # Die Abhängigkeiten des aktuellen Projekts scannen
189
+ npm-scan scan-lockfile
190
+
191
+ # Eine bestimmte Lock-Datei scannen
192
+ npm-scan scan-lockfile -f ./path/to/package-lock.json
193
+
194
+ # CI/CD bei hohen oder kritischen Problemen fehlschlagen (Exit-Code 1)
195
+ npm-scan scan-lockfile --fail-on high
196
+
197
+ # Bei allen Erkenntnissen fehlschlagen (low und höher)
198
+ npm-scan scan-lockfile --fail-on low
199
+
200
+ # SARIF v2.1-Ausgabe für GitHub Advanced Security / VS Code generieren
201
+ npm-scan scan-lockfile --sarif results.sarif
202
+
203
+ # Nur Risiko-Score ausgeben (0-10) für Dashboards/Schwellenwerte
204
+ npm-scan scan-lockfile --score-only
205
+ ```
206
+
207
+ ### Berichte generieren
208
+
209
+ ```bash
210
+ # Alle letzten Scans auflisten
211
+ npm-scan report
212
+
213
+ # Einen bestimmten Scan anzeigen
214
+ npm-scan report -i 42
215
+
216
+ # HTML-Bericht (kostenlos) mit vollständigen Ergebnissen + NIST-Tabelle
217
+ npm-scan report -i 42 --html
218
+
219
+ # NIST 800-161-Compliance-Tabelle ausgeben
220
+ npm-scan report -i 42 --nist
221
+
222
+ # EU-CRA-Compliance-Tabelle ausgeben
223
+ npm-scan report --cra
224
+
225
+ # CSV-Export für Excel / Sheets (audit-bereit)
226
+ npm-scan report --csv risks.csv
227
+ npm-scan scan lodash --csv # CSV nach stdout
228
+
229
+ # Textbericht (kostenlos)
230
+ npm-scan report --text
231
+
232
+ # PDF-Bericht (Premium)
233
+ npm-scan report --pdf --license-key <key>
234
+
235
+ # SIEM-Export (Premium)
236
+ npm-scan report --siem cef # Splunk CEF
237
+ npm-scan report --siem ecs # Elastic ECS
238
+ npm-scan report --siem sentinel # Microsoft Sentinel
239
+ npm-scan report --siem qradar # IBM QRadar
240
+
241
+ # Alle Scans in einem einzigen Bericht zusammenfassen
242
+ npm-scan report --html # alle Scans
243
+ npm-scan report --pdf # alle Scans (Premium)
244
+ ```
245
+
246
+ ---
247
+
248
+ ## 🧬 Erkennungsfähigkeiten (ATK-Taxonomie)
249
+
250
+ | ID | Angriffsklasse | Erkennungsmethode | Schweregrad | NIST 800-161 |
251
+ |---|---|---|---|---|
252
+ | **ATK-001** | Böswillige Lebenszyklus-Skripte (`preinstall`, `postinstall`, `install`) | Statisch | 🔴 hoch | SR-3.1 |
253
+ | **ATK-002** | Obfuskierte Payload-Zustellung (hex, base64, eval-Ketten) | Statisch | 🟠 mittel | SR-4.2 |
254
+ | **ATK-003** | Credential-Diebstahl (Umgebungsvariablen, .npmrc, SSH-Schlüssel) | Statisch + Dynamisch | 🔴 hoch | SR-5.3 |
255
+ | **ATK-004** | Persistenz über Editor-/Konfigurationsverzeichnisse (.vscode, .claude, .cursor) | Statisch | 🔴 hoch | SR-6.4 |
256
+ | **ATK-005** | Netzwerk-Exfiltration (GitHub-API, DNS-Tunneling, HTTP C2) | Statisch + Dynamisch | ⚫ kritisch | SR-7.5 |
257
+ | **ATK-006** | Abhängigkeitsverwirrung / Namespace-Squatting | Statisch (Lock-Datei) | 🟠 mittel | SR-2.2 |
258
+ | **ATK-007** | Typosquatting (Edit-Distanz-Matching) | Statisch | 🟢 niedrig | SR-2.1 |
259
+ | **ATK-008** | Tarball-Manipulation (veröffentlicht ≠ Quelle) | Statisch | 🔴 hoch | SR-8.1 |
260
+ | **ATK-009** | Bedingte/schlafende Auslöser (CI-Erkennung, zeitbasiert) | Verhaltensbasiert | 🔴 hoch | SR-9.2 |
261
+ | **ATK-010** | Sandbox-Evasion / Anti-Analyse | Verhaltensbasiert | 🟠 mittel | SR-10.3 |
262
+ | **ATK-011** | Transitive Verbreitung (wurmartige laterale Ausbreitung) | Verhaltensbasiert | 🔴 hoch | SR-11.4 |
263
+ | **CVE-2026-48710** | BadHost — Starlette Authentifizierungs-Bypass via Host-Header-Injection (CVE-2026-48710, CVSS 7.0). Python-Abhängigkeitsversionserkennung (requirements.txt, pyproject.toml, poetry.lock, Pipfile, setup.py/cfg), transitive Heuristik (15 bekannte Downstream-Pakete: fastapi, vllm, litellm, MCP-Server, etc.), statische Code-Pattern-Analyse für gefährliche `request.url.path`-Nutzung in Auth/Middleware-Kontexten mit `request.scope["path"]`-Unterdrückung | Statisch + Registry | 🔴 hoch / 🟠 mittel / ℹ️ info | SR-3.1, SR-5.3 |
264
+ | **TRAPDOOR** | TrapDoor plattformübergreifende Angriffskampagne — Kampagnenmarker P-2024-001, trap-core.js-Payload-Fingerprint, Publisher-Blocklist asdxzxc, Gist-basierter Credential-Exfil, KI-Kontextvergiftung (Zero-Width-Unicode), Crypto/DeFi-Locknamen, Fernet+ECDH-Verschlüsselung, XOR-Key cargo-build-helper-2026, STS/GitHub-API-Validierung | Statisch + Registry | 🟠 mittel / 🔴 hoch / ⚫ kritisch | SR-3.1, SR-5.3, SR-7.5 |
265
+ | **NODE_IPC_COMPROMISE** | node-ipc Supply-Chain-Kompromittierung (14. Mai 2026) — Versions-Blocklist (9.1.6/9.2.3/12.0.1) mit sicheren Pins, Tarball-SHA-256-Verifikation, CJS-Payload-IIFE-Injektion, DNS-over-nicht-Standard-Port-C2, Bootstrap-Resolver sh.azurestaticprovider.net, DNS-TXT-Exfiltrationszone bt.node.js, setImmediate()-Laufzeitauslöser, ~/nt-*/ Staging-Artefakte, unbefugter Publisher atiertant, Lockfile-Blastradius | Statisch + Registry | ⚫ kritisch | SR-3.1, SR-5.3, SR-7.5 |
266
+ | **MSH_SUPPLEMENT** | Mini Shai-Hulud-Ergänzung - ctf-scramble-v2-Obfuskation (STOP bei Treffer), dämonisierte Persistenz, geografischer Killswitch (ru_RU/be_BY), C2-Dead-Drop-Indikatoren (OhNoWhatsGoingOnWithGitHub) | Statisch + Verhalten | ⚫ kritisch | SR-3.1, SR-7.5, SR-9.2 |
267
+ | **TYPOSQUAT_VPMDHAJ** | Massen-Typosquatting-Kampagne (vpmdhaj) - Maintainer-Blocklist (STOP bei Treffer), vpmdhaj-*-Namespace-Präfixerkennung, Levenshtein-Typosquatting, Preinstall-Stager, Cloud-Credential-Exfiltration (AWS IMDSv2, ECS, Vault, GitHub) | Statisch + Registry | ⚫ kritisch | SR-2.1, SR-3.1, SR-5.3 |
268
+ | **AXIOS_POISONING** | Axios-Registry-Vergiftung - Versions-Blocklist (1.14.1/0.30.4, STOP bei Treffer), Decoy-Abhängigkeitsinjektion (plain-crypto-js), plattformübergreifende RAT-Payload-Erkennung (PowerShell, launchd, systemd, DLL, C2) | Statisch + Verhalten | ⚫ kritisch | SR-3.1, SR-5.3, SR-7.5 |
269
+
270
+ > **Wie ausweichende Angriffe erkannt werden:** ATK-009 erkennt Pakete, die `process.env.CI` prüfen, Hostnamen sondieren oder zeitbasierte Aktivierung verwenden. ATK-010 markiert `debugger`-Anweisungen, `os.hostname()`-Sonden und Umgebungs-Fingerprinting. ATK-011 verfolgt Peer-Abhängigkeitsgraphen, um wurmartige Verbreitungsmuster zu erkennen.
271
+ > Vollständige Dokumentation der Ausweichfläche und PoC-Beispiele finden Sie in [`docs/attack-taxonomy.md`](docs/attack-taxonomy.md).
272
+
273
+ ---
274
+
275
+ ## 📊 Ausgaben und Berichte
276
+
277
+ ### Formate
278
+
279
+ | Format | Verfügbarkeit | Beschreibung |
280
+ |--------|-------------|-------------|
281
+ | JSON | ✅ Kostenlos | Strukturierte maschinenlesbare Ergebnisse |
282
+ | HTML | ✅ Kostenlos | Reichhaltiger HTML-Bericht mit NIST-Compliance-Tabelle, Schweregrad-Abzeichen, Kontrollmatrix |
283
+ | Text | ✅ Kostenlos | Sauberer, terminalfreundlicher Textbericht |
284
+ | CycloneDX SBOM | ✅ Kostenlos | Branchenstandard-SBOM mit Ergebnissen als Schwachstellen eingebettet |
285
+ | SPDX SBOM | ✅ Kostenlos | SPDX 2.3-Dokumentformat |
286
+ | NIST 800-161 | ✅ Kostenlos | Kontroll-Rückverfolgbarkeitsmatrix (SR-2.1 → SR-11.4) |
287
+ | EU CRA | ✅ Kostenlos | Zuordnung der Cyber Resilience Act-Artikel |
288
+ | PDF | 🔐 Premium | Mehrseitiges PDF mit Titelseite, Ergebnistabelle, NIST-Compliance-Matrix |
289
+ | Splunk CEF | 🔐 Premium | Common Event Format für Splunk-Erfassung |
290
+ | Elastic ECS | 🔐 Premium | Elastic Common Schema-Format |
291
+ | Microsoft Sentinel | 🔐 Premium | Sentinel-ready formatierte Ausgabe |
292
+ | IBM QRadar | 🔐 Premium | QRadar-DSM-ready-Format mit QID-Zuordnungen |
293
+
294
+ ### Beispielausgabe
295
+
296
+ ```json
297
+ {
298
+ "scanId": 1,
299
+ "findings": [
300
+ {
301
+ "id": "ATK-003",
302
+ "severity": "high",
303
+ "title": "Credential harvesting",
304
+ "evidence": "process.env.NPM_TOKEN detected in postinstall.js:17"
305
+ }
306
+ ]
307
+ }
308
+ ```
309
+
310
+ ---
311
+
312
+ ## ⚙️ Konfiguration und erweiterte Nutzung
313
+
314
+ ### Policy-as-Code
315
+
316
+ Definieren Sie Whitelists, Schweregrad-Überschreibungen, Unterdrückungen und Fehlerschwellen in einer YAML-Datei:
317
+
318
+ ```yaml
319
+ # .npm-scan.yml
320
+ allowlist:
321
+ - lodash
322
+ - chalk
323
+
324
+ severity_overrides:
325
+ - id: ATK-001
326
+ severity: medium
327
+
328
+ suppress:
329
+ - atk_id: ATK-009
330
+ - package: some-package
331
+
332
+ fail_on: high
333
+ ```
334
+
335
+ ```bash
336
+ npm-scan scan target --policy .npm-scan.yml
337
+ ```
338
+
339
+ ### Umgebungsvariablen
340
+
341
+ | Variable | Beschreibung | Standard |
342
+ |----------|-------------|---------|
343
+ | `NPM_SCAN_LICENSE_KEY` | Premium-/Enterprise-Lizenzschlüssel | — |
344
+ | `NPM_SCAN_DATA_DIR` | Scan-Verlaufsverzeichnis | `./.npm-scan` |
345
+ | `NPM_SCAN_LOG_LEVEL` | Ausführlichkeitsgrad der Protokollierung | `info` |
346
+
347
+ ### Premium-Lizenzierung
348
+
349
+ Kontaktieren Sie leo@lateos.ai, um einen Premium/Enterprise-Lizenzschlüssel zu erhalten.
350
+
351
+ ```bash
352
+ # Verwenden
353
+ npm-scan scan target --license-key <key>
354
+ npm-scan report --pdf --license-key <key>
355
+ npm-scan report --siem cef --license-key <key>
356
+ ```
357
+
358
+ ---
359
+
360
+ ## 🔗 Integrationen
361
+
362
+ ### GitHub Actions CI (für dieses Repository)
363
+
364
+ Jeder Push und PR führt Tests auf Node 18, 20 und 22 aus:
365
+
366
+ ```yaml
367
+ # .github/workflows/ci.yml
368
+ name: CI
369
+ on:
370
+ push:
371
+ branches: [ main ]
372
+ pull_request:
373
+ branches: [ main ]
374
+ jobs:
375
+ test:
376
+ runs-on: ubuntu-latest
377
+ strategy:
378
+ matrix:
379
+ node-version: [18, 20, 22]
380
+ steps:
381
+ - uses: actions/checkout@v4
382
+ - uses: actions/setup-node@v4
383
+ with:
384
+ node-version: ${{ matrix.node-version }}
385
+ cache: 'npm'
386
+ - run: npm ci
387
+ - run: npm test
388
+ - run: npm run test:coverage
389
+ - run: node --test test/detectors-corpus.test.js
390
+ - run: npm run lint
391
+ - run: npm run build
392
+ ```
393
+
394
+ ### GitHub Action (für nachgelagerte Benutzer)
395
+
396
+ Scannen Sie die `package-lock.json` Ihres Projekts bei jedem PR — erkennt Typosquatting, obfuskierte Payloads, Credential-Stealer und Wurmverbreitung, bevor sie die Produktion erreichen:
397
+
398
+ ```yaml
399
+ # .github/workflows/scan.yml
400
+ name: npm-scan
401
+ on:
402
+ pull_request:
403
+ paths:
404
+ - 'package-lock.json'
405
+ - '**/package.json'
406
+ jobs:
407
+ scan:
408
+ runs-on: ubuntu-latest
409
+ steps:
410
+ - uses: actions/checkout@v4
411
+ - uses: actions/setup-node@v4
412
+ with:
413
+ node-version: 20
414
+ - name: Scan lockfile
415
+ uses: lateos/npm-scan@v1
416
+ with:
417
+ scan-type: lockfile
418
+ fail-on: high
419
+ ```
420
+
421
+ #### Action-Eingaben
422
+
423
+ | Eingabe | Standard | Beschreibung |
424
+ |-------|---------|-------------|
425
+ | `scan-type` | `lockfile` | `lockfile` zum Scannen von `package-lock.json` oder `package` zum Scannen eines bestimmten npm-Pakets |
426
+ | `package` | — | Paketname (erforderlich bei `scan-type=package`) |
427
+ | `fail-on` | `high` | Workflow bei diesem Schweregrad-Schwellwert fehlschlagen lassen: `none`, `low`, `medium`, `high`, `critical` |
428
+ | `policy-file` | — | Pfad zu einer YAML/JSON-Policy-Datei für Whitelists, Schweregrad-Überschreibungen und Unterdrückungen |
429
+ | `license-key` | — | Premium-Lizenzschlüssel für SIEM-Export und PDF-Berichte |
430
+ | `siem-format` | — | SIEM-Ausgabe: `cef`, `ecs`, `sentinel`, `qradar` (Premium) |
431
+ | `sbom-format` | — | SBOM-Ausgabe: `json`, `xml`, `spdx` |
432
+
433
+ #### Action-Ausgaben
434
+
435
+ | Ausgabe | Beschreibung |
436
+ |--------|-------------|
437
+ | `findings-count` | Anzahl der erkannten Ergebnisse |
438
+ | `scan-id` | Scan-ID für spätere Referenz in Berichten |
439
+
440
+ #### Beispiel: Bestimmtes Paket mit Policy + SBOM scannen
441
+
442
+ ```yaml
443
+ - uses: lateos/npm-scan@v1
444
+ with:
445
+ scan-type: package
446
+ package: lodash
447
+ policy-file: .npm-scan.yml
448
+ sbom-format: spdx
449
+ fail-on: critical
450
+ ```
451
+
452
+ #### Beispiel: Mit SIEM-Export scannen (Premium)
453
+
454
+ ```yaml
455
+ - uses: lateos/npm-scan@v1
456
+ with:
457
+ scan-type: lockfile
458
+ siem-format: cef
459
+ license-key: ${{ secrets.NPM_SCAN_LICENSE_KEY }}
460
+ ```
461
+
462
+ ### CI/CD-Pipeline
463
+
464
+ Direkte Integration in Ihre bestehende Pipeline ohne die Composite-Action:
465
+
466
+ ```bash
467
+ # Lock-Datei scannen, Build bei hohem Schweregrad fehlschlagen lassen
468
+ npm-scan scan-lockfile --policy .npm-scan.yml || exit 1
469
+
470
+ # Bestimmtes Paket scannen, nur bei kritisch fehlschlagen
471
+ npm-scan scan lodash --policy .npm-scan.yml || exit 1
472
+
473
+ # SBOM als Build-Artefakt generieren
474
+ npm-scan scan express --sbom spdx > express-sbom.spdx.json
475
+
476
+ # HTML-Compliance-Bericht in CI generieren
477
+ npm-scan report --html > report.html
478
+
479
+ # Bericht als Artefakt hochladen
480
+ # uses: actions/upload-artifact@v4
481
+ # with:
482
+ # name: npm-scan-report
483
+ # path: report.html
484
+ ```
485
+
486
+ ### Docker
487
+
488
+ Siehe den obigen [Docker-Schnellstart-Abschnitt](#-lateosnpm-scan-überall-mit-docker-ausführen--keine-installation) für Pull-Befehle, Compose-Pipeline und Multi-Arch-Images.
489
+
490
+ Scannen Sie die `package-lock.json` Ihres Projekts bei jedem PR — erkennt Typosquatting, obfuskierte Payloads, Credential-Stealer und Wurmverbreitung, bevor sie die Produktion erreichen:
491
+
492
+ ```yaml
493
+ # .github/workflows/scan.yml
494
+ name: npm-scan
495
+ on:
496
+ pull_request:
497
+ paths:
498
+ - 'package-lock.json'
499
+ - '**/package.json'
500
+ jobs:
501
+ scan:
502
+ runs-on: ubuntu-latest
503
+ steps:
504
+ - uses: actions/checkout@v4
505
+ - uses: actions/setup-node@v4
506
+ with:
507
+ node-version: 20
508
+ - name: Scan lockfile
509
+ uses: lateos/npm-scan@v1
510
+ with:
511
+ scan-type: lockfile
512
+ fail-on: high
513
+ ```
514
+
515
+ #### Action-Eingaben
516
+
517
+ | Eingabe | Standard | Beschreibung |
518
+ |-------|---------|-------------|
519
+ | `scan-type` | `lockfile` | `lockfile` zum Scannen von `package-lock.json` oder `package` zum Scannen eines bestimmten npm-Pakets |
520
+ | `package` | — | Paketname (erforderlich bei `scan-type=package`) |
521
+ | `fail-on` | `high` | Workflow bei diesem Schweregrad-Schwellwert fehlschlagen lassen: `none`, `low`, `medium`, `high`, `critical` |
522
+ | `policy-file` | — | Pfad zu einer YAML/JSON-Policy-Datei für Whitelists, Schweregrad-Überschreibungen und Unterdrückungen |
523
+ | `license-key` | — | Premium-Lizenzschlüssel für SIEM-Export und PDF-Berichte |
524
+ | `siem-format` | — | SIEM-Ausgabe: `cef`, `ecs`, `sentinel`, `qradar` (Premium) |
525
+ | `sbom-format` | — | SBOM-Ausgabe: `json`, `xml`, `spdx` |
526
+
527
+ #### Action-Ausgaben
528
+
529
+ | Ausgabe | Beschreibung |
530
+ |--------|-------------|
531
+ | `findings-count` | Anzahl der erkannten Ergebnisse |
532
+ | `scan-id` | Scan-ID für spätere Referenz in Berichten |
533
+
534
+ #### Beispiel: Bestimmtes Paket mit Policy + SBOM scannen
535
+
536
+ ```yaml
537
+ - uses: lateos/npm-scan@v1
538
+ with:
539
+ scan-type: package
540
+ package: lodash
541
+ policy-file: .npm-scan.yml
542
+ sbom-format: spdx
543
+ fail-on: critical
544
+ ```
545
+
546
+ #### Beispiel: Mit SIEM-Export scannen (Premium)
547
+
548
+ ```yaml
549
+ - uses: lateos/npm-scan@v1
550
+ with:
551
+ scan-type: lockfile
552
+ siem-format: cef
553
+ license-key: ${{ secrets.NPM_SCAN_LICENSE_KEY }}
554
+ ```
555
+
556
+ ### CI/CD-Pipeline
557
+
558
+ Direkte Integration in Ihre bestehende Pipeline ohne die Composite-Action:
559
+
560
+ ```bash
561
+ # Lock-Datei scannen, Build bei hohem Schweregrad fehlschlagen lassen
562
+ npm-scan scan-lockfile --policy .npm-scan.yml || exit 1
563
+
564
+ # Bestimmtes Paket scannen, nur bei kritisch fehlschlagen
565
+ npm-scan scan lodash --policy .npm-scan.yml || exit 1
566
+
567
+ # SBOM als Build-Artefakt generieren
568
+ npm-scan scan express --sbom spdx > express-sbom.spdx.json
569
+
570
+ # HTML-Compliance-Bericht in CI generieren
571
+ npm-scan report --html > report.html
572
+
573
+ # Bericht als Artefakt hochladen
574
+ # uses: actions/upload-artifact@v4
575
+ # with:
576
+ # name: npm-scan-report
577
+ # path: report.html
578
+ ```
579
+
580
+ ### Docker
581
+
582
+ Siehe den obigen [Docker-Schnellstart-Abschnitt](#-lateosnpm-scan-überall-mit-docker-ausführen--keine-installation) für Pull-Befehle, Compose-Pipeline und Multi-Arch-Images.
583
+
584
+ ---
585
+
586
+ ## 🗺️ Roadmap und Enterprise-Funktionen
587
+
588
+ ### Kostenlose Stufe (ausgeliefert)
589
+
590
+ - Alle 11 ATK-Detektoren (statisch + verhaltensbasiert) + **MEGALODON** (D1-D6) + **HF_IMPERSONATION** + **MINI_SHAI_HULUD** (D1-D7, 3 Wellen, mit **MSH_SUPPLEMENT** D1-D4) + **VSIX_SCAN** (6 Detektoren) + **CVE-2026-48710 (BadHost)** (3 Ebenen) + **TRAPDOOR** (9 Regeln) + **NODE_IPC_COMPROMISE** (11 Regeln) + **TYPOSQUAT_VPMDHAJ** (3 Regeln) + **AXIOS_POISONING** (3 Regeln)
591
+ - SBOM-Ausgabe (CycloneDX + SPDX)
592
+ - HTML-, Text- und Compliance-Berichte (NIST + EU CRA)
593
+ - Policy-as-Code-Engine (YAML)
594
+ - Lokaler SQLite-Scan-Verlauf
595
+ - GitHub Action
596
+ - Docker-Images + Compose-Pipeline
597
+
598
+ ### Premium (🔐 Lizenzschlüssel)
599
+
600
+ - PDF-Compliance-Berichte mit NIST-Rückverfolgbarkeitsmatrix
601
+ - SIEM-Export (Splunk CEF, Elastic ECS, Microsoft Sentinel, IBM QRadar)
602
+ - Dynamische Sandbox (gVisor-basiert — ATK-008–010)
603
+ - Erreichbarkeitsanalyse (Call-Graph-Filterung)
604
+
605
+ ### Enterprise (🏢 benutzerdefinierte Lizenz)
606
+
607
+ - SAML 2.0 SSO (Okta, Azure AD, OneLogin, Keycloak)
608
+ - REST-API + Webhooks (FastAPI)
609
+ - Team-RBAC + Audit-Logs
610
+ - Helm-Chart für Kubernetes-Bereitstellung
611
+ - PostgreSQL-Backend für gehostete/Team-Stufe
612
+ - SLA-gestützter Prioritätssupport
613
+
614
+ ---
615
+
616
+ ## 🤝 Beitragen
617
+
618
+ Wir begrüßen Beiträge — insbesondere neue Detektoren, verbesserte Ausweichresistenz und Compliance-Vorlagen.
619
+
620
+ Siehe [`docs/attack-taxonomy.md`](docs/attack-taxonomy.md) für den ATK-Governance-Prozess. Jeder neue Detektor erfordert:
621
+
622
+ 1. Ein Proof-of-Concept-Beispiel
623
+ 2. Eine Erkennungsregel mit Tests
624
+ 3. False-Positive-Analyse auf den Top-500-npm-Paketen
625
+ 4. NIST 800-161-Control-Zuordnung
626
+
627
+ ### Tests
628
+
629
+ Das Projekt verwendet den **nativen Node.js-Test-Runner** (`node:test` + `assert/strict`).
630
+
631
+ ```bash
632
+ # Alle Tests ausführen
633
+ npm test
634
+
635
+ # Tests mit Codeabdeckung ausführen
636
+ npm run test:coverage
637
+
638
+ # Tests mit ausführlicher Ausgabe ausführen
639
+ npm run test:verbose
640
+
641
+ # Lokales bösartiges/sauberes Korpus ausführen (kein Netzwerk erforderlich)
642
+ node --test test/detectors-corpus.test.js
643
+ ```
644
+
645
+ **Teststruktur:**
646
+ - `test/fixtures/mock-data.js` — gemeinsam genutzte Mock-Scans, Pakete und Code-Snippets
647
+ - `test/db.test.js` — Datenbank-CRUD (Speichern, Abfragen, Persistieren)
648
+ - `test/detectors-edge-cases.test.js` — detektorspezifische Grenztests (No-Ops, saubere Bereinigung, Schweregrad)
649
+ - `test/detectors-corpus.test.js` — 33 bösartige + 50 saubere Tarball-Integrationstests (offline)
650
+ - `test/fetch.test.js` — Tarball-Extraktion, Bereinigung temporärer Verzeichnisse
651
+ - `test/policy-edge-cases.test.js` — Grenzfälle bei Unterdrückung, Überschreibung, Ladevalidierung
652
+ - `test/report-snapshots.test.js` — HTML/Text/CRA/PDF-Format-Assertions
653
+ - `test/cve-2026-48710-badhost/manifest.test.js` — 13 Python-Manifest-Parsing-Tests (requirements.txt, pyproject.toml, poetry.lock, Version-Grenzfälle)
654
+ - `test/cve-2026-48710-badhost/transitive.test.js` — 7 transitive Abhängigkeitstests (Tier 1/2, fastapi-Version-Gating, Pin-Unterdrückung)
655
+ - `test/cve-2026-48710-badhost/codePattern.test.js` — 6 statische Code-Pattern-Tests (Auth-Kontext, INFO-Durchgriff, Scope-Unterdrückung)
656
+ - `test/cve-2026-48710-badhost/integration.test.js` — 4 Integrationstests (End-to-End-Composite-Findings, sauberes Projekt, keine Python-Dateien)
657
+ - `test/trapdoor.test.js` — 40 TrapDoor-Kampagnenerkennungstests (D1–D9: Kampagnenmarker, Payload-Fingerprint, Publisher-Blocklist, Gist-Exfil, KI-Vergiftung, Lockname, Krypto-Primitive, XOR-Key, Credential-Validierung)
658
+ - `test/node-ipc.test.js` — 37 node-ipc-Kompromittierungstests (D1–D11: Versions-Blocklist, Tarball-Hash, CJS-Injektion, Payload-Hash, DNS-C2-Muster, Bootstrap-Resolver, DNS-TXT-Exfil, Laufzeitauslöser, Temp-Artefakte, unbefugter Publisher, Blastradius)
659
+ - `test/msh-supplement.test.js` - 17 MSH-Ergänzungstests (ctf-scramble-v2-Stopp, Dämonisierung, geografischer Killswitch, C2-Dead-Drop)
660
+ - `test/typosquat-vpmdhaj.test.js` - 16 Typosquatting-Kampagnentests (Maintainer-Block, Präfixerkennung, Levenshtein, Preinstall-Stager, Bun-Loader, AWS/ECS/Vault/GitHub-Cred-Exfil)
661
+ - `test/axios-poisoning.test.js` - 13 Axios-Vergiftungstests (Versions-Blocklist-Stopp, Decoy-Abhängigkeit, Krypto-Heuristik, plattformübergreifender RAT, C2-Callback)
662
+ - `test/cli.test.js` — Commander-Integrationstests (Hilfe, Version, Scan, Bericht, Fehlerbehandlung)
663
+
664
+ ### Hilfe benötigt?
665
+
666
+ - 🔒 Siehe [Sicherheitsrichtlinie](SECURITY.md) für die Offenlegung von Schwachstellen
667
+ - 📖 Lesen Sie den [Projektplan](docs/project-plan.md)
668
+ - 🧬 Überprüfen Sie die [Angriffstaxonomie](docs/attack-taxonomy.md)
669
+ - 🐛 Öffnen Sie ein Issue oder PR
670
+
671
+ ---
672
+
673
+ ## 📄 Lizenz
674
+
675
+ Apache-2.0 Core + Commons Clause.
676
+ Siehe [`LICENSING.md`](LICENSING.md) für die genaue Grenze zwischen kostenlosen und Premium-Funktionen.
677
+
678
+ ---
679
+
680
+ ## 👤 Über den Maintainer
681
+
682
+ **Roongrunchai Chongolnee** — Ersteller und Maintainer von `@lateos/npm-scan`. Zertifizierter Sicherheitsexperte (CISSP, CEH, Cisco Security, AWS Cloud Practitioner) mit einem Jahrzehnt Erfahrung in Infrastruktur- und Anwendungssicherheit bei Philips. Ich habe dieses Tool entwickelt, um der Open-Source-Community eine praktische, detektorgesteuerte Abwehr gegen Supply-Chain-Malware zu bieten — und ich bin bestrebt, es transparent, gemeinschaftseigen und kontinuierlich verbessert zu halten.
683
+
684
+ [![LinkedIn](https://img.shields.io/badge/LinkedIn-0A66C2?style=flat-square&logo=linkedin)](https://www.linkedin.com/in/roongrunchai-chong-c-ab9742108/)
685
+ [![GitHub](https://img.shields.io/badge/GitHub-lateos--ai-181717?style=flat-square&logo=github)](https://github.com/lateos-ai/npm-scan)
686
+
687
+ Issues, Ideen und Pull-Requests sind immer willkommen — Sicherheit ist am stärksten, wenn wir zusammenarbeiten.
688
+
689
+ ---
690
+
691
+ ```
692
+ @lateos/npm-scan — npm supply chain security scanner
693
+ Copyright (C) 2026 Lateos
694
+
695
+ Licensed under the Apache License, Version 2.0 (the "License");
696
+ you may not use this file except in compliance with the License.
697
+
698
+ Unless required by applicable law or agreed to in writing, software
699
+ distributed under the License is distributed on an "AS IS" BASIS,
700
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
701
+ ```
702
+
703
+ ---
704
+
705
+ **Scannen Sie Ihr erstes Paket jetzt:**
706
+
707
+ ```bash
708
+ npx @lateos/npm-scan scan lodash
709
709
  ```