@cyclonedx/cdxgen 12.3.3 → 12.4.1
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 +69 -25
- package/bin/audit.js +21 -7
- package/bin/cdxgen.js +270 -127
- package/bin/convert.js +34 -15
- package/bin/hbom.js +495 -0
- package/bin/repl.js +592 -37
- package/bin/validate.js +31 -4
- package/bin/verify.js +18 -5
- package/data/README.md +298 -25
- package/data/component-tags.json +6 -0
- package/data/crypto-oid.json +16 -0
- package/data/cyclonedx-2.0-bundled.schema.json +7182 -0
- package/data/predictive-audit-allowlist.json +11 -0
- package/data/queries-darwin.json +12 -1
- package/data/queries-win.json +7 -1
- package/data/queries.json +39 -2
- package/data/rules/ai-agent-governance.yaml +16 -0
- package/data/rules/asar-archives.yaml +150 -0
- package/data/rules/chrome-extensions.yaml +8 -0
- package/data/rules/ci-permissions.yaml +42 -18
- package/data/rules/container-risk.yaml +14 -7
- package/data/rules/dependency-sources.yaml +11 -0
- package/data/rules/hbom-compliance.yaml +325 -0
- package/data/rules/hbom-performance.yaml +307 -0
- package/data/rules/hbom-security.yaml +248 -0
- package/data/rules/host-topology.yaml +165 -0
- package/data/rules/mcp-servers.yaml +18 -3
- package/data/rules/obom-runtime.yaml +907 -22
- package/data/rules/package-integrity.yaml +14 -0
- package/data/rules/rootfs-hardening.yaml +179 -0
- package/data/rules/vscode-extensions.yaml +9 -0
- package/lib/audit/index.js +210 -8
- package/lib/audit/index.poku.js +332 -0
- package/lib/audit/reporters.js +222 -0
- package/lib/audit/targets.js +146 -1
- package/lib/audit/targets.poku.js +186 -0
- package/lib/cli/asar.poku.js +328 -0
- package/lib/cli/index.js +527 -99
- package/lib/cli/index.poku.js +1469 -212
- package/lib/evinser/evinser.js +14 -9
- package/lib/helpers/analyzer.js +1406 -29
- package/lib/helpers/analyzer.poku.js +342 -0
- package/lib/helpers/analyzerScope.js +712 -0
- package/lib/helpers/asarutils.js +1556 -0
- package/lib/helpers/asarutils.poku.js +443 -0
- package/lib/helpers/auditCategories.js +12 -0
- package/lib/helpers/auditCategories.poku.js +32 -0
- package/lib/helpers/bomUtils.js +155 -1
- package/lib/helpers/bomUtils.poku.js +79 -1
- package/lib/helpers/cbomutils.js +271 -1
- package/lib/helpers/cbomutils.poku.js +248 -5
- package/lib/helpers/display.js +291 -1
- package/lib/helpers/display.poku.js +149 -0
- package/lib/helpers/evidenceUtils.js +58 -0
- package/lib/helpers/evidenceUtils.poku.js +54 -0
- package/lib/helpers/exportUtils.js +9 -0
- package/lib/helpers/gtfobins.js +142 -8
- package/lib/helpers/gtfobins.poku.js +24 -1
- package/lib/helpers/hbom.js +710 -0
- package/lib/helpers/hbom.poku.js +496 -0
- package/lib/helpers/hbomAnalysis.js +268 -0
- package/lib/helpers/hbomAnalysis.poku.js +249 -0
- package/lib/helpers/hbomLoader.js +35 -0
- package/lib/helpers/hostTopology.js +803 -0
- package/lib/helpers/hostTopology.poku.js +363 -0
- package/lib/helpers/inventoryStats.js +69 -0
- package/lib/helpers/inventoryStats.poku.js +86 -0
- package/lib/helpers/lolbas.js +19 -1
- package/lib/helpers/lolbas.poku.js +23 -0
- package/lib/helpers/osqueryTransform.js +47 -0
- package/lib/helpers/osqueryTransform.poku.js +47 -0
- package/lib/helpers/plugins.js +350 -0
- package/lib/helpers/plugins.poku.js +57 -0
- package/lib/helpers/protobom.js +209 -45
- package/lib/helpers/protobom.poku.js +183 -5
- package/lib/helpers/protobomLoader.js +43 -0
- package/lib/helpers/protobomLoader.poku.js +31 -0
- package/lib/helpers/remote/dependency-track.js +36 -3
- package/lib/helpers/remote/dependency-track.poku.js +44 -0
- package/lib/helpers/source.js +24 -0
- package/lib/helpers/source.poku.js +32 -0
- package/lib/helpers/utils.js +1438 -93
- package/lib/helpers/utils.poku.js +846 -4
- package/lib/managers/binary.e2e.poku.js +367 -0
- package/lib/managers/binary.js +2293 -353
- package/lib/managers/binary.poku.js +1699 -1
- package/lib/managers/docker.js +201 -79
- package/lib/managers/docker.poku.js +337 -12
- package/lib/server/server.js +4 -28
- package/lib/stages/postgen/annotator.js +38 -0
- package/lib/stages/postgen/annotator.poku.js +107 -1
- package/lib/stages/postgen/auditBom.js +121 -18
- package/lib/stages/postgen/auditBom.poku.js +1366 -31
- package/lib/stages/postgen/hostTopologyAudit.poku.js +186 -0
- package/lib/stages/postgen/postgen.js +406 -8
- package/lib/stages/postgen/postgen.poku.js +484 -0
- package/lib/stages/postgen/ruleEngine.js +116 -0
- package/lib/stages/pregen/envAudit.js +14 -3
- package/lib/validator/bomValidator.js +90 -38
- package/lib/validator/bomValidator.poku.js +90 -0
- package/lib/validator/complianceRules.js +4 -2
- package/lib/validator/index.poku.js +14 -0
- package/package.json +23 -21
- package/types/bin/hbom.d.ts +3 -0
- package/types/bin/hbom.d.ts.map +1 -0
- package/types/bin/repl.d.ts +1 -1
- package/types/bin/repl.d.ts.map +1 -1
- package/types/lib/audit/index.d.ts +44 -0
- package/types/lib/audit/index.d.ts.map +1 -1
- package/types/lib/audit/reporters.d.ts +16 -0
- package/types/lib/audit/reporters.d.ts.map +1 -1
- package/types/lib/audit/targets.d.ts.map +1 -1
- package/types/lib/cli/index.d.ts +16 -0
- package/types/lib/cli/index.d.ts.map +1 -1
- package/types/lib/evinser/evinser.d.ts +4 -0
- package/types/lib/evinser/evinser.d.ts.map +1 -1
- package/types/lib/helpers/analyzer.d.ts +33 -0
- package/types/lib/helpers/analyzer.d.ts.map +1 -1
- package/types/lib/helpers/analyzerScope.d.ts +11 -0
- package/types/lib/helpers/analyzerScope.d.ts.map +1 -0
- package/types/lib/helpers/asarutils.d.ts +34 -0
- package/types/lib/helpers/asarutils.d.ts.map +1 -0
- package/types/lib/helpers/auditCategories.d.ts +5 -0
- package/types/lib/helpers/auditCategories.d.ts.map +1 -1
- package/types/lib/helpers/bomUtils.d.ts +10 -0
- package/types/lib/helpers/bomUtils.d.ts.map +1 -1
- package/types/lib/helpers/cbomutils.d.ts +3 -2
- package/types/lib/helpers/cbomutils.d.ts.map +1 -1
- package/types/lib/helpers/display.d.ts.map +1 -1
- package/types/lib/helpers/evidenceUtils.d.ts +8 -0
- package/types/lib/helpers/evidenceUtils.d.ts.map +1 -0
- package/types/lib/helpers/exportUtils.d.ts.map +1 -1
- package/types/lib/helpers/gtfobins.d.ts +8 -0
- package/types/lib/helpers/gtfobins.d.ts.map +1 -1
- package/types/lib/helpers/hbom.d.ts +49 -0
- package/types/lib/helpers/hbom.d.ts.map +1 -0
- package/types/lib/helpers/hbomAnalysis.d.ts +76 -0
- package/types/lib/helpers/hbomAnalysis.d.ts.map +1 -0
- package/types/lib/helpers/hbomLoader.d.ts +7 -0
- package/types/lib/helpers/hbomLoader.d.ts.map +1 -0
- package/types/lib/helpers/hostTopology.d.ts +12 -0
- package/types/lib/helpers/hostTopology.d.ts.map +1 -0
- package/types/lib/helpers/inventoryStats.d.ts +11 -0
- package/types/lib/helpers/inventoryStats.d.ts.map +1 -0
- package/types/lib/helpers/lolbas.d.ts.map +1 -1
- package/types/lib/helpers/osqueryTransform.d.ts +3 -0
- package/types/lib/helpers/osqueryTransform.d.ts.map +1 -1
- package/types/lib/helpers/plugins.d.ts +58 -0
- package/types/lib/helpers/plugins.d.ts.map +1 -0
- package/types/lib/helpers/protobom.d.ts +5 -4
- package/types/lib/helpers/protobom.d.ts.map +1 -1
- package/types/lib/helpers/protobomLoader.d.ts +17 -0
- package/types/lib/helpers/protobomLoader.d.ts.map +1 -0
- package/types/lib/helpers/remote/dependency-track.d.ts +10 -3
- package/types/lib/helpers/remote/dependency-track.d.ts.map +1 -1
- package/types/lib/helpers/source.d.ts.map +1 -1
- package/types/lib/helpers/utils.d.ts +45 -8
- package/types/lib/helpers/utils.d.ts.map +1 -1
- package/types/lib/managers/binary.d.ts +5 -0
- package/types/lib/managers/binary.d.ts.map +1 -1
- package/types/lib/managers/docker.d.ts.map +1 -1
- package/types/lib/server/server.d.ts +2 -1
- package/types/lib/server/server.d.ts.map +1 -1
- package/types/lib/stages/postgen/annotator.d.ts.map +1 -1
- package/types/lib/stages/postgen/auditBom.d.ts +26 -1
- package/types/lib/stages/postgen/auditBom.d.ts.map +1 -1
- package/types/lib/stages/postgen/postgen.d.ts +2 -1
- package/types/lib/stages/postgen/postgen.d.ts.map +1 -1
- package/types/lib/stages/postgen/ruleEngine.d.ts.map +1 -1
- package/types/lib/stages/pregen/envAudit.d.ts.map +1 -1
- package/types/lib/third-party/arborist/lib/node.d.ts +23 -0
- package/types/lib/third-party/arborist/lib/node.d.ts.map +1 -1
- package/types/lib/validator/bomValidator.d.ts.map +1 -1
- package/types/lib/validator/complianceRules.d.ts.map +1 -1
- package/data/spdx-model-v3.0.1.jsonld +0 -15999
|
@@ -6,6 +6,10 @@ import Ajv2020 from "ajv/dist/2020.js";
|
|
|
6
6
|
import addFormats from "ajv-formats";
|
|
7
7
|
import { PackageURL } from "packageurl-js";
|
|
8
8
|
|
|
9
|
+
import {
|
|
10
|
+
isCycloneDxSpecVersionAtLeast,
|
|
11
|
+
toCycloneDxSpecVersionString,
|
|
12
|
+
} from "../helpers/bomUtils.js";
|
|
9
13
|
import { thoughtLog } from "../helpers/logger.js";
|
|
10
14
|
import { DEBUG_MODE, dirNameStr, isPartialTree } from "../helpers/utils.js";
|
|
11
15
|
import {
|
|
@@ -14,6 +18,13 @@ import {
|
|
|
14
18
|
} from "../stages/postgen/spdxConverter.js";
|
|
15
19
|
|
|
16
20
|
const dirName = dirNameStr;
|
|
21
|
+
const SUPPORTED_CYCLONEDX_SCHEMA_VERSIONS = new Set([
|
|
22
|
+
"1.4",
|
|
23
|
+
"1.5",
|
|
24
|
+
"1.6",
|
|
25
|
+
"1.7",
|
|
26
|
+
"2.0",
|
|
27
|
+
]);
|
|
17
28
|
const PLACEHOLDER_COMPONENT_NAMES = new Set(["app", "application", "project"]);
|
|
18
29
|
const SPDX_EXPORT_TYPES = new Set([
|
|
19
30
|
"CreationInfo",
|
|
@@ -23,6 +34,74 @@ const SPDX_EXPORT_TYPES = new Set([
|
|
|
23
34
|
"software_Package",
|
|
24
35
|
]);
|
|
25
36
|
let spdxExportSchemaValidator;
|
|
37
|
+
const cycloneDxSchemaValidators = new Map();
|
|
38
|
+
|
|
39
|
+
const AJV_OPTIONS = {
|
|
40
|
+
strict: false,
|
|
41
|
+
logger: false,
|
|
42
|
+
verbose: true,
|
|
43
|
+
code: {
|
|
44
|
+
source: true,
|
|
45
|
+
lines: true,
|
|
46
|
+
optimize: true,
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const readJsonSchema = (fileName) =>
|
|
51
|
+
JSON.parse(readFileSync(join(dirName, "data", fileName), "utf-8"));
|
|
52
|
+
|
|
53
|
+
const addDraft2020BundledSchema = (ajv, schema, schemaId) => {
|
|
54
|
+
const bundledSchema = { ...schema };
|
|
55
|
+
delete bundledSchema.$schema;
|
|
56
|
+
bundledSchema.$id = schemaId;
|
|
57
|
+
ajv.addSchema(bundledSchema);
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const getCycloneDxSchemaValidator = (specVersion) => {
|
|
61
|
+
if (cycloneDxSchemaValidators.has(specVersion)) {
|
|
62
|
+
return cycloneDxSchemaValidators.get(specVersion);
|
|
63
|
+
}
|
|
64
|
+
let validate;
|
|
65
|
+
if (isCycloneDxSpecVersionAtLeast(specVersion, "2.0")) {
|
|
66
|
+
const ajv = new Ajv2020(AJV_OPTIONS);
|
|
67
|
+
addFormats(ajv);
|
|
68
|
+
addDraft2020BundledSchema(
|
|
69
|
+
ajv,
|
|
70
|
+
readJsonSchema("cryptography-defs.schema.json"),
|
|
71
|
+
"https://cyclonedx.org/schema/cryptography-defs.schema.json",
|
|
72
|
+
);
|
|
73
|
+
addDraft2020BundledSchema(
|
|
74
|
+
ajv,
|
|
75
|
+
readJsonSchema("jsf-0.82.schema.json"),
|
|
76
|
+
"https://cyclonedx.org/schema/jsf-0.82.schema.json",
|
|
77
|
+
);
|
|
78
|
+
addDraft2020BundledSchema(
|
|
79
|
+
ajv,
|
|
80
|
+
readJsonSchema("spdx.schema.json"),
|
|
81
|
+
"https://cyclonedx.org/schema/spdx.schema.json",
|
|
82
|
+
);
|
|
83
|
+
validate = ajv.compile(readJsonSchema("cyclonedx-2.0-bundled.schema.json"));
|
|
84
|
+
} else {
|
|
85
|
+
const schemas = [
|
|
86
|
+
readJsonSchema(`bom-${specVersion}.schema.json`),
|
|
87
|
+
readJsonSchema("jsf-0.82.schema.json"),
|
|
88
|
+
readJsonSchema("spdx.schema.json"),
|
|
89
|
+
];
|
|
90
|
+
if (isCycloneDxSpecVersionAtLeast(specVersion, "1.7")) {
|
|
91
|
+
schemas.push(readJsonSchema("cryptography-defs.schema.json"));
|
|
92
|
+
}
|
|
93
|
+
const ajv = new Ajv({
|
|
94
|
+
...AJV_OPTIONS,
|
|
95
|
+
schemas,
|
|
96
|
+
});
|
|
97
|
+
addFormats(ajv);
|
|
98
|
+
validate = ajv.getSchema(
|
|
99
|
+
`http://cyclonedx.org/schema/bom-${specVersion}.schema.json`,
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
cycloneDxSchemaValidators.set(specVersion, validate);
|
|
103
|
+
return validate;
|
|
104
|
+
};
|
|
26
105
|
|
|
27
106
|
const getSpdxElementId = (element) => element?.spdxId || element?.["@id"];
|
|
28
107
|
|
|
@@ -36,6 +115,7 @@ const getSpdxExportSchemaValidator = () => {
|
|
|
36
115
|
);
|
|
37
116
|
const ajv = new Ajv2020({
|
|
38
117
|
strict: false,
|
|
118
|
+
validateSchema: false,
|
|
39
119
|
logger: false,
|
|
40
120
|
verbose: true,
|
|
41
121
|
code: {
|
|
@@ -63,44 +143,16 @@ export const validateBom = (bomJson) => {
|
|
|
63
143
|
if (!bomJson) {
|
|
64
144
|
return true;
|
|
65
145
|
}
|
|
66
|
-
const specVersion = bomJson.specVersion;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
);
|
|
76
|
-
const spdxSchema = JSON.parse(
|
|
77
|
-
readFileSync(join(dirName, "data", "spdx.schema.json"), "utf-8"),
|
|
78
|
-
);
|
|
79
|
-
const cryptoDefSchema = JSON.parse(
|
|
80
|
-
readFileSync(
|
|
81
|
-
join(dirName, "data", "cryptography-defs.schema.json"),
|
|
82
|
-
"utf-8",
|
|
83
|
-
),
|
|
84
|
-
);
|
|
85
|
-
const schemas = [schema, defsSchema, spdxSchema];
|
|
86
|
-
if (specVersion >= 1.7) {
|
|
87
|
-
schemas.push(cryptoDefSchema);
|
|
88
|
-
}
|
|
89
|
-
const ajv = new Ajv({
|
|
90
|
-
schemas,
|
|
91
|
-
strict: false,
|
|
92
|
-
logger: false,
|
|
93
|
-
verbose: true,
|
|
94
|
-
code: {
|
|
95
|
-
source: true,
|
|
96
|
-
lines: true,
|
|
97
|
-
optimize: true,
|
|
98
|
-
},
|
|
99
|
-
});
|
|
100
|
-
addFormats(ajv);
|
|
101
|
-
const validate = ajv.getSchema(
|
|
102
|
-
`http://cyclonedx.org/schema/bom-${specVersion}.schema.json`,
|
|
103
|
-
);
|
|
146
|
+
const specVersion = toCycloneDxSpecVersionString(bomJson.specVersion);
|
|
147
|
+
if (!SUPPORTED_CYCLONEDX_SCHEMA_VERSIONS.has(specVersion)) {
|
|
148
|
+
console.log(
|
|
149
|
+
`Unsupported CycloneDX specVersion '${bomJson.specVersion}'. Supported versions are ${[
|
|
150
|
+
...SUPPORTED_CYCLONEDX_SCHEMA_VERSIONS,
|
|
151
|
+
].join(", ")}.`,
|
|
152
|
+
);
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
const validate = getCycloneDxSchemaValidator(specVersion);
|
|
104
156
|
const isValid = validate(bomJson);
|
|
105
157
|
if (!isValid) {
|
|
106
158
|
if (bomJson.metadata?.component?.name) {
|
|
@@ -1,7 +1,97 @@
|
|
|
1
|
+
import { readFileSync as actualReadFileSync } from "node:fs";
|
|
2
|
+
|
|
1
3
|
import esmock from "esmock";
|
|
2
4
|
import { assert, describe, it } from "poku";
|
|
3
5
|
import sinon from "sinon";
|
|
4
6
|
|
|
7
|
+
import { validateBom } from "./bomValidator.js";
|
|
8
|
+
|
|
9
|
+
const validCycloneDx20Bom = {
|
|
10
|
+
specFormat: "CycloneDX",
|
|
11
|
+
specVersion: "2.0",
|
|
12
|
+
serialNumber: "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
|
|
13
|
+
version: 1,
|
|
14
|
+
metadata: {
|
|
15
|
+
component: {
|
|
16
|
+
"bom-ref": "pkg:generic/demo@1.0.0",
|
|
17
|
+
name: "demo",
|
|
18
|
+
purl: "pkg:generic/demo@1.0.0",
|
|
19
|
+
type: "application",
|
|
20
|
+
version: "1.0.0",
|
|
21
|
+
},
|
|
22
|
+
tools: {
|
|
23
|
+
components: [{ type: "application", name: "cdxgen", version: "12.4.0" }],
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
components: [
|
|
27
|
+
{
|
|
28
|
+
"bom-ref": "pkg:npm/lodash@4.17.21",
|
|
29
|
+
name: "lodash",
|
|
30
|
+
purl: "pkg:npm/lodash@4.17.21",
|
|
31
|
+
type: "library",
|
|
32
|
+
version: "4.17.21",
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
dependencies: [
|
|
36
|
+
{
|
|
37
|
+
ref: "pkg:generic/demo@1.0.0",
|
|
38
|
+
dependsOn: ["pkg:npm/lodash@4.17.21"],
|
|
39
|
+
},
|
|
40
|
+
{ ref: "pkg:npm/lodash@4.17.21", dependsOn: [] },
|
|
41
|
+
],
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
describe("validateBom()", () => {
|
|
45
|
+
it("validates CycloneDX 2.0-dev JSON against the bundled schema", () => {
|
|
46
|
+
assert.strictEqual(validateBom(validCycloneDx20Bom), true);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it("returns a clear validation failure for unsupported spec versions", async () => {
|
|
50
|
+
const readFileSyncStub = sinon.stub();
|
|
51
|
+
const consoleLogStub = sinon.stub(console, "log");
|
|
52
|
+
try {
|
|
53
|
+
const { validateBom } = await esmock("./bomValidator.js", {
|
|
54
|
+
"node:fs": {
|
|
55
|
+
readFileSync: readFileSyncStub,
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
assert.strictEqual(
|
|
60
|
+
validateBom({ bomFormat: "CycloneDX", specVersion: "2.0.1" }),
|
|
61
|
+
false,
|
|
62
|
+
);
|
|
63
|
+
sinon.assert.notCalled(readFileSyncStub);
|
|
64
|
+
sinon.assert.calledWithMatch(
|
|
65
|
+
consoleLogStub,
|
|
66
|
+
"Unsupported CycloneDX specVersion '2.0.1'.",
|
|
67
|
+
);
|
|
68
|
+
} finally {
|
|
69
|
+
consoleLogStub.restore();
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it("caches compiled CycloneDX schema validators by spec version", async () => {
|
|
74
|
+
const readFileSyncStub = sinon
|
|
75
|
+
.stub()
|
|
76
|
+
.callsFake((...args) => actualReadFileSync(...args));
|
|
77
|
+
const { validateBom } = await esmock("./bomValidator.js", {
|
|
78
|
+
"node:fs": {
|
|
79
|
+
readFileSync: readFileSyncStub,
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
assert.strictEqual(validateBom(validCycloneDx20Bom), true);
|
|
84
|
+
const readCountAfterFirstValidation = readFileSyncStub.callCount;
|
|
85
|
+
assert.ok(readCountAfterFirstValidation > 0);
|
|
86
|
+
|
|
87
|
+
assert.strictEqual(validateBom(validCycloneDx20Bom), true);
|
|
88
|
+
assert.strictEqual(
|
|
89
|
+
readFileSyncStub.callCount,
|
|
90
|
+
readCountAfterFirstValidation,
|
|
91
|
+
);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
|
|
5
95
|
describe("validateSpdx()", () => {
|
|
6
96
|
it("lazy-loads the bundled SPDX export schema on first validation call", async () => {
|
|
7
97
|
const readFileSyncStub = sinon
|
|
@@ -36,6 +36,8 @@
|
|
|
36
36
|
|
|
37
37
|
import { PackageURL } from "packageurl-js";
|
|
38
38
|
|
|
39
|
+
import { isCycloneDxBom } from "../helpers/bomUtils.js";
|
|
40
|
+
|
|
39
41
|
/**
|
|
40
42
|
* Extract the first SPDX-ish license id from a CycloneDX component's licenses
|
|
41
43
|
* block. Returns null when no license is declared.
|
|
@@ -325,7 +327,7 @@ const SCVS_RULES = [
|
|
|
325
327
|
scvsLevels: ["L1", "L2", "L3"],
|
|
326
328
|
automatable: true,
|
|
327
329
|
evaluate(bomJson) {
|
|
328
|
-
if (
|
|
330
|
+
if (!isCycloneDxBom(bomJson)) {
|
|
329
331
|
return fail(
|
|
330
332
|
"BOM is not a valid CycloneDX document (bomFormat/specVersion missing).",
|
|
331
333
|
{
|
|
@@ -467,7 +469,7 @@ const SCVS_RULES = [
|
|
|
467
469
|
scvsLevels: ["L1", "L2", "L3"],
|
|
468
470
|
automatable: true,
|
|
469
471
|
evaluate(bomJson) {
|
|
470
|
-
if (bomJson
|
|
472
|
+
if (isCycloneDxBom(bomJson)) {
|
|
471
473
|
return pass(`SBOM format is CycloneDX ${bomJson.specVersion}.`);
|
|
472
474
|
}
|
|
473
475
|
return fail("bomFormat or specVersion missing from the SBOM root.", {
|
|
@@ -46,6 +46,20 @@ function richBom() {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
describe("validateBomAdvanced", () => {
|
|
49
|
+
it("accepts CycloneDX 2.0-dev root fields in compliance evaluation", () => {
|
|
50
|
+
const bom20 = richBom();
|
|
51
|
+
delete bom20.bomFormat;
|
|
52
|
+
bom20.specFormat = "CycloneDX";
|
|
53
|
+
bom20.specVersion = "2.0";
|
|
54
|
+
const report = validateBomAdvanced(bom20, { schema: false });
|
|
55
|
+
assert.strictEqual(
|
|
56
|
+
report.allFindings.some((finding) =>
|
|
57
|
+
/bomFormat\/specVersion missing/.test(finding.message),
|
|
58
|
+
),
|
|
59
|
+
false,
|
|
60
|
+
);
|
|
61
|
+
});
|
|
62
|
+
|
|
49
63
|
it("returns structural, compliance, and benchmark data", () => {
|
|
50
64
|
const report = validateBomAdvanced(richBom(), { schema: false });
|
|
51
65
|
assert.strictEqual(typeof report.schemaValid, "boolean");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyclonedx/cdxgen",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.4.1",
|
|
4
4
|
"description": "Creates CycloneDX Software Bill of Materials (SBOM) from source or container image",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sbom",
|
|
@@ -91,6 +91,7 @@
|
|
|
91
91
|
"cdxgen-secure": "bin/cdxgen.js",
|
|
92
92
|
"cdxi": "bin/repl.js",
|
|
93
93
|
"evinse": "bin/evinse.js",
|
|
94
|
+
"hbom": "bin/hbom.js",
|
|
94
95
|
"obom": "bin/cdxgen.js",
|
|
95
96
|
"saasbom": "bin/cdxgen.js",
|
|
96
97
|
"spdxgen": "bin/cdxgen.js"
|
|
@@ -105,7 +106,7 @@
|
|
|
105
106
|
"index.cjs"
|
|
106
107
|
],
|
|
107
108
|
"dependencies": {
|
|
108
|
-
"@babel/parser": "7.29.
|
|
109
|
+
"@babel/parser": "7.29.3",
|
|
109
110
|
"@babel/traverse": "7.29.0",
|
|
110
111
|
"@iarna/toml": "2.2.5",
|
|
111
112
|
"@isaacs/string-locale-compare": "1.1.0",
|
|
@@ -131,40 +132,41 @@
|
|
|
131
132
|
"proc-log": "6.1.0",
|
|
132
133
|
"properties-reader": "3.0.1",
|
|
133
134
|
"read-package-json-fast": "5.0.0",
|
|
134
|
-
"semver": "7.
|
|
135
|
+
"semver": "7.8.0",
|
|
135
136
|
"ssri": "13.0.1",
|
|
136
|
-
"tar": "7.5.
|
|
137
|
+
"tar": "7.5.15",
|
|
137
138
|
"treeverse": "3.0.0",
|
|
138
139
|
"uuid": "14.0.0",
|
|
139
140
|
"walk-up-path": "4.0.0",
|
|
140
141
|
"xml-js": "1.6.11",
|
|
141
|
-
"yaml": "2.8.
|
|
142
|
+
"yaml": "2.8.4",
|
|
142
143
|
"yargs": "18.0.0",
|
|
143
144
|
"yoctocolors": "2.1.2"
|
|
144
145
|
},
|
|
145
146
|
"devDependencies": {
|
|
146
|
-
"@biomejs/biome": "2.4.
|
|
147
|
-
"esmock": "2.7.
|
|
147
|
+
"@biomejs/biome": "2.4.15",
|
|
148
|
+
"esmock": "2.7.5",
|
|
148
149
|
"poku": "4.3.0",
|
|
149
|
-
"sinon": "
|
|
150
|
+
"sinon": "22.0.0",
|
|
150
151
|
"typescript": "6.0.3"
|
|
151
152
|
},
|
|
152
153
|
"optionalDependencies": {
|
|
153
154
|
"@appthreat/atom": "2.5.2",
|
|
154
155
|
"@appthreat/atom-parsetools": "1.1.4",
|
|
155
|
-
"@appthreat/cdx-proto": "
|
|
156
|
-
"@bufbuild/protobuf": "2.
|
|
157
|
-
"@cdxgen/
|
|
158
|
-
"@cdxgen/cdxgen-plugins-bin
|
|
159
|
-
"@cdxgen/cdxgen-plugins-bin-darwin-
|
|
160
|
-
"@cdxgen/cdxgen-plugins-bin-
|
|
161
|
-
"@cdxgen/cdxgen-plugins-bin-linux-
|
|
162
|
-
"@cdxgen/cdxgen-plugins-bin-linux-
|
|
163
|
-
"@cdxgen/cdxgen-plugins-bin-linux-
|
|
164
|
-
"@cdxgen/cdxgen-plugins-bin-
|
|
165
|
-
"@cdxgen/cdxgen-plugins-bin-linuxmusl-
|
|
166
|
-
"@cdxgen/cdxgen-plugins-bin-
|
|
167
|
-
"@cdxgen/cdxgen-plugins-bin-windows-
|
|
156
|
+
"@appthreat/cdx-proto": "2.0.1",
|
|
157
|
+
"@bufbuild/protobuf": "2.12.0",
|
|
158
|
+
"@cdxgen/cdx-hbom": "0.5.0",
|
|
159
|
+
"@cdxgen/cdxgen-plugins-bin": "2.1.1",
|
|
160
|
+
"@cdxgen/cdxgen-plugins-bin-darwin-amd64": "2.1.1",
|
|
161
|
+
"@cdxgen/cdxgen-plugins-bin-darwin-arm64": "2.1.1",
|
|
162
|
+
"@cdxgen/cdxgen-plugins-bin-linux-amd64": "2.1.1",
|
|
163
|
+
"@cdxgen/cdxgen-plugins-bin-linux-arm": "2.1.1",
|
|
164
|
+
"@cdxgen/cdxgen-plugins-bin-linux-arm64": "2.1.1",
|
|
165
|
+
"@cdxgen/cdxgen-plugins-bin-linux-ppc64": "2.1.1",
|
|
166
|
+
"@cdxgen/cdxgen-plugins-bin-linuxmusl-amd64": "2.1.1",
|
|
167
|
+
"@cdxgen/cdxgen-plugins-bin-linuxmusl-arm64": "2.1.1",
|
|
168
|
+
"@cdxgen/cdxgen-plugins-bin-windows-amd64": "2.1.1",
|
|
169
|
+
"@cdxgen/cdxgen-plugins-bin-windows-arm64": "2.1.1",
|
|
168
170
|
"body-parser": "2.2.2",
|
|
169
171
|
"compression": "1.8.1",
|
|
170
172
|
"connect": "3.7.0",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hbom.d.ts","sourceRoot":"","sources":["../../bin/hbom.js"],"names":[],"mappings":""}
|
package/types/bin/repl.d.ts
CHANGED
package/types/bin/repl.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../bin/repl.js"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../bin/repl.js"],"names":[],"mappings":";AA6WO,2DAoEN"}
|
|
@@ -22,6 +22,50 @@ export function loadInputBoms(options: object): {
|
|
|
22
22
|
source: string;
|
|
23
23
|
bomJson: object;
|
|
24
24
|
}[];
|
|
25
|
+
export function runDirectBomAuditFromBoms(inputBoms: any, options?: {}): Promise<{
|
|
26
|
+
auditMode: string;
|
|
27
|
+
generatedAt: string;
|
|
28
|
+
inputs: any;
|
|
29
|
+
results: {
|
|
30
|
+
auditOptions: {
|
|
31
|
+
bomAuditCategories: any;
|
|
32
|
+
bomAuditMinSeverity: any;
|
|
33
|
+
bomAuditRulesDir: any;
|
|
34
|
+
};
|
|
35
|
+
bomFormat: any;
|
|
36
|
+
findings: any[];
|
|
37
|
+
serialNumber: any;
|
|
38
|
+
source: any;
|
|
39
|
+
specVersion: any;
|
|
40
|
+
status: string;
|
|
41
|
+
summary: {
|
|
42
|
+
findingsBySeverity: {
|
|
43
|
+
critical: number;
|
|
44
|
+
high: number;
|
|
45
|
+
low: number;
|
|
46
|
+
medium: number;
|
|
47
|
+
};
|
|
48
|
+
findingsCount: number;
|
|
49
|
+
maxSeverity: string;
|
|
50
|
+
};
|
|
51
|
+
}[];
|
|
52
|
+
summary: {
|
|
53
|
+
findingsBySeverity: {
|
|
54
|
+
critical: number;
|
|
55
|
+
high: number;
|
|
56
|
+
low: number;
|
|
57
|
+
medium: number;
|
|
58
|
+
};
|
|
59
|
+
inputBomCount: any;
|
|
60
|
+
maxSeverity: string;
|
|
61
|
+
totalFindings: number;
|
|
62
|
+
bomsWithFindings: number;
|
|
63
|
+
};
|
|
64
|
+
tool: {
|
|
65
|
+
name: string;
|
|
66
|
+
version: string;
|
|
67
|
+
};
|
|
68
|
+
}>;
|
|
25
69
|
/**
|
|
26
70
|
* Build low-noise provenance-aware contextual findings from the root BOM target.
|
|
27
71
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/audit/index.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/audit/index.js"],"names":[],"mappings":"AAmGA;;;;;GAKG;AACH,qCAHW,MAAM,GACJ,MAAM,CAclB;AAED;;;;;GAKG;AACH,qCAHW,MAAM,GACJ,MAAM,EAAE,CAoBpB;AAED;;;;;GAKG;AACH,uCAHW,MAAM,GACJ;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CA0BjD;AA6CD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DC;AA4bD;;;;;;;;GAQG;AACH,mDAHW,MAAM,GACJ,MAAM,EAAE,CAqdpB;AAkJD;;;;;;GAMG;AACH,uDAJW,MAAM,UACN,MAAM,GACJ;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA0CnD;AAED;;;;;;;GAOG;AACH,uDALW,MAAM,UACN,MAAM,cACN,MAAM,GACJ;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAuBnD;AAoED;;;;;;;;;GASG;AACH,4DAJW,MAAM,UACN,MAAM,GACJ,MAAM,EAAE,CAkEpB;AA+BD;;;;;;GAMG;AACH,oCAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAiN3B;AAoVD,uDA8CC;AAoBD;;;;;;GAMG;AACH,4CAJW;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,WACrC,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CA4I3B;AAED;;;;;GAKG;AACH,kCAHW,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAqB3B;AAED;;;;;;GAMG;AACH,4CAJW,MAAM,WACN,MAAM,GACJ;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAmChD;AAED;;;;;GAKG;AACH,2CAHW,MAAM,GACJ,MAAM,GAAG,SAAS,CAU9B;AA11ED,gDAKE"}
|
|
@@ -6,6 +6,22 @@ export function renderSarifReport(report: any, options?: {}): string;
|
|
|
6
6
|
* @returns {string} JSON output
|
|
7
7
|
*/
|
|
8
8
|
export function renderJsonReport(report: object): string;
|
|
9
|
+
/**
|
|
10
|
+
* Render a direct BOM audit report for terminal output.
|
|
11
|
+
*
|
|
12
|
+
* @param {object} report aggregate direct audit report
|
|
13
|
+
* @param {object} options render options
|
|
14
|
+
* @returns {string} console report text
|
|
15
|
+
*/
|
|
16
|
+
export function renderDirectBomConsoleReport(report: object, options?: object): string;
|
|
17
|
+
/**
|
|
18
|
+
* Render a direct BOM audit report as SARIF 2.1.0 output.
|
|
19
|
+
*
|
|
20
|
+
* @param {object} report aggregate direct audit report
|
|
21
|
+
* @param {object} [options] render options
|
|
22
|
+
* @returns {string} SARIF output
|
|
23
|
+
*/
|
|
24
|
+
export function renderDirectBomSarifReport(report: object, options?: object): string;
|
|
9
25
|
/**
|
|
10
26
|
* Render an audit report for terminal output.
|
|
11
27
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporters.d.ts","sourceRoot":"","sources":["../../../lib/audit/reporters.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reporters.d.ts","sourceRoot":"","sources":["../../../lib/audit/reporters.js"],"names":[],"mappings":"AA6gBA,qEAkDC;AAED;;;;;GAKG;AACH,yCAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;GAMG;AACH,qDAJW,MAAM,YACN,MAAM,GACJ,MAAM,CA8ClB;AAED;;;;;;GAMG;AACH,mDAJW,MAAM,YACN,MAAM,GACJ,MAAM,CAuClB;AAED;;;;;;GAMG;AACH,4CAJW,MAAM,YACN,MAAM,GACJ,MAAM,CA2DlB;AAED;;;;;;;GAOG;AACH,8CALW,MAAM,UACN,MAAM,YACN,MAAM,GACJ,MAAM,CAmBlB;AAED;;;;;;;GAOG;AACH,oDALW,MAAM,WACN,MAAM,YACN,MAAM,GACJ,MAAM,EAAE,CAgFpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../../lib/audit/targets.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../../lib/audit/targets.js"],"names":[],"mappings":"AAmKA;;;;;;;GAOG;AACH,gDAHW,MAAM,GAAG,SAAS,GAChB,OAAO,CAOnB;AAuOD;;;;;;;GAOG;AACH,+DAHW;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,GACnC,OAAO,CAAC,IAAI,CAAC,CA6EzB;AAkBD;;;;;GAKG;AACH,kDAHW,MAAM,GAAG,SAAS,GAChB,MAAM,CAOlB;AAED;;;;;;;GAOG;AACH,mDALW,MAAM,cACN,MAAM,YACN,MAAM,GAAG,MAAM,GAAG,SAAS,GACzB;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAmGpD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,+CAfW;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,YACrC,MAAM,GAAG,MAAM,GAAG,SAAS,GACzB;IACR,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE;QACL,gBAAgB,EAAE,MAAM,CAAC;QACzB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;QACvB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAmJH;AA1wBD,+CAA+D"}
|
package/types/lib/cli/index.d.ts
CHANGED
|
@@ -235,6 +235,14 @@ export function createCsharpBom(path: string, options: Object): Promise<Object |
|
|
|
235
235
|
* @returns {Promise<Object>} Promise resolving to BOM object
|
|
236
236
|
*/
|
|
237
237
|
export function createVscodeExtensionBom(path: string, options: Object): Promise<Object>;
|
|
238
|
+
/**
|
|
239
|
+
* Function to create BOM for Electron ASAR archives.
|
|
240
|
+
*
|
|
241
|
+
* @param {string} path to a single archive or a directory to scan
|
|
242
|
+
* @param {Object} options Parse options from the cli
|
|
243
|
+
* @returns {Promise<Object>} Promise resolving to BOM object
|
|
244
|
+
*/
|
|
245
|
+
export function createAsarBom(path: string, options: Object): Promise<Object>;
|
|
238
246
|
/**
|
|
239
247
|
* Function to create BOM for installed Chrome and Chromium-based browser extensions.
|
|
240
248
|
*
|
|
@@ -278,6 +286,14 @@ export function createMultiXBom(pathList: string[], options: Object): Promise<Ob
|
|
|
278
286
|
* @returns {Promise<Object|undefined>} Promise resolving to BOM object, or undefined if path is not readable
|
|
279
287
|
*/
|
|
280
288
|
export function createXBom(path: string, options: Object): Promise<Object | undefined>;
|
|
289
|
+
/**
|
|
290
|
+
* Function to create a hardware BOM for the current host.
|
|
291
|
+
*
|
|
292
|
+
* @param {string} _path Source path (unused for live host HBOM generation)
|
|
293
|
+
* @param {Object} options Parse options from the cli
|
|
294
|
+
* @returns {Promise<Object>} Promise resolving to BOM object
|
|
295
|
+
*/
|
|
296
|
+
export function createHBom(_path: string, options: Object): Promise<Object>;
|
|
281
297
|
/**
|
|
282
298
|
* Function to create bom string for various languages
|
|
283
299
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/cli/index.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/cli/index.js"],"names":[],"mappings":"AAo8BA;;;;;;;;;GASG;AACH,wCANW,MAAM,cACN,MAAM,OACN,MAAM,UACN,MAAM,GACJ,MAAM,EAAE,CAcpB;AA6bD;;;;;;;GAOG;AACH,mCALW,MAAM,WACN,MAAM,GAEJ,MAAM,CA8ElB;AAED;;;;;;GAMG;AACH,uCAJW,MAAM,WACN,MAAM,GACJ,MAAM,GAAC,SAAS,CAI5B;AAED;;;;;;GAMG;AACH,sCAJW,MAAM,WACN,MAAM,GACJ,MAAM,GAAC,SAAS,CAwB5B;AAED;;;;;;GAMG;AACH,oCAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAouC3B;AAsKD,0EA4/BC;AAgFD;;;;;;;;;;;GAWG;AACH,qDAHW,MAAM,GACJ,MAAM,GAAG,IAAI,CAwEzB;AAED;;;;;;GAMG;AACH,sCAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAylB3B;AAED;;;;;;GAMG;AACH,kCAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAoavC;AAED;;;;;;GAMG;AACH,oCAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC,CAmJrC;AA2FD;;;;;;GAMG;AACH,oCAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAiE3B;AAED;;;;;;GAMG;AACH,mCAJW,MAAM,WACN,MAAM,GACJ,MAAM,CAmPlB;AAED;;;;;;GAMG;AACH,uCAJW,MAAM,WACN,MAAM,GACJ,MAAM,CA+GlB;AAED;;;;;;GAMG;AACH,uCAJW,MAAM,WACN,MAAM,GACJ,MAAM,CA0BlB;AAED;;;;;;GAMG;AACH,sCAJW,MAAM,WACN,MAAM,GACJ,MAAM,CA0BlB;AAED;;;;;;GAMG;AACH,sCAJW,MAAM,WACN,MAAM,GACJ,MAAM,CAyBlB;AAED;;;;;;GAMG;AACH,0CAJW,MAAM,WACN,MAAM,GACJ,MAAM,CAsBlB;AAED;;;;;;GAMG;AACH,mCAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAmE3B;AAED;;;;;;GAMG;AACH,uCAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CA2C3B;AAED;;;;;;GAMG;AACH,oCAJW,MAAM,WACN,MAAM,GACJ,MAAM,CA0BlB;AAED;;;;;;GAMG;AACH,qCAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CA0I3B;AAED;;;;;;GAMG;AACH,qCAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgKvC;AAED;;;;;;GAMG;AACH,mCAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAoH3B;AAED;;;;;;GAMG;AACH,oCAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CA6C3B;AAED;;;;;;GAMG;AACH,iDAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAkU3B;AAED;;;;;;GAMG;AACH,mCAJW,MAAM,WACN,MAAM,GACJ,MAAM,CA8JlB;AAED;;;;;;GAMG;AACH,oCAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CA0P3B;AAED;;;;;;GAMG;AACH,sCAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC,CAkbrC;AAED;;;;;;;;;GASG;AACH,+CAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CA+F3B;AAED;;;;;;GAMG;AACH,oCAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAyL3B;AAED;;;;;;GAMG;AACH,+CAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAoD3B;AA2FD;;;;;;GAMG;AACH,2CAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CA+D3B;AAED;;;;;;;;;GASG;AACH,mCAPW,MAAM,sCAEN,MAAM,wBAGJ,MAAM,CA4ClB;AAED;;;;;;GAMG;AACH,0CAJW,MAAM,EAAE,WACR,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAy9B3B;AAED;;;;;;GAMG;AACH,iCAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC,CAmXrC;AAED;;;;;;GAMG;AACH,kCAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAsB3B;AAED;;;;;;GAMG;AACH,gCAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CA8T3B;AAED;;;;;;;GAOG;AACH,gCALW,MAAM,eACN,MAAM,GACL,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CA+HjD"}
|
|
@@ -82,18 +82,21 @@ export function catalogGradleDeps(dirPath: any, purlsJars: any, Namespaces: any)
|
|
|
82
82
|
export function createAndStoreSlice(purl: any, purlsJars: any, Usages: any, options?: {}): Promise<any>;
|
|
83
83
|
export function createSlice(purlOrLanguages: any, filePath: any, sliceType?: string, options?: {}): Promise<{
|
|
84
84
|
tempDir?: undefined;
|
|
85
|
+
tempDirOwned?: undefined;
|
|
85
86
|
slicesFile?: undefined;
|
|
86
87
|
atomFile?: undefined;
|
|
87
88
|
openapiSpecFile?: undefined;
|
|
88
89
|
semanticsSlicesFile?: undefined;
|
|
89
90
|
} | {
|
|
90
91
|
tempDir: any;
|
|
92
|
+
tempDirOwned: boolean;
|
|
91
93
|
slicesFile: any;
|
|
92
94
|
atomFile?: undefined;
|
|
93
95
|
openapiSpecFile?: undefined;
|
|
94
96
|
semanticsSlicesFile?: undefined;
|
|
95
97
|
} | {
|
|
96
98
|
tempDir: any;
|
|
99
|
+
tempDirOwned: boolean;
|
|
97
100
|
slicesFile: any;
|
|
98
101
|
atomFile: any;
|
|
99
102
|
openapiSpecFile: any;
|
|
@@ -120,6 +123,7 @@ export function analyzeProject(dbObjMap: Object, options: Object): Promise<{
|
|
|
120
123
|
servicesMap: {};
|
|
121
124
|
dataFlowFrames: {};
|
|
122
125
|
tempDir: any;
|
|
126
|
+
tempDirOwned: any;
|
|
123
127
|
userDefinedTypesMap: {};
|
|
124
128
|
cryptoComponents: any[];
|
|
125
129
|
cryptoGeneratePurls: {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evinser.d.ts","sourceRoot":"","sources":["../../../lib/evinser/evinser.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"evinser.d.ts","sourceRoot":"","sources":["../../../lib/evinser/evinser.js"],"names":[],"mappings":"AA+BA;;;;GAIG;AACH,mCAFW,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAyDhB;AAED,6GAiDC;AAED,gGAkCC;AAED,wGAqBC;AAED;;;;;;;;;;;;;;;;;;;;;GA2KC;AAED,6EAuBC;AAED;;;EA8BC;AAcD;;;;;GAKG;AACH,yCAHW,MAAM,WACN,MAAM;;;;;;;;;;;;;;;GA6KhB;AAED,wLA8DC;AAED;;;;;;;;;;;GAWG;AACH,2CARW,MAAM,uBACN,MAAM,0BAEN,MAAM,mBACN,MAAM,kBACN,MAAM,iBAqOhB;AAED;;;;;;;GAOG;AACH,yFAHW,MAAM,GACJ,MAAM,CAiGlB;AAyBD,sGAyEC;AAED,wGAmCC;AAED;;;;;;GAMG;AACH,mDAJW,MAAM,8BAEN,MAAM,uBA6DhB;AAED;;;;;;GAMG;AACH,gDAJW,MAAM,wCAEN,MAAM,QAkDhB;AAED,yEAWC;AAED,gEAsFC;AAED;;;;;;GAMG;AACH,iDAJW,MAAM,WACN,MAAM,OA0KhB;AAED;;;;;;;;;;GAUG;AACH,gDAPW,MAAM,uBACN,MAAM,iBACN,MAAM,YACN,MAAM,oBACN,MAAM,kBACN,MAAM,eAoHhB;AAED;;;;;;;GAOG;AACH,kDAHW,MAAM,mBACN,MAAM;;;;;;;;;;;;;EA4FhB;AAED;;;;;GAKG;AACH,kDAaC;AAED;;;;;GAKG;AACH,2CAHW,MAAM,UAKhB;AAED,gGAiDC"}
|
|
@@ -1,4 +1,22 @@
|
|
|
1
|
+
export function analyzeSuspiciousJsSource(source: any): {
|
|
2
|
+
executionIndicators: any[];
|
|
3
|
+
indicators: any[];
|
|
4
|
+
networkIndicators: any[];
|
|
5
|
+
obfuscationIndicators: any[];
|
|
6
|
+
};
|
|
7
|
+
export function analyzeJsCapabilitiesSource(source: any): {
|
|
8
|
+
capabilities: string[];
|
|
9
|
+
hasDynamicFetch: boolean;
|
|
10
|
+
hasDynamicImport: boolean;
|
|
11
|
+
hasEval: boolean;
|
|
12
|
+
indicatorMap: {};
|
|
13
|
+
};
|
|
14
|
+
export function analyzeJsCryptoSource(source: any): {
|
|
15
|
+
algorithms: any[];
|
|
16
|
+
libraries: any[];
|
|
17
|
+
};
|
|
1
18
|
export const CHROMIUM_EXTENSION_CAPABILITY_CATEGORIES: string[];
|
|
19
|
+
export const JS_CAPABILITY_CATEGORIES: string[];
|
|
2
20
|
export function findJSImportsExports(src: any, deep: any): Promise<{
|
|
3
21
|
allImports: {};
|
|
4
22
|
allExports: {};
|
|
@@ -9,6 +27,21 @@ export function analyzeSuspiciousJsFile(filePath: string): {
|
|
|
9
27
|
networkIndicators: string[];
|
|
10
28
|
obfuscationIndicators: string[];
|
|
11
29
|
};
|
|
30
|
+
export function analyzeJsCapabilitiesFile(filePath: any): {
|
|
31
|
+
capabilities: string[];
|
|
32
|
+
hasDynamicFetch: boolean;
|
|
33
|
+
hasDynamicImport: boolean;
|
|
34
|
+
hasEval: boolean;
|
|
35
|
+
indicatorMap: {};
|
|
36
|
+
};
|
|
37
|
+
export function analyzeJsCryptoFile(filePath: any): {
|
|
38
|
+
algorithms: any[];
|
|
39
|
+
libraries: any[];
|
|
40
|
+
};
|
|
41
|
+
export function detectJsCryptoInventory(src: any, deep?: boolean): Promise<{
|
|
42
|
+
algorithms: any[];
|
|
43
|
+
libraries: any[];
|
|
44
|
+
}>;
|
|
12
45
|
export function detectExtensionCapabilities(src: string, deep?: boolean): {
|
|
13
46
|
capabilities: string[];
|
|
14
47
|
indicators: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../../lib/helpers/analyzer.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../../lib/helpers/analyzer.js"],"names":[],"mappings":"AA6yCA;;;;;EAyJC;AA8CD;;;;;;EAmOC;AAyRD;;;EAyaC;AAv7CD,gEAQE;AA4JF,gDAQE;AA6TK;;;GAiBN;AASM,kDAHI,MAAM,GACJ;IAAC,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAAC,qBAAqB,EAAE,MAAM,EAAE,CAAA;CAAC,CAe/H;AAuOM;;;;;;EAcN;AAorBM;;;EAQN;AAEM;;;GA+BN;AAWM,iDANI,MAAM,SACN,OAAO,GACL;IAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE;YAAO,MAAM,GAAE,MAAM,EAAE;KAAC,CAAA;CAAC,CAiK1E;AA68BM,8CAJI,MAAM,SACN,OAAO,GACL;IAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAC,CAsI9E;AASM,wCAJI,MAAM,SACN,OAAO,GACL;IAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAC,CA+uB9E"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function toResolvedValueArray(value: any): any;
|
|
2
|
+
export function resolvedValueKey(value: any): string;
|
|
3
|
+
export function mergeResolvedValues(...values: any[]): any;
|
|
4
|
+
export function filterResolvedValues(value: any, predicate: any): any;
|
|
5
|
+
export function hasOnlyResolvedValues(value: any, predicate: any): any;
|
|
6
|
+
export function getStaticObjectProperty(objectValue: any, propertyName: any): any;
|
|
7
|
+
export function deriveStaticNarrowingsFromCondition(astNode: any, branchTaken: any, getLiteralStringValue: any): any;
|
|
8
|
+
export function resolveStaticValue(astNode: any, staticValueByName: any, getLiteralStringValue: any, getMemberExpressionPropertyName: any, depth?: number): any;
|
|
9
|
+
export function deriveStaticNarrowingsFromSwitchCase(switchCaseNode: any, switchStatementNode: any, staticValueByName: any, getLiteralStringValue: any, getMemberExpressionPropertyName: any): Map<any, any> | undefined;
|
|
10
|
+
export function getScopedStaticValueByName(path: any, staticValueByName: any, getLiteralStringValue: any, getMemberExpressionPropertyName: any): Map<any, any>;
|
|
11
|
+
//# sourceMappingURL=analyzerScope.d.ts.map
|