openpitstop 1.1.0 → 1.3.0
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/PRIVACY.md +88 -0
- package/README.md +50 -4
- package/dist/analyzers/security.js +85 -17
- package/dist/analyzers/security.js.map +1 -1
- package/dist/analyzers/securityStatic.d.ts +35 -0
- package/dist/analyzers/securityStatic.js +595 -0
- package/dist/analyzers/securityStatic.js.map +1 -0
- package/dist/analyzers/types.d.ts +4 -0
- package/dist/cli.js +32 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/integrity.js +23 -0
- package/dist/commands/integrity.js.map +1 -1
- package/dist/commands/pen.js +46 -0
- package/dist/commands/pen.js.map +1 -1
- package/dist/commands/scan.d.ts +5 -0
- package/dist/commands/scan.js +22 -1
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/try.js +7 -3
- package/dist/commands/try.js.map +1 -1
- package/dist/firstRun.d.ts +1 -0
- package/dist/firstRun.js +181 -0
- package/dist/firstRun.js.map +1 -0
- package/package.json +2 -1
package/PRIVACY.md
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# OpenPitStop Privacy Statement
|
|
2
|
+
|
|
3
|
+
**Zero telemetry. Zero SaaS. Zero accounts. Nothing leaves your machine unless
|
|
4
|
+
you explicitly ask for it.**
|
|
5
|
+
|
|
6
|
+
This is not a marketing sentence — it is a guarantee you can verify. OpenPitStop
|
|
7
|
+
is a local CLI: it reads files on your machine, writes reports to
|
|
8
|
+
`.pitstop/` on your machine, and makes network calls only in the exact,
|
|
9
|
+
explicit cases listed below.
|
|
10
|
+
|
|
11
|
+
## What OpenPitStop never does
|
|
12
|
+
|
|
13
|
+
- **No telemetry.** No analytics SDK, no anonymous usage stats, no crash
|
|
14
|
+
reporting, no "phone home" of any kind — not even a version check.
|
|
15
|
+
- **No SaaS, no accounts, no cloud.** There is no OpenPitStop server, no
|
|
16
|
+
dashboard, no login. Nothing to sign up for.
|
|
17
|
+
- **No code uploads.** `scan`, `try`, `verify`, `gate`, `integrity`, `pen`,
|
|
18
|
+
`ledger`, `watch`, `trends`, `digest`, `share`, `honesty` — every one of
|
|
19
|
+
these analyzes your files locally. Your source never leaves your machine.
|
|
20
|
+
- **No third-party processes** are ever spawned that you didn't initiate
|
|
21
|
+
(`scan` runs the scanners you have installed, e.g. `gitleaks`, `semgrep`,
|
|
22
|
+
`osv-scanner`, `pip-audit` — or honestly reports them as `skipped`).
|
|
23
|
+
- **The static security pass is fully offline.** It reads files and matches
|
|
24
|
+
patterns on your machine; it never sends code anywhere. The only network
|
|
25
|
+
calls in the entire security pipeline are the dependency audits listed
|
|
26
|
+
below.
|
|
27
|
+
- **No auto-updates.** The CLI never updates itself or checks for updates.
|
|
28
|
+
You control when you run a newer version (`npx openpitstop@latest`).
|
|
29
|
+
|
|
30
|
+
## The complete list of network calls
|
|
31
|
+
|
|
32
|
+
Every outbound connection OpenPitStop (or the tools it invokes) can make:
|
|
33
|
+
|
|
34
|
+
| When | What connects | What it sends | Where it goes |
|
|
35
|
+
|---|---|---|---|
|
|
36
|
+
| You run `npx openpitstop` or `npm i -g openpitstop` | npm client | package download (standard npm request) | registry.npmjs.org |
|
|
37
|
+
| `scan`/`try` — security category on a JS repo | `npm audit` | your lockfile's dependency list (the standard npm audit payload) | registry.npmjs.org |
|
|
38
|
+
| `scan`/`try` — security category on Python repos | `pip-audit` (if installed) | dependency list | its configured index |
|
|
39
|
+
| `scan`/`try` — security category on other stacks | `osv-scanner` (if installed) | manifest/lockfile data | the OSV API (osv.dev) |
|
|
40
|
+
| `pen` / `scan --ledger` | *nothing external* | — | none |
|
|
41
|
+
|
|
42
|
+
Everything else — including the entire `pen` and `ledger` dynamic phases — runs
|
|
43
|
+
against **your own app on localhost**: outbound HTTP is intercepted in-process
|
|
44
|
+
(nock) or rerouted to a local recording proxy, raw sockets are blocked, and
|
|
45
|
+
known payment-gateway hosts are answered with mocked receipts. If a request
|
|
46
|
+
cannot be intercepted, the run **aborts** (`exit 77`) rather than letting it
|
|
47
|
+
through. Nothing your app says ever reaches a real payment gateway or any real
|
|
48
|
+
third party.
|
|
49
|
+
|
|
50
|
+
Audit results (`npm audit`, `osv-scanner`) are cached locally for 24 hours
|
|
51
|
+
(keyed on your lockfile's hash) so repeated scans inside one fix loop don't hit
|
|
52
|
+
the registry again — the cache is a local file, deleted when you delete it.
|
|
53
|
+
|
|
54
|
+
## What OpenPitStop stores
|
|
55
|
+
|
|
56
|
+
All local, all in your repo:
|
|
57
|
+
|
|
58
|
+
- `.pitstop/` — sealed scan/verify/pen/ledger evidence, audit caches, memory
|
|
59
|
+
notes. Human-readable JSON, signed with a `sha256` fingerprint so the files
|
|
60
|
+
are tamper-evident (and so *you* can detect any tampering).
|
|
61
|
+
- `PITSTOP_REPORT.md`, `PITSTOP_PEN_REPORT.md`, `PITSTOP_BADGE.svg`,
|
|
62
|
+
`PITSTOP_CARD.html` — the reports you explicitly asked for.
|
|
63
|
+
- `PITSTOP_BADGE.json` — only with `report --badge-json`; it contains the
|
|
64
|
+
score, nothing else.
|
|
65
|
+
|
|
66
|
+
Nothing is written outside your project except the `/pitstop` slash-command
|
|
67
|
+
files that `pitstop install` places in your AI tool's own config directories —
|
|
68
|
+
and `install --uninstall` removes exactly those files and nothing else.
|
|
69
|
+
|
|
70
|
+
## How to verify all of this
|
|
71
|
+
|
|
72
|
+
1. **Read the source.** The CLI is fully open (MIT). The network surface is
|
|
73
|
+
small and greppable: `npm audit`, `osv-scanner`, `pip-audit`, and the
|
|
74
|
+
localhost-only sandbox in `src/sandbox/` are the entire surface.
|
|
75
|
+
2. **Watch it with a firewall.** Run `npx openpitstop scan` with your
|
|
76
|
+
firewall in "ask" mode: the only connections you'll be asked about are the
|
|
77
|
+
npm/osv audits above — and none at all during `pen` or `ledger`.
|
|
78
|
+
3. **Disconnect.** `scan`, `verify`, `gate`, `integrity`, `pen`, `ledger`
|
|
79
|
+
(ledger replays against your app locally) all run fully offline. Only the
|
|
80
|
+
dependency-audit categories degrade (to an honest `skipped` with a hint) —
|
|
81
|
+
they never block or fake anything.
|
|
82
|
+
|
|
83
|
+
## The short version
|
|
84
|
+
|
|
85
|
+
> OpenPitStop is a referee that lives on your machine. It keeps score in your
|
|
86
|
+
> repo, ships no data anywhere, and calls out any network at all — because the
|
|
87
|
+
> whole point is that the numbers can't be argued with. If we ever needed a
|
|
88
|
+
> server, the honesty brand would die with it; so we won't.
|
package/README.md
CHANGED
|
@@ -213,6 +213,17 @@ verbatim gate output you can screenshot and share: [Caught in the wild](docs/cau
|
|
|
213
213
|
|
|
214
214
|
One command, that's it:
|
|
215
215
|
|
|
216
|
+
```bash
|
|
217
|
+
npx openpitstop
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
No arguments needed: the CLI detects your AI tools, and asks what you want —
|
|
221
|
+
install `/pitstop` into them, score *this* repo (`try .`), or watch the 90-second
|
|
222
|
+
demo. Pick, and it does it. (In a non-interactive terminal it skips the
|
|
223
|
+
questions and prints the one-line menu instead.)
|
|
224
|
+
|
|
225
|
+
Or go straight to the files:
|
|
226
|
+
|
|
216
227
|
```bash
|
|
217
228
|
npx openpitstop@latest install
|
|
218
229
|
```
|
|
@@ -330,13 +341,33 @@ editing, knowing it's being watched.
|
|
|
330
341
|
### The scan
|
|
331
342
|
|
|
332
343
|
`pitstop scan` runs a bunch of checks on your repo: circular imports, known security
|
|
333
|
-
issues
|
|
334
|
-
`gitleaks`/`semgrep` when installed), duplicated code (`jscpd`), test results
|
|
344
|
+
issues, duplicated code (`jscpd`), test results
|
|
335
345
|
(jest/vitest/pytest plus native suites for Go, Rust, Flutter/Dart, .NET and Java
|
|
336
346
|
(Maven/Gradle) — pass/fail, duration, coverage), build speed, accessibility, flaky-test
|
|
337
347
|
and race-condition heuristics, and developer-experience checks (unused exports, duplicate
|
|
338
348
|
functions).
|
|
339
349
|
|
|
350
|
+
Security is two layers:
|
|
351
|
+
|
|
352
|
+
1. **Dependency audits** — `npm audit`, plus `pip-audit`/`osv-scanner` for Python and
|
|
353
|
+
other stacks, and `gitleaks`/`semgrep` when installed. A failed audit is reported as
|
|
354
|
+
`skipped` with a repair hint — deps that were never scanned are never reported as clean.
|
|
355
|
+
2. **The static vulnerability pass** (fully offline, every language, no tooling needed) —
|
|
356
|
+
the five classic classes plus the full posture: **SQL injection** (concatenated/
|
|
357
|
+
interpolated queries, ORM raw builders, `$where`, Python f-strings), **authentication**
|
|
358
|
+
(cleartext password compares, missing hashing, `Math.random` tokens, inline JWT
|
|
359
|
+
secrets, missing rate limits), **authorization** (unprotected data routes, admin
|
|
360
|
+
routes without role checks), **input validation** (unrestricted uploads, unvalidated
|
|
361
|
+
money fields, `eval`, XSS sinks), **secret management** (known credential formats,
|
|
362
|
+
inline secret literals, committed `.env` files) — plus command injection, path
|
|
363
|
+
traversal, SSRF, CORS+credentials, missing security headers, CSRF exposure, stack
|
|
364
|
+
leaks and sensitive logging.
|
|
365
|
+
|
|
366
|
+
Every static finding is labeled `[indicated]` and ships with its exact **fix**; `scan`
|
|
367
|
+
and `try` print the complete identify-and-solve list under the score box, so the report
|
|
368
|
+
is a worklist, not a scare. The full matrix — every detection and every fix — is in
|
|
369
|
+
[docs/security.md](docs/security.md).
|
|
370
|
+
|
|
340
371
|
Each check either contributes a real number, or prints `skipped` with a one-line hint on
|
|
341
372
|
how to install the tool it needs — it never makes up a number. Everything adds up to one
|
|
342
373
|
box that always opens with the **OpenPitStop Score**: a single 0–100 health number (with an
|
|
@@ -403,6 +434,7 @@ one-shot.
|
|
|
403
434
|
| Command | What it does |
|
|
404
435
|
|---|---|
|
|
405
436
|
| `pitstop install` / `install --uninstall` | Writes `/pitstop` into every supported tool (project + user level). `--uninstall` removes it all. `--hooks` also installs (or with `--uninstall`, removes) the git pre-commit gate. |
|
|
437
|
+
| `pitstop` (no args) | The guided first-run: detects your AI tools and git repo, then offers to install, score this repo (`try .`), or run the demo. Non-TTY prints the one-line menu instead. |
|
|
406
438
|
| `pitstop doctor` | Explains why categories show `skipped`: checks your toolchain (Node, git, jscpd, gitleaks, semgrep, pa11y) and prints copy-paste install hints. |
|
|
407
439
|
| `pitstop prompt [--args …]` | Prints the exact prompt your AI tool expands `/pitstop` into, with your arguments filled in — full transparency into what the agent was told. |
|
|
408
440
|
| `pitstop demo [demo]` | Scaffolds an intentionally-broken demo repo into a fresh temp dir (`demo-repo`, `demo-repo-integrity`, `demo-repo-fintech`, `demo-repo-generators`), initializes git, and scans it immediately. |
|
|
@@ -497,8 +529,12 @@ cheat its own referee. That separation is the product.
|
|
|
497
529
|
|
|
498
530
|
- **Windows** is CI-verified on every push (build + smoke on `ubuntu-latest` and
|
|
499
531
|
`windows-latest`), and the Windows-specific bugs were reproduced and fixed on a real
|
|
500
|
-
Windows host during development
|
|
501
|
-
|
|
532
|
+
Windows host during development. `watch`, `pen`, `pen --fix` and `scan --ledger` have
|
|
533
|
+
additionally been run end-to-end on a real Windows host against the demo repos: a live
|
|
534
|
+
watch delta, PROVEN ledger double-charges with sealed evidence, and honest pen
|
|
535
|
+
verdicts (including the honest "0 patches" case) all verified. The one remaining
|
|
536
|
+
caveat is breadth, not correctness: not every exotic repo shape has been manually
|
|
537
|
+
exercised on Windows.
|
|
502
538
|
- **Codex App / VS Code extension** isn't supported and won't be until OpenAI ships custom
|
|
503
539
|
slash commands; use Codex CLI for `/pitstop`.
|
|
504
540
|
- **Graceful degradation:** duplication (`jscpd`), secrets/code scanning (`gitleaks`,
|
|
@@ -529,6 +565,16 @@ cheat its own referee. That separation is the product.
|
|
|
529
565
|
after the fix), not from the static score — the static gate has nothing to say about a
|
|
530
566
|
runtime-only finding.
|
|
531
567
|
|
|
568
|
+
## Privacy
|
|
569
|
+
|
|
570
|
+
**Zero telemetry, zero SaaS, zero accounts — nothing leaves your machine unless you ask
|
|
571
|
+
it to.** OpenPitStop is a local CLI with no server and no phone-home: scans, gates and
|
|
572
|
+
pen tests run entirely on your machine, and the only network calls in the entire codebase
|
|
573
|
+
are the dependency audits you can see and opt out of (plus the `npx` download you
|
|
574
|
+
initiated). The full, auditable list — every connection, every cache, every file stored —
|
|
575
|
+
is in [PRIVACY.md](PRIVACY.md). The honesty brand is the product; that statement is the
|
|
576
|
+
receipt.
|
|
577
|
+
|
|
532
578
|
## Contributing
|
|
533
579
|
|
|
534
580
|
OpenPitStop is built to be extended — adding a whole new analyzer is a small, well-scoped
|
|
@@ -2,39 +2,61 @@ import crypto from "node:crypto";
|
|
|
2
2
|
import fs from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { commandExists, detectLanguage, safeExecAsync } from "./util.js";
|
|
5
|
+
import { analyzeSecurityStatic } from "./securityStatic.js";
|
|
5
6
|
/** How long an npm-audit result is reused before re-fetching from the registry. */
|
|
6
7
|
const AUDIT_TTL_MS = 24 * 60 * 60 * 1000;
|
|
7
8
|
export async function analyzeSecurity(repo) {
|
|
8
9
|
const lang = detectLanguage(repo);
|
|
9
|
-
|
|
10
|
+
// The offline static pass runs for EVERY language (even "unknown"): it is
|
|
11
|
+
// deterministic, needs no tooling, and covers the vulnerability classes
|
|
12
|
+
// that AI-generated code ships most often (SQL injection, secrets, XSS,
|
|
13
|
+
// authz gaps, money inputs). Its findings are labeled [indicated].
|
|
14
|
+
const issues = [...analyzeSecurityStatic(repo)];
|
|
10
15
|
let depNote;
|
|
11
16
|
if (lang === "js") {
|
|
12
17
|
// npm audit exits 1 when vulnerabilities exist but still prints the full
|
|
13
18
|
// JSON — capture stdout and persist it for parsing either way. The result
|
|
14
19
|
// is cached keyed on the lockfile hash: an unchanged lockfile (the common
|
|
15
20
|
// case inside one fix loop) makes the audit network call disappear.
|
|
16
|
-
const
|
|
17
|
-
if (
|
|
21
|
+
const audit = await npmAudit(repo);
|
|
22
|
+
if (audit.error) {
|
|
23
|
+
// Honesty over numbers: a broken lockfile means dependencies are NOT
|
|
24
|
+
// scanned — that is never reported as "clean".
|
|
25
|
+
depNote = audit.error;
|
|
26
|
+
}
|
|
27
|
+
else if (audit.stdout) {
|
|
18
28
|
const auditFile = path.join(repo, ".pitstop", "npm-audit.json");
|
|
19
29
|
fs.mkdirSync(path.dirname(auditFile), { recursive: true });
|
|
20
|
-
fs.writeFileSync(auditFile, stdout);
|
|
21
|
-
issues.push(...parseNpmAudit(stdout));
|
|
30
|
+
fs.writeFileSync(auditFile, audit.stdout);
|
|
31
|
+
issues.push(...parseNpmAudit(audit.stdout));
|
|
22
32
|
}
|
|
23
33
|
}
|
|
24
34
|
else if (lang === "python") {
|
|
25
35
|
if (commandExists("pip-audit")) {
|
|
26
36
|
const r = await safeExecAsync("pip-audit", ["-f", "json"], repo, 120000);
|
|
27
|
-
if (r.stdout)
|
|
37
|
+
if (r.stdout && (r.code === 0 || looksLikeJson(r.stdout))) {
|
|
28
38
|
issues.push(...parsePipAudit(r.stdout));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
depNote = `pip-audit failed (${firstLine(r.stderr || r.stdout)}) — deps not scanned`;
|
|
42
|
+
}
|
|
29
43
|
}
|
|
30
44
|
else {
|
|
31
45
|
// pip-audit missing — OSV understands pyproject.toml / poetry.lock etc.
|
|
32
|
-
|
|
46
|
+
const osv = await osvScan(repo);
|
|
47
|
+
if (osv.error)
|
|
48
|
+
depNote = osv.error;
|
|
49
|
+
else
|
|
50
|
+
issues.push(...osv.issues);
|
|
33
51
|
}
|
|
34
52
|
}
|
|
35
53
|
else if (lang !== "unknown") {
|
|
36
54
|
if (commandExists("osv-scanner")) {
|
|
37
|
-
|
|
55
|
+
const osv = await osvScan(repo);
|
|
56
|
+
if (osv.error)
|
|
57
|
+
depNote = osv.error;
|
|
58
|
+
else
|
|
59
|
+
issues.push(...osv.issues);
|
|
38
60
|
}
|
|
39
61
|
else {
|
|
40
62
|
depNote = `install osv-scanner (go install github.com/google/osv-scanner/cmd/osv-scanner@latest) to scan ${lang} dependencies`;
|
|
@@ -76,10 +98,26 @@ export async function analyzeSecurity(repo) {
|
|
|
76
98
|
}
|
|
77
99
|
return { status: "ok", issues };
|
|
78
100
|
}
|
|
101
|
+
/** The lockfile exists but npm refuses to read it — a real finding on its own. */
|
|
102
|
+
function lockfileHint() {
|
|
103
|
+
return "run `npm i --package-lock-only` to repair the lockfile, then re-scan";
|
|
104
|
+
}
|
|
105
|
+
function looksLikeJson(s) {
|
|
106
|
+
try {
|
|
107
|
+
JSON.parse(s);
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function firstLine(s) {
|
|
115
|
+
return (s || "").split(/\r?\n/).map((l) => l.trim()).filter(Boolean)[0] ?? "unknown error";
|
|
116
|
+
}
|
|
79
117
|
async function npmAudit(repo) {
|
|
80
118
|
const lockCandidate = ["package-lock.json", "npm-shrinkwrap.json", "package.json"].find((f) => fs.existsSync(path.join(repo, f)));
|
|
81
119
|
if (!lockCandidate)
|
|
82
|
-
return null;
|
|
120
|
+
return { stdout: null, error: null };
|
|
83
121
|
const hash = crypto
|
|
84
122
|
.createHash("sha1")
|
|
85
123
|
.update(fs.readFileSync(path.join(repo, lockCandidate)))
|
|
@@ -94,8 +132,12 @@ async function npmAudit(repo) {
|
|
|
94
132
|
if (cached &&
|
|
95
133
|
typeof cached.stdout === "string" &&
|
|
96
134
|
typeof cached.at === "string" &&
|
|
97
|
-
Date.now() - Date.parse(cached.at) < AUDIT_TTL_MS
|
|
98
|
-
|
|
135
|
+
Date.now() - Date.parse(cached.at) < AUDIT_TTL_MS &&
|
|
136
|
+
// Never trust a cached failure: only a parseable audit report is a
|
|
137
|
+
// valid cache hit (older versions cached stdout even when audit errored).
|
|
138
|
+
looksLikeJson(cached.stdout) &&
|
|
139
|
+
typeof JSON.parse(cached.stdout)?.vulnerabilities === "object") {
|
|
140
|
+
return { stdout: cached.stdout, error: null };
|
|
99
141
|
}
|
|
100
142
|
}
|
|
101
143
|
catch {
|
|
@@ -103,15 +145,35 @@ async function npmAudit(repo) {
|
|
|
103
145
|
}
|
|
104
146
|
}
|
|
105
147
|
const r = await safeExecAsync("npm", ["audit", "--json"], repo, 120000);
|
|
106
|
-
|
|
148
|
+
// Success means a real audit report: JSON that carries a `vulnerabilities`
|
|
149
|
+
// object. npm exits 0 on a clean audit and 1 when vulnerabilities exist —
|
|
150
|
+
// but it ALSO exits 1 and prints a JSON `error` payload when the audit
|
|
151
|
+
// itself fails (e.g. ENOLOCK). Anything without `vulnerabilities` is a
|
|
152
|
+
// failed audit, and reporting that as "clean" would be lying.
|
|
153
|
+
let auditJson = null;
|
|
154
|
+
try {
|
|
155
|
+
auditJson = JSON.parse(r.stdout || "");
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
auditJson = null;
|
|
159
|
+
}
|
|
160
|
+
if (auditJson && typeof auditJson.vulnerabilities === "object") {
|
|
107
161
|
try {
|
|
108
162
|
fs.writeFileSync(cachePath, JSON.stringify({ at: new Date().toISOString(), stdout: r.stdout }));
|
|
109
163
|
}
|
|
110
164
|
catch {
|
|
111
165
|
/* cache write is best-effort */
|
|
112
166
|
}
|
|
167
|
+
return { stdout: r.stdout, error: null };
|
|
113
168
|
}
|
|
114
|
-
|
|
169
|
+
const why = auditJson?.error?.message ||
|
|
170
|
+
auditJson?.error?.summary ||
|
|
171
|
+
firstLine(r.stderr || r.stdout) ||
|
|
172
|
+
"audit failed";
|
|
173
|
+
return {
|
|
174
|
+
stdout: null,
|
|
175
|
+
error: `npm audit failed (${why}) — deps not scanned; ${lockfileHint()}`,
|
|
176
|
+
};
|
|
115
177
|
}
|
|
116
178
|
/** Root-level manifests/lockfiles OSV understands (nested ones are scanned too). */
|
|
117
179
|
const OSV_ROOT_LOCKFILES = [
|
|
@@ -157,7 +219,7 @@ async function osvScan(repo) {
|
|
|
157
219
|
typeof cached.stdout === "string" &&
|
|
158
220
|
typeof cached.at === "string" &&
|
|
159
221
|
Date.now() - Date.parse(cached.at) < AUDIT_TTL_MS) {
|
|
160
|
-
return parseOsvScanner(cached.stdout);
|
|
222
|
+
return { issues: parseOsvScanner(cached.stdout), error: null };
|
|
161
223
|
}
|
|
162
224
|
}
|
|
163
225
|
catch {
|
|
@@ -165,16 +227,22 @@ async function osvScan(repo) {
|
|
|
165
227
|
}
|
|
166
228
|
}
|
|
167
229
|
const r = await safeExecAsync("osv-scanner", ["scan", "--format", "json", repo], repo, 180000);
|
|
168
|
-
|
|
230
|
+
// osv-scanner exits 1 when vulnerabilities are found but still prints the
|
|
231
|
+
// JSON report; any other nonzero exit with unusable output means the scan
|
|
232
|
+
// failed and deps were NOT checked — say so instead of reporting clean.
|
|
233
|
+
if (r.stdout && (r.code === 0 || (r.code === 1 && looksLikeJson(r.stdout)))) {
|
|
169
234
|
try {
|
|
170
235
|
fs.writeFileSync(cachePath, JSON.stringify({ at: new Date().toISOString(), stdout: r.stdout }));
|
|
171
236
|
}
|
|
172
237
|
catch {
|
|
173
238
|
/* cache write is best-effort */
|
|
174
239
|
}
|
|
175
|
-
return parseOsvScanner(r.stdout);
|
|
240
|
+
return { issues: parseOsvScanner(r.stdout), error: null };
|
|
176
241
|
}
|
|
177
|
-
return
|
|
242
|
+
return {
|
|
243
|
+
issues: [],
|
|
244
|
+
error: `osv-scanner failed (${firstLine(r.stderr || r.stdout) || "no output"}) — deps not scanned`,
|
|
245
|
+
};
|
|
178
246
|
}
|
|
179
247
|
function parseOsvScanner(stdout) {
|
|
180
248
|
const issues = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/analyzers/security.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/analyzers/security.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ScanIssue } from "./types.js";
|
|
2
|
+
export interface StaticRule {
|
|
3
|
+
category: string;
|
|
4
|
+
severity: string;
|
|
5
|
+
/** Optional path filter: only flag routes/paths matching this. */
|
|
6
|
+
pathFilter?: RegExp;
|
|
7
|
+
/** Optional guard words: when any appears inside the match window, the route is NOT flagged. */
|
|
8
|
+
guard?: RegExp;
|
|
9
|
+
/** Optional: when the match span contains this, the fix is already applied — skip. */
|
|
10
|
+
skipWhenInMatch?: RegExp;
|
|
11
|
+
/** Optional: extra predicate — false means the match is a false positive. */
|
|
12
|
+
accept?: (m: RegExpExecArray, content: string) => boolean;
|
|
13
|
+
re: RegExp;
|
|
14
|
+
describe: (m: RegExpExecArray) => string;
|
|
15
|
+
fix: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Rules are tried per file, in order. Match offsets are mapped to line
|
|
19
|
+
* numbers; matches are deduped by (category, file, line) so overlapping
|
|
20
|
+
* patterns never double-report the same line.
|
|
21
|
+
*/
|
|
22
|
+
export declare const STATIC_SECURITY_RULES: StaticRule[];
|
|
23
|
+
/**
|
|
24
|
+
* Repo-level findings that only make sense over the whole tree (e.g. "no
|
|
25
|
+
* rate limiter anywhere"). Cheap to compute, always honest about being
|
|
26
|
+
* indicated.
|
|
27
|
+
*/
|
|
28
|
+
export declare function analyzeSecurityRepoLevel(repo: string): ScanIssue[];
|
|
29
|
+
/**
|
|
30
|
+
* Scan a repo for the static vulnerability classes. Deterministic: files are
|
|
31
|
+
* walked in sorted order, findings are ordered by (severity, file, line),
|
|
32
|
+
* deduped by (category, file, line), capped. All findings are labeled
|
|
33
|
+
* `[indicated]` — static analysis points, it does not prove.
|
|
34
|
+
*/
|
|
35
|
+
export declare function analyzeSecurityStatic(repo: string): ScanIssue[];
|