audit-tools 0.30.35 → 0.30.37
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/dist/audit/cli/auditStep.d.ts +2 -0
- package/dist/audit/cli/auditStep.d.ts.map +1 -1
- package/dist/audit/cli/auditStep.js +1 -0
- package/dist/audit/cli/auditStep.js.map +1 -1
- package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
- package/dist/audit/cli/nextStepCommand.js +9 -0
- package/dist/audit/cli/nextStepCommand.js.map +1 -1
- package/dist/audit/cli/nextStepHelpers.d.ts +8 -1
- package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
- package/dist/audit/cli/nextStepHelpers.js +2 -0
- package/dist/audit/cli/nextStepHelpers.js.map +1 -1
- package/dist/audit/extractors/analyzers/acquisitionEngine.d.ts +48 -5
- package/dist/audit/extractors/analyzers/acquisitionEngine.d.ts.map +1 -1
- package/dist/audit/extractors/analyzers/acquisitionEngine.js +116 -17
- package/dist/audit/extractors/analyzers/acquisitionEngine.js.map +1 -1
- package/dist/audit/extractors/analyzers/binaryAcquisition.d.ts +65 -0
- package/dist/audit/extractors/analyzers/binaryAcquisition.d.ts.map +1 -0
- package/dist/audit/extractors/analyzers/binaryAcquisition.js +153 -0
- package/dist/audit/extractors/analyzers/binaryAcquisition.js.map +1 -0
- package/dist/audit/extractors/analyzers/candidates.d.ts +23 -0
- package/dist/audit/extractors/analyzers/candidates.d.ts.map +1 -0
- package/dist/audit/extractors/analyzers/candidates.js +214 -0
- package/dist/audit/extractors/analyzers/candidates.js.map +1 -0
- package/dist/audit/extractors/analyzers/registry.d.ts +5 -2
- package/dist/audit/extractors/analyzers/registry.d.ts.map +1 -1
- package/dist/audit/extractors/analyzers/registry.js +3 -1
- package/dist/audit/extractors/analyzers/registry.js.map +1 -1
- package/dist/audit/extractors/graph.d.ts +2 -1
- package/dist/audit/extractors/graph.d.ts.map +1 -1
- package/dist/audit/extractors/graph.js +7 -2
- package/dist/audit/extractors/graph.js.map +1 -1
- package/dist/audit/extractors/risk.d.ts +1 -1
- package/dist/audit/extractors/risk.d.ts.map +1 -1
- package/dist/audit/extractors/risk.js +4 -2
- package/dist/audit/extractors/risk.js.map +1 -1
- package/dist/audit/io/artifacts.d.ts +4 -2
- package/dist/audit/io/artifacts.d.ts.map +1 -1
- package/dist/audit/io/artifacts.js +1 -0
- package/dist/audit/io/artifacts.js.map +1 -1
- package/dist/audit/orchestrator/acquisitionExecutor.d.ts +45 -0
- package/dist/audit/orchestrator/acquisitionExecutor.d.ts.map +1 -0
- package/dist/audit/orchestrator/acquisitionExecutor.js +94 -0
- package/dist/audit/orchestrator/acquisitionExecutor.js.map +1 -0
- package/dist/audit/orchestrator/advanceTypes.d.ts +10 -0
- package/dist/audit/orchestrator/advanceTypes.d.ts.map +1 -1
- package/dist/audit/orchestrator/dependencyMap.d.ts +1 -0
- package/dist/audit/orchestrator/dependencyMap.d.ts.map +1 -1
- package/dist/audit/orchestrator/dependencyMap.js +11 -0
- package/dist/audit/orchestrator/dependencyMap.js.map +1 -1
- package/dist/audit/orchestrator/executorRunners.d.ts.map +1 -1
- package/dist/audit/orchestrator/executorRunners.js +2 -0
- package/dist/audit/orchestrator/executorRunners.js.map +1 -1
- package/dist/audit/orchestrator/executors.d.ts.map +1 -1
- package/dist/audit/orchestrator/executors.js +5 -0
- package/dist/audit/orchestrator/executors.js.map +1 -1
- package/dist/audit/orchestrator/fileAnchors.d.ts +1 -1
- package/dist/audit/orchestrator/fileAnchors.d.ts.map +1 -1
- package/dist/audit/orchestrator/fileAnchors.js +2 -1
- package/dist/audit/orchestrator/fileAnchors.js.map +1 -1
- package/dist/audit/orchestrator/flowRequeue.d.ts +1 -1
- package/dist/audit/orchestrator/flowRequeue.d.ts.map +1 -1
- package/dist/audit/orchestrator/flowRequeue.js.map +1 -1
- package/dist/audit/orchestrator/ingestionExecutors.d.ts +1 -1
- package/dist/audit/orchestrator/ingestionExecutors.d.ts.map +1 -1
- package/dist/audit/orchestrator/ingestionExecutors.js +2 -1
- package/dist/audit/orchestrator/ingestionExecutors.js.map +1 -1
- package/dist/audit/orchestrator/nextStep.d.ts.map +1 -1
- package/dist/audit/orchestrator/nextStep.js +1 -0
- package/dist/audit/orchestrator/nextStep.js.map +1 -1
- package/dist/audit/orchestrator/planning.d.ts +1 -1
- package/dist/audit/orchestrator/planning.d.ts.map +1 -1
- package/dist/audit/orchestrator/planning.js +2 -4
- package/dist/audit/orchestrator/planning.js.map +1 -1
- package/dist/audit/orchestrator/requeue.d.ts +1 -1
- package/dist/audit/orchestrator/requeue.d.ts.map +1 -1
- package/dist/audit/orchestrator/requeue.js.map +1 -1
- package/dist/audit/orchestrator/requeueCommand.d.ts +1 -1
- package/dist/audit/orchestrator/requeueCommand.d.ts.map +1 -1
- package/dist/audit/orchestrator/requeueCommand.js.map +1 -1
- package/dist/audit/orchestrator/requeueUtils.d.ts +1 -1
- package/dist/audit/orchestrator/requeueUtils.d.ts.map +1 -1
- package/dist/audit/orchestrator/requeueUtils.js +1 -3
- package/dist/audit/orchestrator/requeueUtils.js.map +1 -1
- package/dist/audit/orchestrator/selectiveDeepening/lensVerification.d.ts +1 -1
- package/dist/audit/orchestrator/selectiveDeepening/lensVerification.d.ts.map +1 -1
- package/dist/audit/orchestrator/selectiveDeepening/shared.d.ts +2 -2
- package/dist/audit/orchestrator/selectiveDeepening/shared.d.ts.map +1 -1
- package/dist/audit/orchestrator/selectiveDeepening/shared.js +2 -1
- package/dist/audit/orchestrator/selectiveDeepening/shared.js.map +1 -1
- package/dist/audit/orchestrator/state.d.ts.map +1 -1
- package/dist/audit/orchestrator/state.js +4 -0
- package/dist/audit/orchestrator/state.js.map +1 -1
- package/dist/audit/orchestrator/syntaxResolutionExecutor.d.ts.map +1 -1
- package/dist/audit/orchestrator/syntaxResolutionExecutor.js +3 -2
- package/dist/audit/orchestrator/syntaxResolutionExecutor.js.map +1 -1
- package/dist/audit/orchestrator/taskBuilder.d.ts +2 -2
- package/dist/audit/orchestrator/taskBuilder.d.ts.map +1 -1
- package/dist/audit/orchestrator/taskBuilder.js +32 -30
- package/dist/audit/orchestrator/taskBuilder.js.map +1 -1
- package/dist/audit/orchestrator/trivialAudit.d.ts +1 -1
- package/dist/audit/orchestrator/trivialAudit.d.ts.map +1 -1
- package/dist/audit/orchestrator/trivialAudit.js +3 -1
- package/dist/audit/orchestrator/trivialAudit.js.map +1 -1
- package/dist/audit/reporting/mergeFindings.d.ts +1 -1
- package/dist/audit/reporting/mergeFindings.d.ts.map +1 -1
- package/dist/audit/reporting/mergeFindings.js +3 -9
- package/dist/audit/reporting/mergeFindings.js.map +1 -1
- package/dist/audit/reporting/synthesis.d.ts +1 -1
- package/dist/audit/reporting/synthesis.d.ts.map +1 -1
- package/dist/audit/types/externalAnalyzer.d.ts +74 -0
- package/dist/audit/types/externalAnalyzer.d.ts.map +1 -1
- package/dist/audit/types/externalAnalyzer.js +31 -0
- package/dist/audit/types/externalAnalyzer.js.map +1 -1
- package/dist/audit/validation/artifacts.d.ts.map +1 -1
- package/dist/audit/validation/artifacts.js +1 -1
- package/dist/audit/validation/artifacts.js.map +1 -1
- package/dist/shared/types/sessionConfig.d.ts +17 -0
- package/dist/shared/types/sessionConfig.d.ts.map +1 -1
- package/dist/shared/types/sessionConfig.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { existsSync } from "node:fs";
|
|
1
|
+
import { existsSync, readFileSync, rmSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { runTracked, } from "audit-tools/shared";
|
|
4
4
|
import { normalizeGenericExternalResults, normalizeGenericExternalEdges, } from "../../adapters/normalizeExternal.js";
|
|
5
|
+
import { resolveBinary, } from "./binaryAcquisition.js";
|
|
5
6
|
/**
|
|
6
7
|
* F5 — external analyzer acquisition engine.
|
|
7
8
|
*
|
|
@@ -23,21 +24,22 @@ import { normalizeGenericExternalResults, normalizeGenericExternalEdges, } from
|
|
|
23
24
|
* its `AnalyzerSetting` (auto|ephemeral|permanent) — even a `permanent`,
|
|
24
25
|
* pre-installed tool cannot spawn without consent (CE-005). The small
|
|
25
26
|
* value-curated DEFAULT set runs without prompting.
|
|
26
|
-
* - **Own-vs-acquire boundary.** git-history
|
|
27
|
-
*
|
|
27
|
+
* - **Own-vs-acquire boundary.** git-history is OWNED by F6 and is rejected at
|
|
28
|
+
* registration — never acquired here. Secret scanning is ACQUIRED (gitleaks).
|
|
28
29
|
* - **Run-safety gate written once** (`runSafetyGate`): capability-probe, pin
|
|
29
30
|
* version, read-only/sandboxed argv, degrade-to-empty.
|
|
30
31
|
* - **Degrade-to-empty + report-skipped-never-silently.** Every candidate
|
|
31
32
|
* yields exactly one {@link ExternalAnalyzerToolStatus}; a failure never
|
|
32
33
|
* throws and never silently drops the candidate.
|
|
33
34
|
*/
|
|
34
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* Tool ids OWNED by F6 and never acquired. Only git-history mining is OWNED — it
|
|
37
|
+
* is a truly-agnostic signal with no ecosystem tool. Secret scanning is ACQUIRED
|
|
38
|
+
* (gitleaks), not owned, so it is deliberately NOT listed here.
|
|
39
|
+
*/
|
|
35
40
|
export const OWNED_TOOL_IDS = new Set([
|
|
36
41
|
"git-history",
|
|
37
42
|
"git-history-mining",
|
|
38
|
-
"secret-scan",
|
|
39
|
-
"secret-scanner",
|
|
40
|
-
"secrets",
|
|
41
43
|
]);
|
|
42
44
|
/** Marker-file ecosystem detection — deterministic, no language→tool table. */
|
|
43
45
|
function hasAnyMarker(root, markers) {
|
|
@@ -66,6 +68,8 @@ function runnerProbeArgv(runner) {
|
|
|
66
68
|
case "pipx": return ["pipx", "--version"];
|
|
67
69
|
case "cargo": return ["cargo", "--version"];
|
|
68
70
|
case "bundle": return ["bundle", "--version"];
|
|
71
|
+
// `binary` is resolved (+ checksum-gated) ahead of the engine — no runner probe.
|
|
72
|
+
case "binary": return [];
|
|
69
73
|
}
|
|
70
74
|
}
|
|
71
75
|
function runnerPrefix(runner, spec) {
|
|
@@ -75,6 +79,9 @@ function runnerPrefix(runner, spec) {
|
|
|
75
79
|
case "pipx": return ["pipx", "run", "--spec", spec];
|
|
76
80
|
case "cargo": return ["cargo", spec];
|
|
77
81
|
case "bundle": return ["bundle", "exec", spec];
|
|
82
|
+
// For `binary` the resolved executable path is supplied via
|
|
83
|
+
// options.resolvedBinaries and used directly — this is never called.
|
|
84
|
+
case "binary": return [];
|
|
78
85
|
}
|
|
79
86
|
}
|
|
80
87
|
/**
|
|
@@ -154,16 +161,39 @@ export function runExternalAnalyzer(candidate, root, options = {}) {
|
|
|
154
161
|
status: { tool: candidate.id, resolved: false, status: "skipped", error: denied },
|
|
155
162
|
};
|
|
156
163
|
}
|
|
157
|
-
//
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
164
|
+
// Resolve the argv prefix. A `binary` candidate is gated by binary-acquisition
|
|
165
|
+
// (PATH probe / checksum-verified download) AHEAD of the engine, so it skips the
|
|
166
|
+
// runner probe and uses its resolved executable path; everything else passes the
|
|
167
|
+
// capability-probe run-safety gate before its first real spawn.
|
|
168
|
+
let prefix;
|
|
169
|
+
if (candidate.runner === "binary") {
|
|
170
|
+
const resolved = options.resolvedBinaries?.[candidate.id];
|
|
171
|
+
if (!resolved) {
|
|
172
|
+
log("[f5] %s binary not acquired", candidate.id);
|
|
173
|
+
return {
|
|
174
|
+
results: emptyResults(candidate.id),
|
|
175
|
+
status: {
|
|
176
|
+
tool: candidate.id,
|
|
177
|
+
resolved: false,
|
|
178
|
+
status: "not_resolved",
|
|
179
|
+
error: "binary not acquired (PATH probe failed and download unavailable)",
|
|
180
|
+
},
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
prefix = [resolved];
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
const gate = runSafetyGate(candidate, run, root);
|
|
187
|
+
if (!gate.ok) {
|
|
188
|
+
log("[f5] %s safety gate failed: %s", candidate.id, gate.reason);
|
|
189
|
+
return {
|
|
190
|
+
results: emptyResults(candidate.id),
|
|
191
|
+
status: { tool: candidate.id, resolved: false, status: "not_resolved", error: gate.reason },
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
prefix = runnerPrefix(candidate.runner, candidate.spec);
|
|
165
195
|
}
|
|
166
|
-
const argv = candidate.buildArgv(
|
|
196
|
+
const argv = candidate.buildArgv(prefix, root);
|
|
167
197
|
const command = argv.join(" ");
|
|
168
198
|
let result;
|
|
169
199
|
try {
|
|
@@ -194,9 +224,28 @@ export function runExternalAnalyzer(candidate, root, options = {}) {
|
|
|
194
224
|
},
|
|
195
225
|
};
|
|
196
226
|
}
|
|
227
|
+
// Tools that report to a file (gitleaks) are read from there; stdout tools use
|
|
228
|
+
// stdout. The report file is best-effort removed after parsing.
|
|
229
|
+
let parseInput = result.stdout;
|
|
230
|
+
if (candidate.reportFile) {
|
|
231
|
+
const reportPath = candidate.reportFile(root);
|
|
232
|
+
try {
|
|
233
|
+
parseInput = existsSync(reportPath) ? readFileSync(reportPath, "utf8") : "";
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
parseInput = "";
|
|
237
|
+
}
|
|
238
|
+
try {
|
|
239
|
+
if (existsSync(reportPath))
|
|
240
|
+
rmSync(reportPath, { force: true });
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
/* best-effort */
|
|
244
|
+
}
|
|
245
|
+
}
|
|
197
246
|
let items;
|
|
198
247
|
try {
|
|
199
|
-
items = candidate.parse(
|
|
248
|
+
items = candidate.parse(parseInput);
|
|
200
249
|
}
|
|
201
250
|
catch (error) {
|
|
202
251
|
return {
|
|
@@ -241,6 +290,56 @@ export function registerExternalAnalyzers(candidates) {
|
|
|
241
290
|
}
|
|
242
291
|
return accepted;
|
|
243
292
|
}
|
|
293
|
+
/**
|
|
294
|
+
* Resolve (acquiring if absent) the executable for every `runner: "binary"`
|
|
295
|
+
* candidate, ahead of the synchronous engine. This is where the async network
|
|
296
|
+
* I/O + checksum gate lives. Owned tools and non-binary candidates are skipped.
|
|
297
|
+
* Never throws; an unresolved binary yields a `not_resolved`/`skipped` status so
|
|
298
|
+
* the caller can record the coverage gap (never silently dropped).
|
|
299
|
+
*/
|
|
300
|
+
export async function resolveBinaryCandidates(candidates, root, options = {}) {
|
|
301
|
+
const resolvedBinaries = {};
|
|
302
|
+
const unresolvedStatuses = [];
|
|
303
|
+
for (const candidate of candidates) {
|
|
304
|
+
if (candidate.runner !== "binary" || !candidate.binary)
|
|
305
|
+
continue;
|
|
306
|
+
if (OWNED_TOOL_IDS.has(candidate.id))
|
|
307
|
+
continue;
|
|
308
|
+
if (!candidate.detect(root)) {
|
|
309
|
+
unresolvedStatuses.push({
|
|
310
|
+
tool: candidate.id,
|
|
311
|
+
resolved: false,
|
|
312
|
+
status: "skipped",
|
|
313
|
+
error: "ecosystem not detected",
|
|
314
|
+
});
|
|
315
|
+
continue;
|
|
316
|
+
}
|
|
317
|
+
const setting = settingFor(options.analyzers, candidate.id);
|
|
318
|
+
const denied = admitSpawn(candidate, setting, options.consentToken);
|
|
319
|
+
if (denied) {
|
|
320
|
+
unresolvedStatuses.push({
|
|
321
|
+
tool: candidate.id,
|
|
322
|
+
resolved: false,
|
|
323
|
+
status: "skipped",
|
|
324
|
+
error: denied,
|
|
325
|
+
});
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
const resolution = await resolveBinary(candidate.binary, options);
|
|
329
|
+
if (resolution.command) {
|
|
330
|
+
resolvedBinaries[candidate.id] = resolution.command;
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
unresolvedStatuses.push({
|
|
334
|
+
tool: candidate.id,
|
|
335
|
+
resolved: false,
|
|
336
|
+
status: "not_resolved",
|
|
337
|
+
error: resolution.note ?? "binary unavailable",
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
return { resolvedBinaries, unresolvedStatuses };
|
|
342
|
+
}
|
|
244
343
|
/**
|
|
245
344
|
* Drive the whole registered candidate set through the engine for one repo,
|
|
246
345
|
* collecting one status per candidate. Owned tools are rejected at registration;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acquisitionEngine.js","sourceRoot":"","sources":["../../../../src/audit/extractors/analyzers/acquisitionEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"acquisitionEngine.js","sourceRoot":"","sources":["../../../../src/audit/extractors/analyzers/acquisitionEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type RunTrackedResult } from "audit-tools/shared";
|
|
2
|
+
/**
|
|
3
|
+
* Generic acquisition of a standalone mature analyzer BINARY (gitleaks,
|
|
4
|
+
* trufflehog, …) that has no language package-manager runner. The own-vs-acquire
|
|
5
|
+
* policy's "acquire the mature tool" half for tools shipped as release binaries.
|
|
6
|
+
*
|
|
7
|
+
* Resolution order (all degrade-to-unavailable, never throw):
|
|
8
|
+
* 1. PATH — the tool is already installed (`<tool> version` probes 0).
|
|
9
|
+
* 2. cache — a previously-downloaded pinned binary is present + executable.
|
|
10
|
+
* 3. download — fetch the pinned GitHub-release asset for THIS os/arch over
|
|
11
|
+
* HTTPS, fetch that release's `checksums.txt`, SHA256-verify the
|
|
12
|
+
* asset against it, extract via the system `tar`, cache, return.
|
|
13
|
+
*
|
|
14
|
+
* Security invariants: version is PINNED (reproducibility); the downloaded asset
|
|
15
|
+
* is SHA256-verified against the official release checksums BEFORE it is extracted
|
|
16
|
+
* or executed; the fetcher is injected so the engine is testable without network
|
|
17
|
+
* and an absent network degrades cleanly. A checksum mismatch is fatal-to-this-tool
|
|
18
|
+
* (returns `unavailable`), never executed.
|
|
19
|
+
*/
|
|
20
|
+
/** Injected network fetch: returns the URL's bytes, or `null` when unavailable. */
|
|
21
|
+
export interface BinaryFetcher {
|
|
22
|
+
(url: string): Promise<Uint8Array | null>;
|
|
23
|
+
}
|
|
24
|
+
/** Injected command runner (probe PATH, run `tar`); defaults to the shared runTracked. */
|
|
25
|
+
export interface BinaryCommandRunner {
|
|
26
|
+
(argv: string[], cwd: string): RunTrackedResult;
|
|
27
|
+
}
|
|
28
|
+
/** Pinned, os/arch-aware description of one acquirable release binary. */
|
|
29
|
+
export interface BinarySpec {
|
|
30
|
+
/** Executable name on PATH / inside the archive (e.g. "gitleaks"). */
|
|
31
|
+
binaryName: string;
|
|
32
|
+
/** Pinned release version, no leading `v` (e.g. "8.18.4"). */
|
|
33
|
+
version: string;
|
|
34
|
+
/** Probe argv proving an on-PATH install (e.g. ["gitleaks","version"]). */
|
|
35
|
+
versionProbeArgs: string[];
|
|
36
|
+
/** Asset filename for a platform/arch, or null when unsupported. */
|
|
37
|
+
assetFor(platform: NodeJS.Platform, arch: string): string | null;
|
|
38
|
+
/** Checksums-file asset name (lists `<sha256> <asset>` lines). */
|
|
39
|
+
checksumsAsset: string;
|
|
40
|
+
/** `${releaseUrlBase}/${assetName}` is the download URL (asset + checksums). */
|
|
41
|
+
releaseUrlForAsset(assetName: string): string;
|
|
42
|
+
}
|
|
43
|
+
export interface BinaryResolveOptions {
|
|
44
|
+
fetch?: BinaryFetcher;
|
|
45
|
+
run?: BinaryCommandRunner;
|
|
46
|
+
/** Root cache dir for downloaded binaries; default `<tmpdir>/audit-tools-bincache`. */
|
|
47
|
+
cacheDir?: string;
|
|
48
|
+
platform?: NodeJS.Platform;
|
|
49
|
+
arch?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface BinaryResolution {
|
|
52
|
+
status: "path" | "cached" | "downloaded" | "unavailable";
|
|
53
|
+
/** Resolved executable (PATH name or absolute cached path); null when unavailable. */
|
|
54
|
+
command: string | null;
|
|
55
|
+
note?: string;
|
|
56
|
+
}
|
|
57
|
+
/** Parse a `<sha256>␠␠<asset>` checksums file for one asset's expected digest. */
|
|
58
|
+
export declare function expectedSha256For(checksumsText: string, assetName: string): string | null;
|
|
59
|
+
/**
|
|
60
|
+
* Resolve an executable for `spec`, acquiring it if necessary. Async (download is
|
|
61
|
+
* network I/O); never throws. The result's `command` is what the engine spawns,
|
|
62
|
+
* or null when the tool could not be made available.
|
|
63
|
+
*/
|
|
64
|
+
export declare function resolveBinary(spec: BinarySpec, options?: BinaryResolveOptions): Promise<BinaryResolution>;
|
|
65
|
+
//# sourceMappingURL=binaryAcquisition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binaryAcquisition.d.ts","sourceRoot":"","sources":["../../../../src/audit/extractors/analyzers/binaryAcquisition.ts"],"names":[],"mappings":"AAYA,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEvE;;;;;;;;;;;;;;;;;GAiBG;AAEH,mFAAmF;AACnF,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;CAC3C;AAED,0FAA0F;AAC1F,MAAM,WAAW,mBAAmB;IAClC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAAC;CACjD;AAED,0EAA0E;AAC1E,MAAM,WAAW,UAAU;IACzB,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACjE,mEAAmE;IACnE,cAAc,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;CAC/C;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,aAAa,CAAC;IACzD,sFAAsF;IACtF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAUD,kFAAkF;AAClF,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAMf;AAMD;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,gBAAgB,CAAC,CAqG3B"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { chmodSync, existsSync, mkdirSync, readdirSync, rmSync, statSync, writeFileSync, } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { runTracked } from "audit-tools/shared";
|
|
6
|
+
function defaultCacheDir() {
|
|
7
|
+
return join(tmpdir(), "audit-tools-bincache");
|
|
8
|
+
}
|
|
9
|
+
function exeName(binaryName, platform) {
|
|
10
|
+
return platform === "win32" ? `${binaryName}.exe` : binaryName;
|
|
11
|
+
}
|
|
12
|
+
/** Parse a `<sha256>␠␠<asset>` checksums file for one asset's expected digest. */
|
|
13
|
+
export function expectedSha256For(checksumsText, assetName) {
|
|
14
|
+
for (const line of checksumsText.split(/\r?\n/)) {
|
|
15
|
+
const match = line.trim().match(/^([0-9a-fA-F]{64})\s+\*?(.+)$/);
|
|
16
|
+
if (match && match[2].trim() === assetName)
|
|
17
|
+
return match[1].toLowerCase();
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
function sha256(bytes) {
|
|
22
|
+
return createHash("sha256").update(bytes).digest("hex");
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Resolve an executable for `spec`, acquiring it if necessary. Async (download is
|
|
26
|
+
* network I/O); never throws. The result's `command` is what the engine spawns,
|
|
27
|
+
* or null when the tool could not be made available.
|
|
28
|
+
*/
|
|
29
|
+
export async function resolveBinary(spec, options = {}) {
|
|
30
|
+
const platform = options.platform ?? process.platform;
|
|
31
|
+
const arch = options.arch ?? process.arch;
|
|
32
|
+
const run = options.run ?? ((argv, cwd) => runTracked(argv, { cwd }));
|
|
33
|
+
const cacheDir = options.cacheDir ?? defaultCacheDir();
|
|
34
|
+
// 1. PATH — already installed.
|
|
35
|
+
const probe = run(spec.versionProbeArgs, process.cwd());
|
|
36
|
+
if (!probe.error && probe.status === 0) {
|
|
37
|
+
return { status: "path", command: spec.binaryName };
|
|
38
|
+
}
|
|
39
|
+
// 2. cache — a previously-downloaded pinned binary.
|
|
40
|
+
const versionDir = join(cacheDir, `${spec.binaryName}-${spec.version}`);
|
|
41
|
+
const cachedPath = join(versionDir, exeName(spec.binaryName, platform));
|
|
42
|
+
if (existsSync(cachedPath)) {
|
|
43
|
+
return { status: "cached", command: cachedPath };
|
|
44
|
+
}
|
|
45
|
+
// 3. download — pinned release asset, SHA256-verified, then extracted.
|
|
46
|
+
const fetch = options.fetch;
|
|
47
|
+
if (!fetch) {
|
|
48
|
+
return { status: "unavailable", command: null, note: "no fetcher configured (offline)" };
|
|
49
|
+
}
|
|
50
|
+
const assetName = spec.assetFor(platform, arch);
|
|
51
|
+
if (!assetName) {
|
|
52
|
+
return {
|
|
53
|
+
status: "unavailable",
|
|
54
|
+
command: null,
|
|
55
|
+
note: `no release asset for ${platform}/${arch}`,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
let assetBytes;
|
|
59
|
+
let checksumsBytes;
|
|
60
|
+
try {
|
|
61
|
+
checksumsBytes = await fetch(spec.releaseUrlForAsset(spec.checksumsAsset));
|
|
62
|
+
assetBytes = await fetch(spec.releaseUrlForAsset(assetName));
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
return {
|
|
66
|
+
status: "unavailable",
|
|
67
|
+
command: null,
|
|
68
|
+
note: `download failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
if (!checksumsBytes || !assetBytes) {
|
|
72
|
+
return { status: "unavailable", command: null, note: "download returned no bytes" };
|
|
73
|
+
}
|
|
74
|
+
const expected = expectedSha256For(Buffer.from(checksumsBytes).toString("utf8"), assetName);
|
|
75
|
+
if (!expected) {
|
|
76
|
+
return { status: "unavailable", command: null, note: `no checksum for ${assetName}` };
|
|
77
|
+
}
|
|
78
|
+
const actual = sha256(assetBytes);
|
|
79
|
+
if (actual !== expected) {
|
|
80
|
+
return {
|
|
81
|
+
status: "unavailable",
|
|
82
|
+
command: null,
|
|
83
|
+
note: `checksum mismatch for ${assetName} (expected ${expected}, got ${actual})`,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// Verified — write the archive and extract it with the system `tar` (bsdtar
|
|
87
|
+
// ships on win32 / darwin / linux and reads both .tar.gz and .zip).
|
|
88
|
+
try {
|
|
89
|
+
mkdirSync(versionDir, { recursive: true });
|
|
90
|
+
const archivePath = join(versionDir, assetName);
|
|
91
|
+
writeFileSync(archivePath, assetBytes);
|
|
92
|
+
const extract = run(["tar", "-xf", archivePath, "-C", versionDir], versionDir);
|
|
93
|
+
rmSync(archivePath, { force: true });
|
|
94
|
+
if (extract.error || extract.status !== 0) {
|
|
95
|
+
return {
|
|
96
|
+
status: "unavailable",
|
|
97
|
+
command: null,
|
|
98
|
+
note: `extract failed: ${extract.error?.message ?? `tar exit ${extract.status}`}`,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
return {
|
|
104
|
+
status: "unavailable",
|
|
105
|
+
command: null,
|
|
106
|
+
note: `extract error: ${error instanceof Error ? error.message : String(error)}`,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
// Locate the executable (archives may nest it); chmod +x on POSIX.
|
|
110
|
+
const resolved = findExecutable(versionDir, exeName(spec.binaryName, platform));
|
|
111
|
+
if (!resolved) {
|
|
112
|
+
return { status: "unavailable", command: null, note: "binary not found in archive" };
|
|
113
|
+
}
|
|
114
|
+
if (platform !== "win32") {
|
|
115
|
+
try {
|
|
116
|
+
chmodSync(resolved, 0o755);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
/* best-effort */
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return { status: "downloaded", command: resolved };
|
|
123
|
+
}
|
|
124
|
+
/** Shallow-then-recursive search for `name` under `dir`. */
|
|
125
|
+
function findExecutable(dir, name) {
|
|
126
|
+
const direct = join(dir, name);
|
|
127
|
+
if (existsSync(direct))
|
|
128
|
+
return direct;
|
|
129
|
+
let entries;
|
|
130
|
+
try {
|
|
131
|
+
entries = readdirSync(dir);
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
for (const entry of entries) {
|
|
137
|
+
const full = join(dir, entry);
|
|
138
|
+
let isDir = false;
|
|
139
|
+
try {
|
|
140
|
+
isDir = statSync(full).isDirectory();
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
if (isDir) {
|
|
146
|
+
const nested = findExecutable(full, name);
|
|
147
|
+
if (nested)
|
|
148
|
+
return nested;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=binaryAcquisition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binaryAcquisition.js","sourceRoot":"","sources":["../../../../src/audit/extractors/analyzers/binaryAcquisition.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ExternalAnalyzerCandidate } from "./acquisitionEngine.js";
|
|
2
|
+
/**
|
|
3
|
+
* The value-curated EXTERNAL analyzer candidate registry. This is the only place
|
|
4
|
+
* concrete tools are named; the engine is tool-agnostic. gitleaks is the DEFAULT
|
|
5
|
+
* member (high-value, low-overhead secret scanning, agnostic to the repo's
|
|
6
|
+
* ecosystem); semgrep + eslint are registered but CONSENT-GATED (defaultRun:
|
|
7
|
+
* false) — they pull rule sets / need repo config and so only run when the
|
|
8
|
+
* operator supplies a per-run consent token.
|
|
9
|
+
*/
|
|
10
|
+
declare const GITLEAKS_VERSION = "8.21.2";
|
|
11
|
+
/**
|
|
12
|
+
* Parse gitleaks' default JSON report (array of findings, PascalCase fields) into
|
|
13
|
+
* the engine's generic item shape. The raw secret value is NEVER carried through
|
|
14
|
+
* (Secret/Match are dropped) so the persisted artifact cannot leak a credential.
|
|
15
|
+
*/
|
|
16
|
+
declare function parseGitleaks(report: string): ReturnType<ExternalAnalyzerCandidate["parse"]>;
|
|
17
|
+
declare const gitleaksCandidate: ExternalAnalyzerCandidate;
|
|
18
|
+
declare const semgrepCandidate: ExternalAnalyzerCandidate;
|
|
19
|
+
declare const eslintCandidate: ExternalAnalyzerCandidate;
|
|
20
|
+
/** The curated external analyzer candidate set. gitleaks is the default member. */
|
|
21
|
+
export declare const EXTERNAL_ANALYZER_CANDIDATES: ExternalAnalyzerCandidate[];
|
|
22
|
+
export { gitleaksCandidate, semgrepCandidate, eslintCandidate, parseGitleaks, GITLEAKS_VERSION, };
|
|
23
|
+
//# sourceMappingURL=candidates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"candidates.d.ts","sourceRoot":"","sources":["../../../../src/audit/extractors/analyzers/candidates.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAOxE;;;;;;;GAOG;AAKH,QAAA,MAAM,gBAAgB,WAAW,CAAC;AA2ClC;;;;GAIG;AACH,iBAAS,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAqCrF;AAED,QAAA,MAAM,iBAAiB,EAAE,yBAsBxB,CAAC;AAiCF,QAAA,MAAM,gBAAgB,EAAE,yBASvB,CAAC;AAqCF,QAAA,MAAM,eAAe,EAAE,yBAStB,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,4BAA4B,EAAE,yBAAyB,EAInE,CAAC;AAEF,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,gBAAgB,GACjB,CAAC"}
|