Skip to content

Commit 96d1f83

Browse files
committed
README updates
1 parent f2815cd commit 96d1f83

File tree

1 file changed

+25
-24
lines changed

1 file changed

+25
-24
lines changed

README.md

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,33 @@
22

33
Enumerate Dependency Graph SBOMs from all repositories in a GitHub Enterprise (all orgs) or a single organization.
44

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.
68

79
> [!NOTE]
810
> This is an _unofficial_ tool created by Field Security Specialists, and is not officially supported by GitHub.
911
1012
## 🚀 Features
1113

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)
24+
- Interactive REPL for ad‑hoc PURL queries (history, graceful Ctrl+C handling)
25+
- YAML ignore file support to suppress specific advisory IDs or PURLs globally or scoped to an org / repo
26+
- Reason tracing: every search match shows which query matched; every malware match shows which advisory triggered it
27+
- Output:
28+
- Human-readable console output
29+
- JSON or CSV output (to stdout or file) with both search and malware matches
30+
- Optional SARIF 2.1.0 output per repository for malware matches with optional Code Scanning upload
2231
- Works with GitHub.com, GitHub Enterprise Server, GitHub Enterprise Managed Users and GitHub Enterprise Cloud with Data Residency (custom base URL)
23-
- Reason tracing: every search match shows which query matched; every malware match shows which advisory triggered it
24-
- Interactive REPL for ad‑hoc PURL queries (history, graceful Ctrl+C handling)
25-
- Optional progress bar while fetching SBOMs
26-
- 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
2932

3033
## Usage
3134

@@ -94,7 +97,7 @@ npm run start -- --sbom-cache sboms --purl-file queries.txt
9497
npm run start -- --sync-sboms --org my-org --sbom-cache sboms
9598
```
9699

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):
98101

99102
```bash
100103
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
161164
162165
##### Ignoring "Unbounded" Malware Advisories
163166
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.
165168

166169
Use the flag:
167170

@@ -174,10 +177,8 @@ When enabled, any malware match whose `vulnerableVersionRange` normalizes to one
174177
Heuristics currently treated as unbounded:
175178

176179
- `*`
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.
180+
- `>= 0`, `> 0`
181+
- `0`, `0.0.0`, `>= 0.0.0`
181182

182183
#### Advisory Date Cutoff
183184

@@ -263,7 +264,7 @@ npm run start -- --sbom-cache sboms --malware-cache malware-cache \
263264
Notes:
264265

265266
- `--upload-sarif` requires `--sarif-dir` and `--match-malware`
266-
- A token with `security_events` (and appropriate repo/org scope) is required for uploads
267+
- A token with appropriate repo/org scope and access is required for uploads
267268
- The tool attempts to resolve the default branch commit SHA for each repo; if it cannot, that repo's upload is skipped
268269
- SARIF upload merges are handled by GitHub; repeated uploads for the same commit replace earlier results for the same tool
269270

0 commit comments

Comments
 (0)