You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+25-24Lines changed: 25 additions & 24 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,30 +2,33 @@
2
2
3
3
Enumerate Dependency Graph SBOMs from all repositories in a GitHub Enterprise (all orgs) or a single organization.
4
4
5
-
Search collected SBOMs by PURL, cache them for offline analysis, sync malware security advisories, and match SBOM packages against those advisories. Supports human-readable and JSON output with file output for JSON.
5
+
Search collected SBOMs by PURL, cache them for offline analysis, sync malware security advisories, and match SBOM packages against those advisories.
6
+
7
+
Supports human-readable, JSON, CSV and SARIF output. SARIF alerts can be uploaded to GitHub Code Scanning.
6
8
7
9
> [!NOTE]
8
10
> This is an _unofficial_ tool created by Field Security Specialists, and is not officially supported by GitHub.
9
11
10
12
## 🚀 Features
11
13
12
-
- Enumerate orgs in an Enterprise and repos in each org
13
-
- Fetch SBOM per repo with concurrency + optional delay and retry/throttle handling
14
-
- Search for packages by exact PURL, semver/range, or wildcard (trailing `/*` after the package name path segment)
15
-
- Cache SBOMs in a directory (one file per repository)
16
-
- SBOMs are written incrementally to allow for stopping and resuming
17
-
- Sync malware security advisories from the GitHub Advisory Database
18
-
- Version-aware matching of SBOM packages vs. malware advisories
19
-
- Optional suppression of "unbounded" malware advisories that claim all versions are affected (e.g. vulnerable range '*', '>=0')
20
-
- Optional SARIF 2.1.0 output per repository for malware matches with optional Code Scanning upload
21
-
- YAML ignore file support to suppress specific advisory IDs or PURLs globally or scoped to an org / repo
14
+
- Enumerate organizations in an Enterprise and repositories in each organization
15
+
- Fetch SBOM per repository with concurrency + optional delay and retry/throttle handling
16
+
- Optional progress bar while fetching SBOMs
17
+
- Option to suppress secondary rate limit warnings, and full quiet mode to suppress informative messages
18
+
- Adaptive backoff: each secondary rate limit hit increases the SBOM fetch delay by 10% to reduce future throttling
19
+
- Offline caching of SBOMs and security advisories with incremental updates
20
+
- Matching:
21
+
- Version-aware matching of SBOM packages against malware advisories
22
+
- Optional suppression of "unbounded" malware advisories that state all versions are affected (e.g. vulnerable range '*', '>=0')
23
+
- Search for packages by exact PURL, semver/range, or wildcard (trailing `/*` after the package name path segment)
- Intelligent skip logic: if the repository was pushed to, but the default branch head commit date isn't newer than the prior SBOM retrieval, the existing cached SBOM is reused
27
-
- Option to suppress secondary rate limit warnings, and full quiet mode to suppress informative messages
28
-
- Adaptive backoff: each secondary rate limit hit increases the SBOM fetch delay by 10% to reduce future throttling
npm run start -- --sync-sboms --org my-org --sbom-cache sboms
95
98
```
96
99
97
-
1. Later offline search (no API calls; uses previously written per‑repo JSON):
100
+
2. Later offline search (no API calls; uses previously written per‑repo JSON):
98
101
99
102
```bash
100
103
npm run start -- --sbom-cache sboms --purl pkg:npm/[email protected]
@@ -161,7 +164,7 @@ The first matching rule suppresses the finding; output logs will show how many w
161
164
162
165
##### Ignoring "Unbounded" Malware Advisories
163
166
164
-
Some malware advisories list a vulnerable version range that effectively covers every possible version of a package (examples: `*`, `>=0`, `0`, `0.0.0`, `>=0.0.0`). These can create low‑signal noise when you only want to focus on advisories with actionable version scoping.
167
+
Some malware advisories list a vulnerable version range that effectively covers every possible version of a package (examples: `*`, `>=0`, `0`, `0.0.0`, `>=0.0.0`). These can create low‑signal noise, such as from name-shadowing attacks against a private package.
165
168
166
169
Use the flag:
167
170
@@ -174,10 +177,8 @@ When enabled, any malware match whose `vulnerableVersionRange` normalizes to one
174
177
Heuristics currently treated as unbounded:
175
178
176
179
- `*`
177
-
- `>=0`, `>0`
178
-
- `0`, `0.0.0`, `>=0.0.0`
179
-
180
-
If you need broader or narrower interpretation (e.g., treat `>=0 <999999.0.0` as unbounded) please file an issue or extend the matcher.
0 commit comments