📦 Supply Chain Intelligence
Kontinuierliche Überwachung aller Third-Party-JavaScript-Abhängigkeiten, CDN-gehosteter Ressourcen und externer Skripte auf Integrity-Verletzungen, unerwartete Mutationen, Skimmer-Payload-Injektionen und fehlende SRI-Policies.
// Die Supply-Chain-Angriffsfläche
Eine durchschnittliche Enterprise-Webanwendung lädt 20–80 Third-Party-JavaScript-Dateien von externen CDNs, Analytics-Providern, Zahlungsdienstleistern und Marketing-Plattformen. Jede dieser Quellen ist ein potentieller Supply-Chain-Angriffsvektor — ein kompromittiertes npm-Paket, ein gekaperter CDN-Account oder eine typosquattete Bibliothek kann unbemerkt Skimmer-Code, Cryptominer oder Datenexfiltrations-Payloads in jede betroffene Seite injizieren.
Reale Angriffe
- Magecart (2015–heute) — Kreditkarten-Skimmer via kompromittierte Drittanbieter-Skripte; British Airways (500k Karten), Ticketmaster, Newegg
- Polyfill.io (2024) — Domain an chinesisches Unternehmen verkauft; 100k+ Sites von Schadcode betroffen
- xz Utils (2024) — Backdoor via Social Engineering des Maintainers; Beinahe-Kompromiss von SSH-Servern
- Event-Stream (2018) — Böswilliger Maintainer ergänzte Kryptowallet-Stealer in npm-Paket mit 2M Weekly Downloads
Überwachte Angriffsvektoren
- CDN-Account-Kompromiss → Script-Mutation
- npm-Package-Hijacking (Dependency Confusion)
- Typosquatting populärer Pakete
- Subdomain-Takeover des Script-Hosting-Hosts
- Man-in-the-Middle auf unverschlüsselter CDN-Delivery
- Böswillige Cache-Poisoning am CDN-Edge
- Domain-Expiry → Neuregistrierung durch Angreifer
// Scanner-Architektur
Der YADS Supply-Chain-Scanner (javascript_supply_chain Add-On) nutzt Playwright, um die Zielseite vollständig zu rendern — inklusive aller dynamisch geladenen Skripte. Anschließend werden alle externen Ressourcen-URLs extrahiert, jede Ressource abgerufen, SHA-256/SHA-384-Hashes berechnet und gegen Baseline sowie bekannte SRI-Datenbanken abgeglichen.
| Prüfung | Methode | Schweregrad |
|---|---|---|
| SRI-Hash fehlt | Kein integrity=-Attribut an <script>- oder <link>-Tags für externe Ressourcen | Medium |
| SRI-Hash-Mismatch | Berechneter SHA-384 weicht vom deklarierten integrity=-Wert ab | Critical |
| Bekannter Schadcode-Hash | SHA-256 trifft auf Threat-Intelligence-Datenbank bekannter Schadskript-Hashes | Critical |
| Skimmer-Pattern-Treffer | Skriptinhalt matched Magecart/Kreditkarten-Skimmer-Regex (Base64-Datenexfil, Form-Hijack, Iframe-Injektion) | Critical |
| Baseline-Hash-Änderung | SHA-384 weicht vom zuletzt gesehenen Hash für diese URL ab (unerwartete Mutation) | High |
| HTTP (kein TLS) Delivery | Externes Skript über http:// geladen — anfällig für MITM-Injektion | High |
| Ablaufende Hosting-Domain | CDN-Domain hat WHOIS-Expiry < 30 Tage — Angreifer-Neuregistrierungs-Risiko | High |
| Typosquatted Package-Name | Skript-URL-Pfad matched bekanntes Typosquat-Pattern gegen legitimes Paket | High |
// Skimmer-Pattern-Erkennung
YADS pflegt eine kuratierte Pattern-Bibliothek bekannter Magecart- und Kreditkarten-Skimmer-Indikatoren. Muster werden nach Möglichkeit auf deobfuskierten Skriptinhalt angewendet. Ein einzelner Treffer löst sofort einen Critical-Befund mit dem gematchten Pattern und der Skript-URL aus.
// Change-Baseline & kontinuierliche Überwachung
Beim ersten Scan werden alle externen Ressourcen-Hashes als vertrauenswürdige Baseline gespeichert. Folge-Scans vergleichen gegen diese Baseline — jede Hash-Änderung bei einer nicht-versionierten URL (kein Versions-String im Pfad) löst einen High-Befund aus, der eine Operator-Prüfung erfordert, bevor der neue Hash als Baseline akzeptiert wird.
| Eigenschaft | Wert |
|---|---|
| Modul-Name | javascript_supply_chain (Add-On, Enterprise) |
| Baseline-Speicherung | ScanResult.data.supply_chain_baseline — Dict von URL → SHA-384 |
| Scan-Frequenz | Jeder Group-B-Scan-Zyklus (konfigurierbar, Standard: täglich) |
| Max. überwachte Ressourcen | 200 pro Domain (konfigurierbar) |
| Playwright-Anforderung | Chromium Headless — für dynamisches Script-Loading erforderlich |
| Timeout | 30s Seitenlade + 60s Ressourcen-Fetch-Budget |
| Deduplizierung | Gleiche URL mit Versions-String-Änderung (Semver-Bump) — automatisch akzeptiert, als Info geloggt |