
Buildloses Dependency-Audit-Tool, das 10 Ökosysteme offline scannt und CVEs meldet, priorisiert nach CISA KEV und EPSS, EOL-Pakete, Lizenzen, eingecheckte Schlüssel und Binärdateien mit SBOM- und SARIF-Exporten.
Formidable Auditor's Dependency Checker
AKA Fuckin' Autonomous Dependency Checker
fad-checker prüft Maven · Gradle · npm · Yarn · pnpm · Composer · PyPI · NuGet · Go · Ruby, vendored JavaScript, eingecheckte native Binärdateien und kryptografisches Material (Zertifikate & private/öffentliche Schlüssel) in jedem Quellbaum; Multi-Modul, Monorepo, polyglott; und erzeugt einen eigenständigen HTML- + Word-Bericht (CVE priorisiert nach EPSS + CISA KEV, EOL, veraltet, veraltet mit Release-Datum, Lizenzen) plus -Exporte. ; es liest Lockfiles und Manifeste direkt von der Festplatte.

mvn/gradle/npm install/pip/dotnet restore/go build, kein node_modules/. Der Maven-Graph wird so aufgelöst, wie Maven ihn auflöst. → wie--offline, regressionstested und reproduzierbar unter unshare -rn. Bei Maven erreicht es 657/657 von OSV-Scanners Online-Ergebnis ganz ohne Netzwerkschnittstelle, gegenüber 45 / 40 / 37 bei den anderen. → Benchmark · Air-gapped--typosquat).SHA256SUMS mit; differenzielle Audits vergleichen gegen einen vorherigen Lauf (--baseline) und CI kann nur auf neue Befunde gaten.--help, die auf einen Bildschirm passt; der lange Rattenschwanz an Schaltern faltet sich in vier Flags — -d eol,nvd schaltet Dinge ab, -a licenses,snyk schaltet ein, was standardmäßig aus ist, -r html,json wählt die Ausgaben, -o sagt wo. Die einzelnen Flags funktionieren weiterhin und --help-all listet sie auf.--lang fr).doc bei --report-doc), CycloneDX 1.6 SBOM, CSAF 2.0 VEX, SARIF 2.1.0, JSON; Gate mit --fail-on, Triage mit --ignore/--vex. Private Registries für jedes Ökosystem.Was es für ein Audit leistet, was die anderen nicht tun. Gleicher Spaltensatz und gleiche Sorgfalt bei der Quellenangabe wie
docs/COMPARISON.md — ⚠️ bedeutet teilweise und sagt wie, Zellen sollen
überprüfbar sein.
| Was ein Auditor tatsächlich tun muss | fad | OSV | Trivy | Grype+Syft | OWASP DC | Snyk |
|---|---|---|---|---|---|---|
| Ein 100-Modul-polyglottes Monorepo mit einem Befehl auditieren, ohne installierte Toolchain ¹ | ✅ 105 Module | ⚠️ Reactor übersprungen | ⚠️ braucht ~/.m2 | ⚠️ Opt-in | ⚠️ Java-Build | ⚠️ mvn-Build |
| Offline / air-gapped scannen, ohne transitive Abhängigkeiten zu verlieren ² | ✅ 657/657 | ❌ | ⚠️ ~/.m2 | ⚠️ Opt-in | ⚠️ Mirror | ❌ |
| Die privaten/internen Abhängigkeiten in einem großen Projekt identifizieren ³ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Bereinigte Abhängigkeitsdeskriptoren in ein externes Verzeichnis extrahieren ⁴ | ✅ -t | ❌ | ❌ | ❌ | ❌ | ❌ |
| EOL / deprecated Frameworks & Abhängigkeiten berichten, transitive eingeschlossen ⁵ | ✅ | ⚠️ nur deprecated | ⚠️ nur OS-Distros | ❌ | ❌ | ⚠️ nur Web-UI |
| Eingecheckte Schlüssel & Zertifikate berichten ⁶ | ✅ | ❌ | ⚠️ Key-Regel | ❌ | ❌ | ❌ |
Eingecheckte Binärdateien erkennen (.dll, .exe, …) und sie gegen ihre Checksummen prüfen ⁷ | ✅ | ❌ | ⚠️ einige | ⚠️ Muster | ❌ | ❌ |
¹ Kein mvn/go/npm/pip/dotnet — Manifeste von der Festplatte geparst, nichts installiert oder ausgeführt. 105 × pom.xml in einem Durchlauf: 790 Paare gegenüber OSV-Scanners 657, 133 nur bei fad, Versionen pro Modul vermittelt statt flachgeklopft.
² 657 von 657 von OSV-Scanners Online-Maven-Ergebnis, unter unshare -rn — keine Netzwerkschnittstelle. Tripwire-getestet; nur öffentliche Koordinaten verlassen jemals die Enklave.
³ Kapitel 0 benennt jede Koordinate, für die jede konfigurierte Registry 404 zurückgab — Maven, npm, PyPI, NuGet, Composer, Go und RubyGems — mit dem/den Manifest(en), die sie deklarieren. Eine Registry, die ein Timeout hatte oder einen Fehler lieferte, wird nie gezählt: eine unschlüssige Antwort würde sonst einen Kunden beschuldigen, interne Pakete auszuliefern, weil dessen Proxy instabil war. -e <regex> schließt sie dann aus.
⁴ -t <dir>: normalisierte POMs plus jedes gespiegelte Nicht-Maven-Lockfile, private Koordinaten entfernt. Archivierbar und von allem scannbar — --snyk eingeschlossen.
⁵ endoflife.date, aufgeteilt in direkt vs. transitiv, damit du weißt, welche Abhängigkeit zu bumpen ist, plus deprecated / abandoned / yanked und veraltet. Trivy deckt nur OS-Distros ab; Snyks Package Health ist nur im Web.
⁶ Inventar und Urteile: Ablauf, RSA<2048, MD5/SHA1, selbstsigniert; private vs. öffentliche Schlüssel; JKS/PKCS#12. Offline-Parser. Trivys Secret-Regel findet die Datei, nicht den Mangel.
⁷ Identifiziert per Hash über deps.dev + CIRCL → should-be-declared / name≠checksum / unknown / malicious. Syfts Muster benennen eine Version, keine Identität.
⁸ Kapitel 0 markiert, was dieser Scan nicht erreichen konnte (fehlende Lockfiles, BOM-only-Versionen, Yarn Berry, nicht bestimmbare PHP-Runtime); Kapitel 6.3 legt dar, was das Tool nie bewertet. Anderswo ist das Erste eine Log-Zeile, die das Audit nie sieht, das Zweite wird nicht niedergeschrieben.
⁹ Provenienz-Manifest: Tool, Runtime, Modus, Laufkonfiguration und Cache-Frische für alle 13 Quellen. Grype und Dependency-Check tragen das Datum einer Quelle, nicht des Laufs.
¹⁰ Kapitel 0→6 mit einer Executive Summary und Fix-Rezepten, eigenständiges HTML plus ein Word-.doc-Zwilling. Keines der anderen gibt Word aus.
¹¹ Vier Inline-SVG-Diagramme — CWE nach schlimmstem Schweregrad, verwundbare Transitive pro Root-Abhängigkeit, deine verwundbarsten Module (direkt vs. transitiv in einem Ein-Modul-Projekt), Fix-Prioritätsbänder — auch im .doc gerendert, mit Ein-Klick-Kopie als PNG (oder einer Tabelle als Rich-HTML), die formatiert in Word eingefügt wird. Jede CVE behält ihren CVSS-Vektor, CWE, Referenzen, CPE-Konfiguration und via-Pfad hinter einem Drill-down, ganz ohne externe Assets.
¹² --baseline fügt ein Δ-Kapitel hinzu (neu / behoben / unverändert); --fail-on-new gated nur auf neue Befunde. Snyk verfolgt dies auf seiner Plattform, nicht als lokalen Diff.
Wo es verliert — Container/OS-Pakete, Auto-Fix-PRs und CVE-Abdeckung gegenüber Snyks kuratiertem
Feed → docs/COMPARISON.md ·
die Lücke, gemessen.
Bewusst kein Ziel: Erreichbarkeit. Ein Befund ist eine verwundbare Version im Abhängigkeitsgraphen, und der Bericht sagt genau das (Kap. 6.3), statt Aufrufpfade zu erraten. Zu entscheiden, ob der verwundbare Code in dieser Anwendung erreichbar ist, ist Sache des Auditors, getroffen mit Anwendungskontext, den kein Scanner hat.
[!WARNING] fad-checker ist neu und kann noch (seltene) Bugs enthalten. Behandle seine Ausgabe als starken ersten Durchlauf, prüfe alles Kritische doppelt und melde bitte Probleme; sie werden schnell behoben.
npm install -g fad-checker fad-checker -s ./my-project # → ./fad-checker-report/cve-report.html
Ein kostenloser [NVD-API-Schlüssel](https://nvd.nist.gov/developers/request-an-api-key) (sofort) ermöglicht eine 10× schnellere Anreicherung: `fad-checker --set-nvd-key YOUR_KEY`. Ein paar gängige Aufrufe; die vollständige Liste über `fad-checker --help` oder [docs/USAGE.md](https://github.com/9pings/fad-checker/blob/main/docs/USAGE.md):```bash
fad-checker -s ./proj -e "^com\.acme\." # exclude private libs (coord regex)
fad-checker -s ./proj -t ../clean -e "^com\.acme\." # extract only: normalised descriptors, private modules flagged
fad-checker -s ./proj -t ../clean -e "^com\.acme\." -a snyk # same extraction + scan + merge Snyk
fad-checker -s ./proj --offline # fully offline (zero network, needs a warmed cache)
fad-checker -s ./proj -a osv-db,typosquat # offline-complete OSV + typosquat
fad-checker -s ./proj -a licenses --fail-on high # license chapter + CI gate
fad-checker -s ./proj --report-json --baseline last.json --fail-on-new # differential audit: fail CI on NEW findings
fad-checker diff last.json this.json # standalone diff of two findings JSONs
Was -t <dir> tatsächlich macht. Es ist ein Extraktionsschritt, kein Snyk-Adapter. Er schreibt einen
parallelen Baum aus normalisierten Abhängigkeitsdeskriptoren: jede pom.xml reduziert auf die
abhängigkeitsrelevanten Knoten (Koordinaten, properties, dependencyManagement, dependencies,
modules), Reactor-Parents neu verdrahtet auf ihren echten relativePath im Baum, ${…} in
Koordinaten aufgelöst — plus jede Nicht-Maven-Lockfile/Manifest gespiegelt am selben relativen Pfad
(package-lock/yarn.lock/pnpm-lock, composer.lock, poetry/Pipfile/uv/pdm,
*.csproj/packages.lock.json, go.mod/go.sum, Gemfile.lock und Begleiter wie
Directory.Packages.props oder nuget.config). Online sondiert er außerdem jede Koordinate gegen
die konfigurierten Maven-Repositories und meldet diejenigen, die dort nicht existieren — deine
privaten/internen Module —, die -e <regex> dann aus den umgeschriebenen POMs entfernt. Dann
stoppt er: kein CVE/EOL-Durchlauf und kein Report, es sei denn, du übergibst zusätzlich --snyk, ein --report-<type>,
--fail-on* oder --baseline. Was du bekommst, ist ein buildfreies, bereinigtes Abhängigkeitsinventar, das du
als Audit-Nachweis archivieren, einem Kunden oder einer rechtlichen Prüfung übergeben oder auf jeden Scanner richten kannst — Snyk via
--snyk ist einer davon.
[!IMPORTANT]
--offlineliest den Cache, ersetzt ihn nicht. Bei einem kalten Cache gibt es nichts zum Abgleichen, also meldet ein erster Offline-Lauf legitim 0 CVE / 0 EOL / 0 veraltet; das ist ein leerer Cache, kein sauberes Projekt. Wärme ihn einmal auf (ein normaler Online-Lauf auf irgendeinem Projekt, oder--import-cache), dann liefert--offlinedas vollständige Ergebnis mit null Netzwerkaufrufen. Air-gapped Maschinen bekommen ihren Cache über--export-cache/--import-cache.
Ein einzelnes eigenständiges Binary (kein Node), Installation aus dem Quellcode und Shell-Completion findest du in → docs/USAGE.md.
Der Report ist in Wurzelkapitel organisiert (jedes gruppiert verwandte Unterkapitel):
| Kapitel | Quelle | Was er erkennt |
|---|---|---|
| 0. Warnungen (oben) | lokale Heuristiken | Fehlende Lockfiles, unaufgelöste Maven-Versionen (BOM-verwaltet), private Libs nicht auf Maven Central |
Δ. Änderungen seit Baseline (oben, mit --baseline) | Diff vs. vorheriges JSON | Neue / behobene / unveränderte Befunde pro Kategorie + die Liste der neuen Produktions-CVEs; für wiederkehrende Audits und --fail-on-new CI-Gating |
| 1. CVE (X direkt, Y indirekt, Z dev) | CVEProject + OSV.dev + NVD + CPE | 1.1 Produktion; öffentliche CVE / GHSA in Prod-Abhängigkeiten, pro Ökosystem, pro Manifest, priorisiert nach CISA KEV + EPSS + CVSS · 1.2 Vendored JS-Schwachstellen (retire.js) · 1.3 Dev (test/provided, dev/optional/peer) · 1.4 Wahrscheinliche False Positives (CPE-gefiltert) |
| 2. Unmanaged / unversioned components | deps.dev + CIRCL (per Checksum), retire.js, eingebautes X.509 | 2.1 Embedded binaries; CVEs in Libs, die in committeten .jar/.war/.ear ausgeliefert werden (Fat-Jars, Shaded Uber-Jars) · 2.2 Native binaries (.dll/.exe/.so/.dylib) per Hash identifiziert, markiert als should-be-managed / Name≠Checksum / unbekannt / bösartig · 2.3 Vendored JavaScript-Inventar (jQuery, Bootstrap, …) verwundbar oder nicht · 2.4 Zertifikate & Schlüsselmaterial; committete Zertifikate (Ablauf / schwacher Schlüssel / schwache Signatur / selbstsigniert), private vs. öffentliche Schlüssel (PEM/OpenSSH/PuTTY/PGP/SSH) und Keystores, alles offline geparst |
| 3. Wartung / Lebenszyklus (X EOL, Y obsolet, Z veraltet) | endoflife.date · kuratiert + Registry-Flags · Maven Central / npm / Packagist / PyPI / NuGet | 3.1 End-of-Life-Frameworks (+ ein Band „Out of active support" mit --eol-support; Symfony/Laravel gruppiert als eine Zeile pro Framework; PHP-Runtime, wenn die Composer-Constraint es beweist), aufgeteilt in (deklariert / vom Parent-POM geerbt — diese anheben) vs. (die Abhängigkeit anheben, die sie hereinzieht) · · (neuere Version verfügbar, mit Release-Daten; nur direkte Abhängigkeiten) |
Der HTML-Report öffnet sich in jedem Browser, enthält jedes Detail (CVSS-Vektoren, Referenzen, vollständige Beschreibungen, CPE-Konfigurationen, Via-Pfade für Transitive) und liefert einen Word-kompatiblen .doc-Zwilling mit. Jeder Treffer trägt eine zusammengesetzte Priorität (KEV-ausgenutzt > EPSS-Wahrscheinlichkeit > CVSS-Schweregrad), und der Lauf kann zusätzlich eine CycloneDX 1.6 SBOM (--report-sbom, Schwachstellen inline) und eine CSAF 2.0 VEX (--report-csaf) für nachgelagerte Tooling ausgeben.

Kein Tool findet alles. fad-checker führt bei 87 % einer Union aus 908 Paaren, und 131 Paare kamen von Snyk zurück und nicht von ihm. Einzeln gegen OSV adjudiziert, ist keines ein Recall-Bug:
| Urteil | |
|---|---|
| 57 | falsches Artefakt — der Advisory bindet eine andere Koordinate |
| 31 | außerhalb des Bereichs — die Version liegt außerhalb jedes deklarierten betroffenen Bereichs |
| 23 | nicht in OSV — 19 proprietäre SNYK-*-IDs, 4, die nur NVD führt |
| 19 | keine Maven-Bindung — der Advisory bindet überhaupt kein Maven-Paket |
| 1 | bereits gemeldet, unter dem CVE-Alias |
| 0 | bestätigter Fehlschlag |
Zwei Drittel widersprechen dem öffentlichen Record, sie zu melden hieße also, False Positives auszuliefern. CVE-2023-6481 ist das saubere Beispiel: beansprucht für [email protected], bindet es
logback-core bei [1.2.12, 1.2.13) — falsches Artefakt, und eine Version, die veröffentlicht wurde, bevor der Fehler
existierte.
Scope. Alle 131 sind von Snyk: OSV-Scanner, Trivy und Grype+Syft trugen jeweils 0 Befunde bei, die niemand sonst hatte. Und alle liegen auf dem Maven-Ziel — außerhalb von Maven liegt der Graph in der Lockfile, jeder Scanner liest dieselbe Eingabe, und der Benchmark misst identische Befundmengen auf npm, RubyGems und Composer.
Deshalb gibt es --snyk. fad-checker nimmt die Ausgabe von snyk test als Eingabe und merged
sie, sodass du die Union bekommst, statt eine Seite zu wählen. Eine Abdeckungsentscheidung, keine Korrektur.
Methode, Caveats und die Urteile pro Paar → docs/BENCHMARK.md; reproduzierbar
mit scripts/adjudicate-gap.js.
Zero-data-sent-Garantie. Unter
--offlinemacht fad-checker überhaupt keine Netzwerkaufrufe; er liest nur die aufgewärmten~/.fad-checker/-Caches und überträgt niemals eine Abhängigkeit, einen Pfad oder einen Befund von der Maschine. Es ist regression-getestet (test/offline-guarantee.test.js, ein Tripwire-Fetcher, der wirft, wenn er berührt wird) und auditor-reproduzierbar:unshare -rn node fad-checker.js -s ./proj --offline …führt ihn in einem Namespace mit keiner Netzwerkschnittstelle aus und liefert byte-identische Befunde. Anders als die gängigen OSS-Scanner löst fad auch den Maven-transitiven Graphen offline auf; auf einem air-gapped Multi-Modul-Projekt findet er also die transitiven CVEs, die sie nicht finden können.
Wenn das auditierte System offline / vertraulich ist (typisch für ein reguliertes oder air-gapped Audit), kann es OSV / NVD / Maven Central / npm nicht erreichen. Teile die Arbeit über Maschinen auf, während null Umgebungsinformationen die sichere Enklave verlassen: ein anonymisierter Deskriptor trägt nur öffentliche Paketkoordinaten; keine Dateisystempfade, keine Registry-URLs, keine Hostnamen/Benutzernamen; und der detaillierte Report wird zurück auf der Offline-Maschine erzeugt.
Der Transfer beruht auf einer Eigenschaft der fad-checker-Caches: Sie sind nach Koordinate oder Vuln-ID geschlüsselt, niemals nach Pfad, sind also maschinenunabhängig. Der Online-Schritt wärmt nur die Caches auf; der Offline-Schritt spielt den Scan erneut ab und bekommt Cache-Hits.```bash
fad-checker -s ./proj -e "^(client|internal)." --export-anonymized deps.json
fad-checker --import-anonymized deps.json # scans coordinates → OSV/NVD/CVE/registry/EOL + retire signatures fad-checker --export-cache fad-cache.tar.gz # bundle the warmed ~/.fad-checker/
fad-checker --import-cache fad-cache.tar.gz # merged into the enclave's own cache fad-checker -s ./proj --offline # re-collect locally (real paths) + cache hits
Was der Deskriptor (`fad-deps/1`) enthält vs. verwirft:
| Behalten (zum Scannen nötig) | Verworfen (Umgebung) |
| --- | --- |
| ecosystem, ecosystemType | Manifest-Pfade / pom-Pfade |
| namespace, name | aufgelöste Registry-URLs |
| version, versions | Integritäts-Hashes |
| scope, isDev | Parent-Ketten, Lockfile-Typ |
Der Online-Phasenbericht ist selbst pfadfrei; Befunde zu vendored JavaScript (retire.js) werden
**offline in Phase 3** erzeugt, da retire die tatsächlichen `.js`-Dateien benötigt; seine Signatur-
DB wird online vorgewärmt (Phase 2) und über `--export-cache` mitgeführt. Vollständige Offline-/Cache-Steuerung →
[`docs/USAGE.md`](https://github.com/9pings/fad-checker/blob/main/docs/USAGE.md).
## Docs
- [`docs/USAGE.md`](https://github.com/9pings/fad-checker/blob/main/docs/USAGE.md); jedes Flag und jeder Workflow: Offline-/Cache-Steuerung, private Registries, Konfigurationsdateien, Rezepte, Safety Rails.
- [`docs/ARCHITECTURE.md`](https://github.com/9pings/fad-checker/blob/main/docs/ARCHITECTURE.md); Interna: Codecs, Collection, Matching, Report-Pipeline.
- [`docs/COMPARISON.md`](https://github.com/9pings/fad-checker/blob/main/docs/COMPARISON.md); vs. OSV-Scanner / Trivy / Grype / OWASP DC / Snyk, und wie es build-frei bleibt.
- [`docs/BENCHMARK.md`](https://github.com/9pings/fad-checker/blob/main/docs/BENCHMARK.md) — reproduzierbarer Air-Gapped-Recall-Benchmark vs. OSV-Scanner auf einem öffentlichen 105-Modul-Projekt.
- [`docs/DATA-SOURCES.md`](https://github.com/9pings/fad-checker/blob/main/docs/DATA-SOURCES.md); die öffentlichen Datensätze, die fad-checker verwendet + ihre Lizenzen.
- [`docs/SPEC-audit-pro.md`](https://github.com/9pings/fad-checker/blob/main/docs/SPEC-audit-pro.md); die Audit-Grade-Features (Provenienz, differenzieller Audit, Methodik/Integrität) und warum jedes so gebaut wurde.
- [`CHANGELOG.md`](https://github.com/9pings/fad-checker/blob/main/CHANGELOG.md) · [`CLAUDE.md`](https://github.com/9pings/fad-checker/blob/main/CLAUDE.md); Release-Historie · Code-Level-Orientierung für Contributors.
## Contributing
Der nützlichste Beitrag zu einem jungen Scanner ist **ihm zu sagen, wo er falsch liegt**: führe ihn auf einem
echten Projekt aus und reiche einen [False-Positive-/False-Negative-Bericht](https://github.com/9pings/fad-checker/issues/new?template=false_positive.yml)
mit der Koordinate und dem Manifest-Snippet ein, das ihn erzeugt hat. Dev-Setup, Grundregeln und der
Codec-Erweiterungspunkt → [`CONTRIBUTING.md`](https://github.com/9pings/fad-checker/blob/main/CONTRIBUTING.md). Schwachstellen in fad-checker
selbst → [`SECURITY.md`](https://github.com/9pings/fad-checker/blob/main/SECURITY.md) (bitte privat melden).
**Zur KI-Unterstützung:** Diese Codebasis wird unter starker Nutzung von Claude Code geschrieben; [`CLAUDE.md`](https://github.com/9pings/fad-checker/blob/main/CLAUDE.md)
im Repo-Root ist genau das, wonach es aussieht. Der Maßstab, an dem sie gemessen wird, ist der, den du selbst
überprüfen kannst: **847 Tests** (`npm test`), die Zero-Network-Garantie, die durch einen Tripwire-Test erzwungen und
unter `unshare -rn` reproduzierbar ist, und Coverage-Zahlen, die gegen eine Snyk-Baseline gemessen statt
behauptet werden. `fad-checker` selbst verwendet **zur Laufzeit kein LLM**; Befunde stammen aus öffentlichen
Schwachstellen-Datenbanken und deterministischen Parsern, und es wird kein Berichtstext generiert. Vollständige
Erklärung, einschließlich wo das Review tatsächlich einen schlechten Befund erwischt hat →
[`AI_POLICY.md`](https://github.com/9pings/fad-checker/blob/main/AI_POLICY.md). Wo der Code diesen Maßstab nicht erfüllt, ist das ein Bug-Report, den ich will.
## License
MIT; siehe [`LICENSE`](https://github.com/9pings/fad-checker/blob/main/LICENSE).
| Klar auflisten, was nicht gescannt wurde — bevor der Kunde fragt ⁸ | ✅ Kap. 0 + 6.3 | ⚠️ Log | ⚠️ Log | ⚠️ Log | ⚠️ Log | ⚠️ Log |
| Sechs Monate später beantworten: „gegen welche Daten?“ ⁹ | ✅ | ❌ | ❌ | ⚠️ DB-Datum | ⚠️ NVD-Datum | ❌ |
| Einen Bericht senden, keinen JSON-Dump ¹⁰ | ✅ HTML + .doc | ⚠️ HTML-Liste | ⚠️ Template | ❌ | ⚠️ HTML-Liste | ⚠️ snyk-to-html |
| Diagramme, Drill-down pro CVE und eine einfügbare Word-Kopie ¹¹ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Delta-Berichte erstellen, die nur Änderungen zeigen ¹² | ✅ --baseline | ❌ | ❌ | ❌ | ❌ | ⚠️ Cloud |
4. Lizenzen (Opt-in: --licenses) | Registry-Metadaten + Maven-POMs → SPDX-Richtlinie | Die Lizenz jeder Abhängigkeit normalisiert auf SPDX und klassifiziert; Copyleft (GPL/AGPL/LGPL/MPL), proprietär und unbekannt zur Prüfung markiert |
| 5. Fix-Empfehlungen | berechnet | Pin-Rezepte pro Ökosystem: Maven <dependencyManagement>, Gradle constraints { }, npm overrides, yarn resolutions, composer require, pip install, dotnet add package |
| 6. Scan-Kontext & Einschränkungen | Provenienz-Manifest + Walk | 6.1 Gescannte Deskriptoren (jedes geparste Manifest) · 6.2 Ignorierte Verzeichnisse (ausgeschlossene Pfade + Regel) · 6.3 Methodik, Datenquellen & Einschränkungen (Aktualität der Datenquellen, Lauf-Konfiguration, ausdrückliche Erklärung, was fad-checker nicht bewertet) |
| Supply-Chain-Risiko (querschnittlich) | OSV MAL-… + Namensheuristik | Bekannt bösartige Pakete (blockieren immer das CI-Gate, jede --fail-on-Stufe) und vermutete Typosquats (--typosquat: ein npm/PyPI-Name mit einer Editierdistanz von 1 zu einem populären Paket; lodahs↔lodash) |