fad-checker 2.4.5 → 2.4.6
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.
- package/README.md +1 -1
- package/lib/codecs/go/parse.js +12 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
- **No build tools**; reads `pom.xml`, `build.gradle(.kts)`/`gradle.lockfile`/`libs.versions.toml`, `package-lock`/`yarn.lock`/`pnpm-lock`, `composer.lock`, `poetry`/`Pipfile`/`uv`/`pdm` locks, `packages.lock.json`/`*.csproj`, `go.mod`, `Gemfile.lock` directly. No `mvn`/`gradle`/`npm install`/`pip`/`dotnet restore`/`go build`/`bundle`, no `node_modules/`. → [how it stays build-free](docs/COMPARISON.md#how-its-autonomous-no-build-tools)
|
|
26
26
|
- **CVE, merged & prioritised**; CVEProject + OSV.dev + NVD, CPE/version cross-checked to cut false positives, ranked **CISA KEV → EPSS → CVSS**.
|
|
27
27
|
- **Per-module Maven version mediation**; recovers vulnerable transitive versions that a global `<dependencyManagement>` pin hides in another module, applying Maven's own nearest-wins semantics per module rather than resolving the whole reactor as one tree.
|
|
28
|
-
- **Air-gapped**; **zero network under `--offline`** (regression-tested), offline Maven transitive resolution, and `--osv-db` for cache-independent offline OSV recall. Benchmarked
|
|
28
|
+
- **Air-gapped**; **zero network under `--offline`** (regression-tested), offline Maven transitive resolution, and `--osv-db` for cache-independent offline OSV recall. Benchmarked against OSV-Scanner, Snyk, Trivy and Grype+Syft on **six public projects across six ecosystems**: identical finding sets on npm, RubyGems and Composer (parity is the correct outcome when the graph is in the lockfile), and on Maven — where it is not — fad recovers **657/657** of OSV-Scanner's *online* result with **no network interface at all**, versus 45 / 40 / 37 for the others. At full capability no tool finds everything, fad included: it leads at 87% of a 908-pair union and still misses 118 that Snyk finds. → [Benchmark](docs/BENCHMARK.md) · [Air-gapped](#air-gapped-audits)
|
|
29
29
|
- **Supply-chain risk**; known-**malicious** advisories (`MAL-`, always block the CI gate) + suspected **typosquats** (`--typosquat`).
|
|
30
30
|
- **Lifecycle**; EOL (endoflife.date), obsolete/deprecated, outdated; across every ecosystem.
|
|
31
31
|
- **Licenses** *(opt-in `--licenses`)*; SPDX-normalised, copyleft/proprietary flagged.
|
package/lib/codecs/go/parse.js
CHANGED
|
@@ -91,10 +91,20 @@ function parseGoSum(text) {
|
|
|
91
91
|
for (const raw of String(text || "").split(/\r?\n/)) {
|
|
92
92
|
const m = raw.trim().match(/^(\S+)\s+(v\S+?)(\/go\.mod)?\s+h1:/);
|
|
93
93
|
if (!m) continue;
|
|
94
|
+
// go.sum records two kinds of line per module:
|
|
95
|
+
// mod ver h1:… the module ZIP was downloaded → it IS in the build
|
|
96
|
+
// mod ver/go.mod h1:… only its go.mod was read, during minimal version selection
|
|
97
|
+
// A module carrying only the second kind was weighed and rejected: it sits on no
|
|
98
|
+
// classpath, and scanning it invents a dependency. Measured on prometheus v2.30.0
|
|
99
|
+
// (go 1.14, so go.mod lists direct deps only and go.sum is our transitive source):
|
|
100
|
+
// 187 modules have a zip hash, 391 have a go.mod hash alone — and taking all of
|
|
101
|
+
// them put gin, echo AND go-restful in one report, three mutually exclusive web
|
|
102
|
+
// frameworks. 70% of that project's Go production findings came from modules that
|
|
103
|
+
// were never built.
|
|
104
|
+
if (m[3]) continue;
|
|
94
105
|
const name = m[1];
|
|
95
106
|
const ver = stripV(m[2]);
|
|
96
|
-
//
|
|
97
|
-
// comment promised this but the code kept the first one encountered).
|
|
107
|
+
// Several versions can genuinely be downloaded in one graph; keep the highest.
|
|
98
108
|
const prev = byMod.get(name);
|
|
99
109
|
if (!prev || compareMavenVersions(ver, prev) > 0) byMod.set(name, ver);
|
|
100
110
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fad-checker",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.6",
|
|
4
4
|
"description": "Scan ALL Maven, Gradle, npm, Yarn, Composer, Python, C#/.NET, Go & Ruby dependencies — plus embedded JARs (fat-jars/war/ear) — in a source tree ONE SHOT without mvn/python/etc — CVE (EPSS/KEV-prioritised), EOL, obsolete, outdated & licenses, with SBOM/CSAF/SARIF/JSON exports, CI gating and fix recos",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sca",
|