@cyclonedx/cdxgen 11.2.5 → 11.2.7
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 +12 -1
- package/bin/cdxgen.js +14 -7
- package/data/component-tags.json +1 -1
- package/data/frameworks-list.json +19 -7
- package/data/pypi-pkg-aliases.json +1 -0
- package/lib/cli/index.js +45 -28
- package/lib/evinser/evinser.js +6 -5
- package/lib/helpers/envcontext.js +4 -4
- package/lib/helpers/utils.js +12 -13
- package/lib/helpers/utils.test.js +9 -15
- package/lib/helpers/validator.js +9 -0
- package/lib/managers/binary.js +47 -3
- package/lib/managers/docker.js +46 -24
- package/lib/managers/piptree.js +3 -1
- package/lib/server/openapi.yaml +10 -2
- package/lib/server/server.js +32 -6
- package/lib/stages/pregen/pregen.js +5 -1
- package/package.json +6 -6
- package/types/lib/cli/index.d.ts.map +1 -1
- package/types/lib/helpers/utils.d.ts.map +1 -1
- package/types/lib/helpers/validator.d.ts.map +1 -1
- package/types/lib/managers/binary.d.ts.map +1 -1
- package/types/lib/managers/docker.d.ts.map +1 -1
- package/types/lib/managers/piptree.d.ts.map +1 -1
- package/types/lib/server/server.d.ts.map +1 -1
- package/types/lib/stages/pregen/pregen.d.ts.map +1 -1
package/README.md
CHANGED
|
@@ -516,7 +516,7 @@ Please check out our [contribute to CycloneDX/cdxgen documentation][github-contr
|
|
|
516
516
|
|
|
517
517
|
Before raising a PR, please run the following commands.
|
|
518
518
|
|
|
519
|
-
```
|
|
519
|
+
```shell
|
|
520
520
|
corepack enable pnpm
|
|
521
521
|
pnpm install --config.strict-dep-builds=true
|
|
522
522
|
# Generate types using jsdoc syntax
|
|
@@ -527,6 +527,17 @@ pnpm run lint
|
|
|
527
527
|
pnpm test
|
|
528
528
|
```
|
|
529
529
|
|
|
530
|
+
### Testing main branch
|
|
531
|
+
|
|
532
|
+
Use `pnpm add -g` command to quickly test the main branch.
|
|
533
|
+
|
|
534
|
+
```shell
|
|
535
|
+
corepack pnpm bin -g
|
|
536
|
+
corepack pnpm setup
|
|
537
|
+
corepack pnpm add -g --allow-build sqlite3 https://github.com/CycloneDX/cdxgen
|
|
538
|
+
cdxgen --help
|
|
539
|
+
```
|
|
540
|
+
|
|
530
541
|
## Sponsors
|
|
531
542
|
|
|
532
543
|
<img src="./docs/_media/LevoLogo-LightBg.jpg" width="200" height="auto">
|
package/bin/cdxgen.js
CHANGED
|
@@ -196,17 +196,14 @@ const args = yargs(hideBin(process.argv))
|
|
|
196
196
|
})
|
|
197
197
|
.option("usages-slices-file", {
|
|
198
198
|
description: "Path for the usages slices file created by atom.",
|
|
199
|
-
default: "usages.slices.json",
|
|
200
199
|
hidden: true,
|
|
201
200
|
})
|
|
202
201
|
.option("data-flow-slices-file", {
|
|
203
202
|
description: "Path for the data-flow slices file created by atom.",
|
|
204
|
-
default: "data-flow.slices.json",
|
|
205
203
|
hidden: true,
|
|
206
204
|
})
|
|
207
205
|
.option("reachables-slices-file", {
|
|
208
206
|
description: "Path for the reachables slices file created by atom.",
|
|
209
|
-
default: "reachables.slices.json",
|
|
210
207
|
hidden: true,
|
|
211
208
|
})
|
|
212
209
|
.option("semantics-slices-file", {
|
|
@@ -440,6 +437,15 @@ const options = Object.assign({}, args, {
|
|
|
440
437
|
? resolve(join(filePath, args.output))
|
|
441
438
|
: args.output,
|
|
442
439
|
});
|
|
440
|
+
// Should we create the output directory?
|
|
441
|
+
const outputDirectory = dirname(options.output);
|
|
442
|
+
if (
|
|
443
|
+
outputDirectory &&
|
|
444
|
+
outputDirectory !== process.cwd() &&
|
|
445
|
+
!safeExistsSync(outputDirectory)
|
|
446
|
+
) {
|
|
447
|
+
fs.mkdirSync(outputDirectory, { recursive: true });
|
|
448
|
+
}
|
|
443
449
|
// Filter duplicate types. Eg: -t gradle -t gradle
|
|
444
450
|
if (options.projectType && Array.isArray(options.projectType)) {
|
|
445
451
|
options.projectType = Array.from(new Set(options.projectType));
|
|
@@ -661,6 +667,11 @@ const checkPermissions = (filePath, options) => {
|
|
|
661
667
|
}
|
|
662
668
|
// Secure mode checks
|
|
663
669
|
if (isSecureMode) {
|
|
670
|
+
if (process.env?.GITHUB_TOKEN) {
|
|
671
|
+
console.log(
|
|
672
|
+
"Ensure that the GitHub token provided to cdxgen is restricted to read-only scopes.",
|
|
673
|
+
);
|
|
674
|
+
}
|
|
664
675
|
if (process.permission.has("fs.read", "*")) {
|
|
665
676
|
console.log(
|
|
666
677
|
"\x1b[1;35mSECURE MODE: DO NOT run cdxgen with FileSystemRead permission set to wildcard.\x1b[0m",
|
|
@@ -788,10 +799,6 @@ const checkPermissions = (filePath, options) => {
|
|
|
788
799
|
}
|
|
789
800
|
return;
|
|
790
801
|
}
|
|
791
|
-
// This will prevent people from accidentally using the usages slices belonging to a different project
|
|
792
|
-
if (!options.usagesSlicesFile) {
|
|
793
|
-
options.usagesSlicesFile = `${options.projectName}-usages.json`;
|
|
794
|
-
}
|
|
795
802
|
prepareEnv(filePath, options);
|
|
796
803
|
thoughtLog("Getting ready to generate the BOM ⚡️.");
|
|
797
804
|
let bomNSData = (await createBom(filePath, options)) || {};
|
package/data/component-tags.json
CHANGED
|
@@ -5,6 +5,16 @@
|
|
|
5
5
|
"System.Data",
|
|
6
6
|
"Microsoft.AspNetCore",
|
|
7
7
|
"Microsoft.NETCore",
|
|
8
|
+
"Microsoft.EntityFrameworkCore",
|
|
9
|
+
"pkg:nuget/EntityFramework",
|
|
10
|
+
"pkg:nuget/Microsoft.Build.Framework",
|
|
11
|
+
"EntityFrameworkCore",
|
|
12
|
+
"Microsoft.Data.OData",
|
|
13
|
+
"Microsoft.NETCore.Targets",
|
|
14
|
+
"System.Diagnostics.DiagnosticSource",
|
|
15
|
+
"Microsoft.OData.",
|
|
16
|
+
"Google.Cloud.",
|
|
17
|
+
"PnP.Framework",
|
|
8
18
|
"springframework",
|
|
9
19
|
"pkg:maven/us.springett/alpine",
|
|
10
20
|
"pkg:pypi/flask",
|
|
@@ -26,13 +36,15 @@
|
|
|
26
36
|
"play",
|
|
27
37
|
"spark",
|
|
28
38
|
"struts",
|
|
29
|
-
"
|
|
30
|
-
"react",
|
|
31
|
-
"next",
|
|
32
|
-
"ember",
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
39
|
+
"pkg:npm/%40angular",
|
|
40
|
+
"pkg:npm/react",
|
|
41
|
+
"pkg:npm/next",
|
|
42
|
+
"pkg:npm/ember",
|
|
43
|
+
"pkg:npm/%40electron",
|
|
44
|
+
"pkg:npm/%40protobufjs",
|
|
45
|
+
"pkg:npm/express",
|
|
46
|
+
"pkg:npm/knex",
|
|
47
|
+
"pkg:npm/vue",
|
|
36
48
|
"pkg:pypi/aiohttp",
|
|
37
49
|
"pkg:pypi/bottle",
|
|
38
50
|
"pkg:pypi/cherrypy",
|
package/lib/cli/index.js
CHANGED
|
@@ -15,7 +15,6 @@ import {
|
|
|
15
15
|
import { platform as _platform, arch, homedir } from "node:os";
|
|
16
16
|
import { basename, dirname, join, relative, resolve, sep } from "node:path";
|
|
17
17
|
import process from "node:process";
|
|
18
|
-
import { URL } from "node:url";
|
|
19
18
|
import got from "got";
|
|
20
19
|
import { load as loadYaml } from "js-yaml";
|
|
21
20
|
import { PackageURL } from "packageurl-js";
|
|
@@ -786,6 +785,10 @@ function addMetadata(parentComponent = {}, options = {}, context = {}) {
|
|
|
786
785
|
"PNPM_STORE_PATH",
|
|
787
786
|
"PNPM_HOME",
|
|
788
787
|
"PNPM_CONFIG_",
|
|
788
|
+
"GIO_MODULE_DIR",
|
|
789
|
+
"GST_PLUGIN_PATH",
|
|
790
|
+
"GST_PLUGIN_SYSTEM_PATH",
|
|
791
|
+
"APPDIR_LIBRARY_PATH", // appimage specific which gets prepended to LD_LIBRARY_PATH
|
|
789
792
|
]) {
|
|
790
793
|
if (evalue.includes(senvValue)) {
|
|
791
794
|
mproperties.push({
|
|
@@ -1203,6 +1206,13 @@ function determinePackageType(pkg) {
|
|
|
1203
1206
|
return "application";
|
|
1204
1207
|
}
|
|
1205
1208
|
}
|
|
1209
|
+
// See #1760
|
|
1210
|
+
if (
|
|
1211
|
+
purl.namespace?.startsWith("@types") ||
|
|
1212
|
+
(purl.namespace?.includes("-types") && pkg?.type === "npm")
|
|
1213
|
+
) {
|
|
1214
|
+
return "library";
|
|
1215
|
+
}
|
|
1206
1216
|
for (const cf of frameworksList.all) {
|
|
1207
1217
|
if (
|
|
1208
1218
|
pkg.purl.startsWith(cf) ||
|
|
@@ -1232,6 +1242,13 @@ function determinePackageType(pkg) {
|
|
|
1232
1242
|
}
|
|
1233
1243
|
}
|
|
1234
1244
|
}
|
|
1245
|
+
if (Object.prototype.hasOwnProperty.call(pkg, "tags")) {
|
|
1246
|
+
for (const tag of pkg.tags) {
|
|
1247
|
+
if (tag && tag.toLowerCase() === "framework") {
|
|
1248
|
+
return "framework";
|
|
1249
|
+
}
|
|
1250
|
+
}
|
|
1251
|
+
}
|
|
1235
1252
|
return "library";
|
|
1236
1253
|
}
|
|
1237
1254
|
|
|
@@ -1965,46 +1982,45 @@ export async function createJavaBom(path, options) {
|
|
|
1965
1982
|
options,
|
|
1966
1983
|
)
|
|
1967
1984
|
) {
|
|
1985
|
+
let includedBuilds = [];
|
|
1968
1986
|
let allProjectsStr = [];
|
|
1969
1987
|
if (process.env.GRADLE_INCLUDED_BUILDS) {
|
|
1970
|
-
|
|
1971
|
-
allProjectsStr = process.env.GRADLE_INCLUDED_BUILDS.split(",").map((b) =>
|
|
1988
|
+
includedBuilds = process.env.GRADLE_INCLUDED_BUILDS.split(",").map((b) =>
|
|
1972
1989
|
!b.startsWith(":") ? `:${b}` : b,
|
|
1973
1990
|
);
|
|
1974
1991
|
}
|
|
1975
1992
|
let parallelPropTaskOut = executeParallelGradleProperties(
|
|
1976
1993
|
gradleRootPath,
|
|
1977
|
-
[null],
|
|
1994
|
+
[null].concat(includedBuilds),
|
|
1978
1995
|
process.env.GRADLE_INCLUDED_BUILDS
|
|
1979
1996
|
? []
|
|
1980
1997
|
: ["--init-script", GRADLE_INIT_SCRIPT],
|
|
1981
1998
|
);
|
|
1982
|
-
if (
|
|
1999
|
+
if (process.env.GRADLE_INCLUDED_BUILDS === undefined) {
|
|
1983
2000
|
const outputLines = parallelPropTaskOut.split("\n");
|
|
1984
2001
|
for (const [i, line] of outputLines.entries()) {
|
|
1985
|
-
if (line.startsWith("Root project '")) {
|
|
2002
|
+
if (line.startsWith("Root project '") || line.startsWith("Project '")) {
|
|
1986
2003
|
break;
|
|
1987
2004
|
}
|
|
1988
2005
|
if (line.startsWith("<CDXGEN:includedBuild>")) {
|
|
1989
2006
|
const includedBuild = line.split(">");
|
|
1990
|
-
if (!
|
|
1991
|
-
|
|
2007
|
+
if (!includedBuilds.includes(includedBuild[1].trim())) {
|
|
2008
|
+
includedBuilds.push(includedBuild[1].trim());
|
|
1992
2009
|
}
|
|
1993
2010
|
}
|
|
1994
2011
|
}
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2012
|
+
if (includedBuilds.length > 0) {
|
|
2013
|
+
thoughtLog(
|
|
2014
|
+
`Wait, this gradle project uses composite builds. I must carefully process these ${includedBuilds.length} projects, in addition to the root.`,
|
|
2015
|
+
);
|
|
2016
|
+
if (DEBUG_MODE) {
|
|
2017
|
+
console.log(`Composite builds: ${includedBuilds.join(" ").trim()}.`);
|
|
2018
|
+
}
|
|
2019
|
+
parallelPropTaskOut = parallelPropTaskOut.concat(
|
|
2020
|
+
"\n",
|
|
2021
|
+
executeParallelGradleProperties(gradleRootPath, includedBuilds),
|
|
2022
|
+
);
|
|
2002
2023
|
}
|
|
2003
|
-
parallelPropTaskOut = parallelPropTaskOut.concat(
|
|
2004
|
-
"\n",
|
|
2005
|
-
executeParallelGradleProperties(gradleRootPath, allProjectsStr),
|
|
2006
|
-
);
|
|
2007
|
-
allProjectsStr = [];
|
|
2008
2024
|
}
|
|
2009
2025
|
const splitPropTaskOut = splitOutputByGradleProjects(parallelPropTaskOut, [
|
|
2010
2026
|
"properties",
|
|
@@ -2017,7 +2033,7 @@ export async function createJavaBom(path, options) {
|
|
|
2017
2033
|
rootProject,
|
|
2018
2034
|
retMap.metadata,
|
|
2019
2035
|
);
|
|
2020
|
-
if (!
|
|
2036
|
+
if (!includedBuilds.includes(key)) {
|
|
2021
2037
|
parentComponent = rootComponent;
|
|
2022
2038
|
}
|
|
2023
2039
|
gradleModules.set(key, rootComponent);
|
|
@@ -2303,7 +2319,7 @@ export async function createJavaBom(path, options) {
|
|
|
2303
2319
|
query = ["--bazelrc=.bazelrc"];
|
|
2304
2320
|
}
|
|
2305
2321
|
if (["true", "1"].includes(process.env.BAZEL_USE_ACTION_GRAPH)) {
|
|
2306
|
-
query = query.concat(["
|
|
2322
|
+
query = query.concat(["query", `deps(${target})`, "--output=label"]);
|
|
2307
2323
|
bazelParser = parseBazelActionGraph;
|
|
2308
2324
|
} else {
|
|
2309
2325
|
query = query.concat([
|
|
@@ -2762,11 +2778,7 @@ export async function createNodejsBom(path, options) {
|
|
|
2762
2778
|
let allImports = {};
|
|
2763
2779
|
let allExports = {};
|
|
2764
2780
|
if (
|
|
2765
|
-
!hasAnyProjectType(
|
|
2766
|
-
["docker", "oci", "container", "os", "pnpm"],
|
|
2767
|
-
options,
|
|
2768
|
-
false,
|
|
2769
|
-
) &&
|
|
2781
|
+
!hasAnyProjectType(["docker", "oci", "container", "os"], options, false) &&
|
|
2770
2782
|
!options.noBabel
|
|
2771
2783
|
) {
|
|
2772
2784
|
if (DEBUG_MODE) {
|
|
@@ -4837,7 +4849,10 @@ export function createCppBom(path, options) {
|
|
|
4837
4849
|
parentComponent = retMap.parentComponent;
|
|
4838
4850
|
} else {
|
|
4839
4851
|
parentComponent.components = parentComponent.components || [];
|
|
4840
|
-
if (
|
|
4852
|
+
if (
|
|
4853
|
+
retMap?.parentComponent?.name &&
|
|
4854
|
+
!addedParentComponentsMap[retMap.parentComponent.name]
|
|
4855
|
+
) {
|
|
4841
4856
|
parentComponent.components.push(retMap.parentComponent);
|
|
4842
4857
|
addedParentComponentsMap[retMap.parentComponent.name] = true;
|
|
4843
4858
|
}
|
|
@@ -6806,6 +6821,8 @@ export function trimComponents(components) {
|
|
|
6806
6821
|
if (comp?.evidence?.identity) {
|
|
6807
6822
|
if (!existingComponent.evidence) {
|
|
6808
6823
|
existingComponent.evidence = { identity: [] };
|
|
6824
|
+
} else if (!existingComponent?.evidence?.identity) {
|
|
6825
|
+
existingComponent.evidence.identity = [];
|
|
6809
6826
|
} else if (
|
|
6810
6827
|
existingComponent?.evidence?.identity &&
|
|
6811
6828
|
!Array.isArray(existingComponent.evidence.identity)
|
package/lib/evinser/evinser.js
CHANGED
|
@@ -235,6 +235,8 @@ export async function createSlice(
|
|
|
235
235
|
language = "js";
|
|
236
236
|
} else if (language.startsWith("python")) {
|
|
237
237
|
language = "python";
|
|
238
|
+
} else if (PROJECT_TYPE_ALIASES.scala.includes(language)) {
|
|
239
|
+
language = "scala";
|
|
238
240
|
}
|
|
239
241
|
if (
|
|
240
242
|
PROJECT_TYPE_ALIASES.swift.includes(language) &&
|
|
@@ -253,11 +255,11 @@ export async function createSlice(
|
|
|
253
255
|
}
|
|
254
256
|
const slicesFile =
|
|
255
257
|
options[`${sliceType}SlicesFile`] ||
|
|
256
|
-
join(sliceOutputDir, `${sliceType}.slices.json`);
|
|
258
|
+
join(sliceOutputDir, `${language}-${sliceType}.slices.json`);
|
|
257
259
|
const openapiSpecFile = basename(
|
|
258
260
|
options.openapiSpecFile ||
|
|
259
261
|
process.env?.ATOM_TOOLS_OPENAPI_FILENAME ||
|
|
260
|
-
|
|
262
|
+
join(sliceOutputDir, `${language}-openapi.json`),
|
|
261
263
|
);
|
|
262
264
|
// For some languages such as scala, semantics slices file would get created during usages slicing.
|
|
263
265
|
let semanticsSlicesFile;
|
|
@@ -275,7 +277,7 @@ export async function createSlice(
|
|
|
275
277
|
console.log(
|
|
276
278
|
`Creating ${sliceType} slice for ${resolve(filePath)}. Please wait ...`,
|
|
277
279
|
);
|
|
278
|
-
const atomFile = join(sliceOutputDir,
|
|
280
|
+
const atomFile = join(sliceOutputDir, `${language}-app.atom`);
|
|
279
281
|
let args = [sliceType];
|
|
280
282
|
// Support for crypto slices aka CBOM
|
|
281
283
|
if (sliceType === "reachables" && options.includeCrypto) {
|
|
@@ -319,7 +321,7 @@ export async function createSlice(
|
|
|
319
321
|
ATOM_TOOLS_OPENAPI_FILENAME: openapiSpecFile, // The file would get over-written
|
|
320
322
|
ATOM_TOOLS_OPENAPI_FORMAT:
|
|
321
323
|
process.env?.ATOM_TOOLS_OPENAPI_FORMAT || "openapi3.1.0", // editor.swagger.io doesn't support 3.1.0 yet
|
|
322
|
-
ATOM_TOOLS_WORK_DIR: resolve(filePath), // This must be the directory containing semantics.slices.json
|
|
324
|
+
ATOM_TOOLS_WORK_DIR: process.env?.ATOM_TOOLS_WORK_DIR || resolve(filePath), // This must be the directory containing semantics.slices.json
|
|
323
325
|
OPENAPI_SERVER_URL: process.env?.OPENAPI_SERVER_URL,
|
|
324
326
|
});
|
|
325
327
|
if (!result || !safeExistsSync(slicesFile)) {
|
|
@@ -1410,7 +1412,6 @@ export function createEvinseFile(sliceArtefacts, options) {
|
|
|
1410
1412
|
dataFlowFrames,
|
|
1411
1413
|
cryptoComponents,
|
|
1412
1414
|
cryptoGeneratePurls,
|
|
1413
|
-
openapiSpecFile,
|
|
1414
1415
|
} = sliceArtefacts;
|
|
1415
1416
|
const bomFile = options.input;
|
|
1416
1417
|
const evinseOutFile = options.output;
|
|
@@ -29,10 +29,10 @@ export const GIT_COMMAND = process.env.GIT_CMD || "git";
|
|
|
29
29
|
|
|
30
30
|
// sdkman tool aliases
|
|
31
31
|
export const SDKMAN_JAVA_TOOL_ALIASES = {
|
|
32
|
-
java8: process.env.JAVA8_TOOL || "8.0.
|
|
33
|
-
java11: process.env.JAVA11_TOOL || "11.0.
|
|
34
|
-
java17: process.env.JAVA17_TOOL || "17.0.
|
|
35
|
-
java21: process.env.JAVA21_TOOL || "21.0.
|
|
32
|
+
java8: process.env.JAVA8_TOOL || "8.0.452-amzn", // Temurin no longer offers java8 :(
|
|
33
|
+
java11: process.env.JAVA11_TOOL || "11.0.26-tem",
|
|
34
|
+
java17: process.env.JAVA17_TOOL || "17.0.15-tem",
|
|
35
|
+
java21: process.env.JAVA21_TOOL || "21.0.7-tem",
|
|
36
36
|
java22: process.env.JAVA22_TOOL || "22.0.2-tem",
|
|
37
37
|
java23: process.env.JAVA23_TOOL || "23.0.2-tem",
|
|
38
38
|
java24: process.env.JAVA24_TOOL || "24-tem",
|
package/lib/helpers/utils.js
CHANGED
|
@@ -4091,12 +4091,7 @@ export function executeParallelGradleProperties(
|
|
|
4091
4091
|
* @param {string} rawOutput Raw string output
|
|
4092
4092
|
*/
|
|
4093
4093
|
export function parseBazelActionGraph(rawOutput) {
|
|
4094
|
-
const mavenPrefixRegex =
|
|
4095
|
-
`^.*v1/https/[^/]*(?:${
|
|
4096
|
-
process.env.BAZEL_STRIP_MAVEN_PREFIX || "/maven2/"
|
|
4097
|
-
})?(.*)/(.*)/(.*)/(.*.jar)(?:"| \\\\)?$`,
|
|
4098
|
-
"g",
|
|
4099
|
-
);
|
|
4094
|
+
const mavenPrefixRegex = /^@maven\/\/:(.*)\/(.*)\/(.*)\/(.*\.jar)$/g;
|
|
4100
4095
|
|
|
4101
4096
|
if (typeof rawOutput === "string") {
|
|
4102
4097
|
const deps = [];
|
|
@@ -4104,10 +4099,7 @@ export function parseBazelActionGraph(rawOutput) {
|
|
|
4104
4099
|
const tmpA = rawOutput.split("\n");
|
|
4105
4100
|
tmpA.forEach((l) => {
|
|
4106
4101
|
l = l.replace("\r", "");
|
|
4107
|
-
if (
|
|
4108
|
-
l.trim().startsWith("arguments") ||
|
|
4109
|
-
l.trim().startsWith("bazel-out")
|
|
4110
|
-
) {
|
|
4102
|
+
if (l.trim().startsWith("@maven//:")) {
|
|
4111
4103
|
const matches = Array.from(l.matchAll(mavenPrefixRegex));
|
|
4112
4104
|
|
|
4113
4105
|
if (matches[0]?.[1]) {
|
|
@@ -12665,7 +12657,9 @@ function fullScanCocoaPod(dependency, component, options) {
|
|
|
12665
12657
|
component.authors = [];
|
|
12666
12658
|
if (podspec.authors.constructor === Object) {
|
|
12667
12659
|
Object.entries(podspec.authors).forEach(([name, email]) =>
|
|
12668
|
-
|
|
12660
|
+
email.includes("@")
|
|
12661
|
+
? component.authors.push({ name, email })
|
|
12662
|
+
: component.authors.push({ name }),
|
|
12669
12663
|
);
|
|
12670
12664
|
} else if (podspec.authors.constructor === Array) {
|
|
12671
12665
|
podspec.authors.forEach((name) => component.authors.push({ name }));
|
|
@@ -13034,7 +13028,6 @@ export function executeAtom(src, args, extra_env = {}) {
|
|
|
13034
13028
|
cwd,
|
|
13035
13029
|
encoding: "utf-8",
|
|
13036
13030
|
timeout: TIMEOUT_MS,
|
|
13037
|
-
detached: !isWin && !process.env.CI,
|
|
13038
13031
|
shell: isWin,
|
|
13039
13032
|
killSignal: "SIGKILL",
|
|
13040
13033
|
env,
|
|
@@ -13064,6 +13057,12 @@ export function executeAtom(src, args, extra_env = {}) {
|
|
|
13064
13057
|
console.warn(
|
|
13065
13058
|
"WARN: The binary plugin used by atom has crashed. Please try an alternative container image and file an issue with steps to reproduce at: https://github.com/AppThreat/atom/issues",
|
|
13066
13059
|
);
|
|
13060
|
+
} else if (
|
|
13061
|
+
result.stderr?.includes("Could not parse command line options")
|
|
13062
|
+
) {
|
|
13063
|
+
console.warn(
|
|
13064
|
+
"Invalid command-line options passed to atom. Please file a bug in the cdxgen repository.",
|
|
13065
|
+
);
|
|
13067
13066
|
}
|
|
13068
13067
|
}
|
|
13069
13068
|
if (result.stdout) {
|
|
@@ -13110,7 +13109,7 @@ export function findAppModules(
|
|
|
13110
13109
|
slicesFile = undefined,
|
|
13111
13110
|
) {
|
|
13112
13111
|
const tempDir = mkdtempSync(join(tmpdir(), "atom-deps-"));
|
|
13113
|
-
const atomFile = join(tempDir,
|
|
13112
|
+
const atomFile = join(tempDir, `${language}-app.atom`);
|
|
13114
13113
|
if (!slicesFile) {
|
|
13115
13114
|
slicesFile = join(tempDir, "slices.json");
|
|
13116
13115
|
}
|
|
@@ -1318,7 +1318,7 @@ describe("go data with licenses", () => {
|
|
|
1318
1318
|
afterAll(() => {
|
|
1319
1319
|
delete process.env.FETCH_LICENSE;
|
|
1320
1320
|
});
|
|
1321
|
-
test("parseGoSumData with licenses", async () => {
|
|
1321
|
+
test.skip("parseGoSumData with licenses", async () => {
|
|
1322
1322
|
let dep_list = await parseGosumData(null);
|
|
1323
1323
|
expect(dep_list).toEqual([]);
|
|
1324
1324
|
dep_list = await parseGosumData(
|
|
@@ -1386,7 +1386,7 @@ describe("go data with licenses", () => {
|
|
|
1386
1386
|
});
|
|
1387
1387
|
}, 120000);
|
|
1388
1388
|
|
|
1389
|
-
test("parseGoModData with licenses", async () => {
|
|
1389
|
+
test.skip("parseGoModData with licenses", async () => {
|
|
1390
1390
|
let retMap = await parseGoModData(null);
|
|
1391
1391
|
expect(retMap).toEqual({});
|
|
1392
1392
|
const gosumMap = {
|
|
@@ -2447,7 +2447,7 @@ test("parse github actions workflow data", () => {
|
|
|
2447
2447
|
let dep_list = parseGitHubWorkflowData(
|
|
2448
2448
|
readFileSync("./.github/workflows/nodejs.yml", { encoding: "utf-8" }),
|
|
2449
2449
|
);
|
|
2450
|
-
expect(dep_list.length).toEqual(
|
|
2450
|
+
expect(dep_list.length).toEqual(5);
|
|
2451
2451
|
expect(dep_list[0]).toEqual({
|
|
2452
2452
|
group: "actions",
|
|
2453
2453
|
name: "checkout",
|
|
@@ -2456,18 +2456,12 @@ test("parse github actions workflow data", () => {
|
|
|
2456
2456
|
dep_list = parseGitHubWorkflowData(
|
|
2457
2457
|
readFileSync("./.github/workflows/repotests.yml", { encoding: "utf-8" }),
|
|
2458
2458
|
);
|
|
2459
|
-
expect(dep_list.length).toEqual(
|
|
2459
|
+
expect(dep_list.length).toEqual(13);
|
|
2460
2460
|
expect(dep_list[0]).toEqual({
|
|
2461
2461
|
group: "actions",
|
|
2462
2462
|
name: "checkout",
|
|
2463
2463
|
version: "v4",
|
|
2464
2464
|
});
|
|
2465
|
-
dep_list = parseGitHubWorkflowData(
|
|
2466
|
-
readFileSync("./.github/workflows/app-release.yml", {
|
|
2467
|
-
encoding: "utf-8",
|
|
2468
|
-
}),
|
|
2469
|
-
);
|
|
2470
|
-
expect(dep_list.length).toEqual(3);
|
|
2471
2465
|
});
|
|
2472
2466
|
|
|
2473
2467
|
test("parse cs pkg data", () => {
|
|
@@ -3785,8 +3779,8 @@ test("parsePnpmLock", async () => {
|
|
|
3785
3779
|
expect(parsedList.dependenciesList).toHaveLength(462);
|
|
3786
3780
|
expect(parsedList.pkgList.filter((pkg) => !pkg.scope)).toHaveLength(3);
|
|
3787
3781
|
parsedList = await parsePnpmLock("./pnpm-lock.yaml");
|
|
3788
|
-
expect(parsedList.pkgList.length).toEqual(
|
|
3789
|
-
expect(parsedList.dependenciesList.length).toEqual(
|
|
3782
|
+
expect(parsedList.pkgList.length).toEqual(623);
|
|
3783
|
+
expect(parsedList.dependenciesList.length).toEqual(623);
|
|
3790
3784
|
expect(parsedList.pkgList[0]).toEqual({
|
|
3791
3785
|
group: "@ampproject",
|
|
3792
3786
|
name: "remapping",
|
|
@@ -5184,13 +5178,13 @@ test("parse bazel action graph", () => {
|
|
|
5184
5178
|
encoding: "utf-8",
|
|
5185
5179
|
}),
|
|
5186
5180
|
);
|
|
5187
|
-
expect(deps.length).toEqual(
|
|
5181
|
+
expect(deps.length).toEqual(2);
|
|
5188
5182
|
expect(deps[0].group).toEqual("org.scala-lang");
|
|
5189
5183
|
expect(deps[0].name).toEqual("scala-library");
|
|
5190
|
-
expect(deps[0].version).toEqual("2.13.
|
|
5184
|
+
expect(deps[0].version).toEqual("2.13.16");
|
|
5191
5185
|
expect(deps[1].group).toEqual("org.jline");
|
|
5192
5186
|
expect(deps[1].name).toEqual("jline");
|
|
5193
|
-
expect(deps[1].version).toEqual("3.
|
|
5187
|
+
expect(deps[1].version).toEqual("3.26.3");
|
|
5194
5188
|
});
|
|
5195
5189
|
|
|
5196
5190
|
test("parse bazel build", () => {
|
package/lib/helpers/validator.js
CHANGED
|
@@ -137,8 +137,12 @@ export const validateMetadata = (bomJson) => {
|
|
|
137
137
|
export const validatePurls = (bomJson) => {
|
|
138
138
|
const errorList = [];
|
|
139
139
|
const warningsList = [];
|
|
140
|
+
let frameworksCount = 0;
|
|
140
141
|
if (bomJson?.components) {
|
|
141
142
|
for (const comp of bomJson.components) {
|
|
143
|
+
if (comp.type === "framework") {
|
|
144
|
+
frameworksCount += 1;
|
|
145
|
+
}
|
|
142
146
|
if (comp.type === "cryptographic-asset") {
|
|
143
147
|
if (comp.purl?.length) {
|
|
144
148
|
errorList.push(
|
|
@@ -187,6 +191,11 @@ export const validatePurls = (bomJson) => {
|
|
|
187
191
|
}
|
|
188
192
|
}
|
|
189
193
|
}
|
|
194
|
+
if (frameworksCount > 20) {
|
|
195
|
+
warningsList.push(
|
|
196
|
+
`BOM likey has too many framework components. Count: ${frameworksCount}`,
|
|
197
|
+
);
|
|
198
|
+
}
|
|
190
199
|
if (DEBUG_MODE && warningsList.length !== 0) {
|
|
191
200
|
console.log("===== WARNINGS =====");
|
|
192
201
|
console.log(warningsList);
|
package/lib/managers/binary.js
CHANGED
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
statSync,
|
|
10
10
|
} from "node:fs";
|
|
11
11
|
import { arch as _arch, platform as _platform, homedir } from "node:os";
|
|
12
|
-
import { basename, dirname, join, resolve } from "node:path";
|
|
12
|
+
import { basename, delimiter, dirname, join, resolve } from "node:path";
|
|
13
13
|
import process from "node:process";
|
|
14
14
|
import { PackageURL } from "packageurl-js";
|
|
15
15
|
import {
|
|
@@ -28,8 +28,6 @@ import {
|
|
|
28
28
|
safeMkdirSync,
|
|
29
29
|
} from "../helpers/utils.js";
|
|
30
30
|
|
|
31
|
-
import { URL } from "node:url";
|
|
32
|
-
|
|
33
31
|
const dirName = dirNameStr;
|
|
34
32
|
|
|
35
33
|
const isWin = _platform() === "win32";
|
|
@@ -60,6 +58,9 @@ switch (arch) {
|
|
|
60
58
|
break;
|
|
61
59
|
}
|
|
62
60
|
|
|
61
|
+
// cdxgen plugins version
|
|
62
|
+
const CDXGEN_PLUGINS_VERSION = "1.6.10";
|
|
63
|
+
|
|
63
64
|
// Retrieve the cdxgen plugins directory
|
|
64
65
|
let CDXGEN_PLUGINS_DIR = process.env.CDXGEN_PLUGINS_DIR;
|
|
65
66
|
// Is there a non-empty local plugins directory
|
|
@@ -126,11 +127,54 @@ if (!CDXGEN_PLUGINS_DIR) {
|
|
|
126
127
|
`cdxgen-plugins-bin${pluginsBinSuffix}`,
|
|
127
128
|
"plugins",
|
|
128
129
|
);
|
|
130
|
+
// pnpm add -g
|
|
131
|
+
let altGlobalPlugins;
|
|
132
|
+
if (dirName.includes(join("node_modules", ".pnpm", "@cyclonedx+cdxgen"))) {
|
|
133
|
+
const tmpA = dirName.split(join("node_modules", ".pnpm"));
|
|
134
|
+
altGlobalPlugins = join(
|
|
135
|
+
tmpA[0],
|
|
136
|
+
"node_modules",
|
|
137
|
+
".pnpm",
|
|
138
|
+
`@cyclonedx+cdxgen-plugins-bin${pluginsBinSuffix}@${CDXGEN_PLUGINS_VERSION}`,
|
|
139
|
+
"node_modules",
|
|
140
|
+
"@cyclonedx",
|
|
141
|
+
`cdxgen-plugins-bin${pluginsBinSuffix}`,
|
|
142
|
+
"plugins",
|
|
143
|
+
);
|
|
144
|
+
} else if (dirName.includes(join(".pnpm", "@cyclonedx+cdxgen"))) {
|
|
145
|
+
// pnpm dlx
|
|
146
|
+
const tmpA = dirName.split(".pnpm");
|
|
147
|
+
altGlobalPlugins = join(
|
|
148
|
+
tmpA[0],
|
|
149
|
+
".pnpm",
|
|
150
|
+
`@cyclonedx+cdxgen-plugins-bin${pluginsBinSuffix}@${CDXGEN_PLUGINS_VERSION}`,
|
|
151
|
+
"node_modules",
|
|
152
|
+
"@cyclonedx",
|
|
153
|
+
`cdxgen-plugins-bin${pluginsBinSuffix}`,
|
|
154
|
+
"plugins",
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
const extraNMBinPath = join(
|
|
158
|
+
globalNodePath,
|
|
159
|
+
"..",
|
|
160
|
+
".pnpm",
|
|
161
|
+
"node_modules",
|
|
162
|
+
".bin",
|
|
163
|
+
);
|
|
129
164
|
if (existsSync(globalPlugins)) {
|
|
130
165
|
CDXGEN_PLUGINS_DIR = globalPlugins;
|
|
131
166
|
if (DEBUG_MODE) {
|
|
132
167
|
console.log("Found global plugins", CDXGEN_PLUGINS_DIR);
|
|
133
168
|
}
|
|
169
|
+
} else if (altGlobalPlugins && existsSync(altGlobalPlugins)) {
|
|
170
|
+
CDXGEN_PLUGINS_DIR = altGlobalPlugins;
|
|
171
|
+
// To help detect bin commands such as atom, astgen, etc, we need to set this to the PATH variable.
|
|
172
|
+
if (!process.env?.PATH?.includes(extraNMBinPath)) {
|
|
173
|
+
process.env.PATH = `${extraNMBinPath}${delimiter}${process.env.PATH}`;
|
|
174
|
+
}
|
|
175
|
+
if (DEBUG_MODE) {
|
|
176
|
+
console.log("Found global plugins", CDXGEN_PLUGINS_DIR);
|
|
177
|
+
}
|
|
134
178
|
}
|
|
135
179
|
}
|
|
136
180
|
}
|
package/lib/managers/docker.js
CHANGED
|
@@ -19,6 +19,7 @@ import got from "got";
|
|
|
19
19
|
import { x } from "tar";
|
|
20
20
|
import {
|
|
21
21
|
DEBUG_MODE,
|
|
22
|
+
TIMEOUT_MS,
|
|
22
23
|
extractPathEnv,
|
|
23
24
|
getAllFiles,
|
|
24
25
|
getTmpDir,
|
|
@@ -650,22 +651,45 @@ export const getImage = async (fullImageName) => {
|
|
|
650
651
|
dockerCmd = "nerdctl";
|
|
651
652
|
}
|
|
652
653
|
}
|
|
653
|
-
let
|
|
654
|
+
let needsPull = true;
|
|
655
|
+
// Let's check the local cache first
|
|
656
|
+
let result = spawnSync(dockerCmd, ["images", "--format=json"], {
|
|
654
657
|
encoding: "utf-8",
|
|
655
658
|
});
|
|
656
|
-
if (result.status
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
659
|
+
if (result.status === 0 && result.stdout) {
|
|
660
|
+
for (const imgLine of result.stdout.split("\n")) {
|
|
661
|
+
try {
|
|
662
|
+
const imgObj = JSON.parse(Buffer.from(imgLine).toString());
|
|
663
|
+
if (
|
|
664
|
+
imgObj.Repository === fullImageName ||
|
|
665
|
+
imgObj?.Name?.endsWith(fullImageName)
|
|
666
|
+
) {
|
|
667
|
+
needsPull = false;
|
|
668
|
+
break;
|
|
669
|
+
}
|
|
670
|
+
} catch (err) {
|
|
671
|
+
// continue regardless of error
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
if (needsPull) {
|
|
676
|
+
result = spawnSync(dockerCmd, ["pull", fullImageName], {
|
|
677
|
+
encoding: "utf-8",
|
|
678
|
+
timeout: TIMEOUT_MS,
|
|
679
|
+
});
|
|
680
|
+
if (result.status !== 0 || result.error) {
|
|
681
|
+
if (result.stderr?.includes("docker daemon is not running")) {
|
|
682
|
+
console.log(
|
|
683
|
+
"Ensure Docker for Desktop is running as an administrator with 'Exposing daemon on TCP without TLS' setting turned on.",
|
|
684
|
+
);
|
|
685
|
+
} else if (result.stderr?.includes("not found")) {
|
|
686
|
+
console.log(
|
|
687
|
+
"Set the environment variable DOCKER_CMD to use an alternative command such as nerdctl or podman.",
|
|
688
|
+
);
|
|
689
|
+
} else {
|
|
690
|
+
console.log(result.stderr);
|
|
691
|
+
}
|
|
667
692
|
}
|
|
668
|
-
return localData;
|
|
669
693
|
}
|
|
670
694
|
result = spawnSync(dockerCmd, ["inspect", fullImageName], {
|
|
671
695
|
encoding: "utf-8",
|
|
@@ -854,6 +878,7 @@ export const extractTar = async (fullImageName, dir, options) => {
|
|
|
854
878
|
path.includes("usr/share/doc/") ||
|
|
855
879
|
path.includes("usr/share/i18n/") ||
|
|
856
880
|
path.includes("var/lib/ca-certificates") ||
|
|
881
|
+
path.includes("root/.gnupg") ||
|
|
857
882
|
basename(path).startsWith(".") ||
|
|
858
883
|
path.includes("usr/share/licenses/device-mapper-libs") ||
|
|
859
884
|
[
|
|
@@ -865,6 +890,7 @@ export const extractTar = async (fullImageName, dir, options) => {
|
|
|
865
890
|
"SymbolicLink",
|
|
866
891
|
"RenamedOrSymlinked",
|
|
867
892
|
"HardLink",
|
|
893
|
+
"Link",
|
|
868
894
|
].includes(entry.type)
|
|
869
895
|
);
|
|
870
896
|
},
|
|
@@ -901,22 +927,16 @@ export const extractTar = async (fullImageName, dir, options) => {
|
|
|
901
927
|
return false;
|
|
902
928
|
} else if (["EACCES"].includes(err.code)) {
|
|
903
929
|
console.log(err);
|
|
904
|
-
|
|
905
|
-
* We do not display errors messages for errors:
|
|
906
|
-
* 1) TAR_ENTRY_INFO is an informative error indicating that an entry is being modified.
|
|
907
|
-
* 2) TAR_ENTRY_INVALID indicates that a given entry is not valid tar archive entry and will be skipped.
|
|
908
|
-
*/
|
|
909
|
-
} else if (
|
|
910
|
-
DEBUG_MODE &&
|
|
911
|
-
["TAR_ENTRY_INFO", "TAR_ENTRY_INVALID"].includes(err.code)
|
|
912
|
-
) {
|
|
930
|
+
} else if (["TAR_ENTRY_INFO", "TAR_ENTRY_INVALID"].includes(err.code)) {
|
|
913
931
|
if (
|
|
914
932
|
err?.header?.path?.includes("{") ||
|
|
915
933
|
err?.message?.includes("linkpath required")
|
|
916
934
|
) {
|
|
917
935
|
return false;
|
|
918
936
|
}
|
|
919
|
-
|
|
937
|
+
if (DEBUG_MODE) {
|
|
938
|
+
console.log(err);
|
|
939
|
+
}
|
|
920
940
|
} else if (DEBUG_MODE) {
|
|
921
941
|
console.log(err.code, "is not handled yet in extractTar method.");
|
|
922
942
|
}
|
|
@@ -1372,7 +1392,9 @@ export const getCredsFromHelper = (exeSuffix, serverAddress) => {
|
|
|
1372
1392
|
encoding: "utf-8",
|
|
1373
1393
|
});
|
|
1374
1394
|
if (result.status !== 0 || result.error) {
|
|
1375
|
-
|
|
1395
|
+
if (result.stdout || result.stderr) {
|
|
1396
|
+
console.log(result.stdout, result.stderr);
|
|
1397
|
+
}
|
|
1376
1398
|
} else if (result.stdout) {
|
|
1377
1399
|
const cmdOutput = Buffer.from(result.stdout).toString();
|
|
1378
1400
|
try {
|
package/lib/managers/piptree.js
CHANGED
|
@@ -147,7 +147,9 @@ export const getTreeWithPlugin = (env, python_cmd, basePath) => {
|
|
|
147
147
|
env,
|
|
148
148
|
});
|
|
149
149
|
if (result.status !== 0 || result.error) {
|
|
150
|
-
|
|
150
|
+
if (result.stdout || result.stderr) {
|
|
151
|
+
console.log(result.stdout, result.stderr);
|
|
152
|
+
}
|
|
151
153
|
}
|
|
152
154
|
if (existsSync(pipTreeJson)) {
|
|
153
155
|
tree = JSON.parse(
|
package/lib/server/openapi.yaml
CHANGED
|
@@ -338,6 +338,10 @@ components:
|
|
|
338
338
|
$ref: '#/components/schemas/Services'
|
|
339
339
|
dependencies:
|
|
340
340
|
$ref: '#/components/schemas/Dependencies'
|
|
341
|
+
annotations:
|
|
342
|
+
$ref: '#/components/schemas/Annotations'
|
|
343
|
+
formulation:
|
|
344
|
+
$ref: '#/components/schemas/Formulation'
|
|
341
345
|
|
|
342
346
|
ErrorResponse:
|
|
343
347
|
type: object
|
|
@@ -362,5 +366,9 @@ components:
|
|
|
362
366
|
|
|
363
367
|
Dependencies:
|
|
364
368
|
type: object
|
|
365
|
-
|
|
366
|
-
|
|
369
|
+
|
|
370
|
+
Annotations:
|
|
371
|
+
type: object
|
|
372
|
+
|
|
373
|
+
Formulation:
|
|
374
|
+
type: object
|
package/lib/server/server.js
CHANGED
|
@@ -178,6 +178,14 @@ const start = (options) => {
|
|
|
178
178
|
process.exit(1);
|
|
179
179
|
}
|
|
180
180
|
}
|
|
181
|
+
if (!process.env.CDXGEN_SERVER_ALLOWED_HOSTS) {
|
|
182
|
+
console.log(
|
|
183
|
+
"No allowlist for hosts has been specified. This is a security risk that could expose the system to SSRF vulnerabilities!",
|
|
184
|
+
);
|
|
185
|
+
if (isSecureMode) {
|
|
186
|
+
process.exit(1);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
181
189
|
const cdxgenServer = http
|
|
182
190
|
.createServer(app)
|
|
183
191
|
.listen(options.serverPort, options.serverHost);
|
|
@@ -189,6 +197,15 @@ const start = (options) => {
|
|
|
189
197
|
});
|
|
190
198
|
|
|
191
199
|
app.use("/sbom", async (req, res) => {
|
|
200
|
+
// Limit to only GET and POST requests
|
|
201
|
+
if (req.method && !["GET", "POST"].includes(req.method.toUpperCase())) {
|
|
202
|
+
res.writeHead(405, { "Content-Type": "application/json" });
|
|
203
|
+
return res.end(
|
|
204
|
+
JSON.stringify({
|
|
205
|
+
error: "Method Not Allowed",
|
|
206
|
+
}),
|
|
207
|
+
);
|
|
208
|
+
}
|
|
192
209
|
const requestUrl = new URL(req.url, `http://${req.headers.host}`);
|
|
193
210
|
const q = Object.fromEntries(requestUrl.searchParams.entries());
|
|
194
211
|
let cleanup = false;
|
|
@@ -202,7 +219,7 @@ const start = (options) => {
|
|
|
202
219
|
res.writeHead(500, { "Content-Type": "application/json" });
|
|
203
220
|
return res.end(
|
|
204
221
|
JSON.stringify({
|
|
205
|
-
error: "
|
|
222
|
+
error: "Path or URL is required.",
|
|
206
223
|
}),
|
|
207
224
|
);
|
|
208
225
|
}
|
|
@@ -215,7 +232,7 @@ const start = (options) => {
|
|
|
215
232
|
return res.end(
|
|
216
233
|
JSON.stringify({
|
|
217
234
|
error: "Host Not Allowed",
|
|
218
|
-
details:
|
|
235
|
+
details: "The Git URL host is not allowed as per the allowlist.",
|
|
219
236
|
}),
|
|
220
237
|
);
|
|
221
238
|
}
|
|
@@ -227,20 +244,20 @@ const start = (options) => {
|
|
|
227
244
|
return res.end(
|
|
228
245
|
JSON.stringify({
|
|
229
246
|
error: "Path Not Allowed",
|
|
230
|
-
details:
|
|
247
|
+
details: "Path is not allowed as per the allowlist.",
|
|
231
248
|
}),
|
|
232
249
|
);
|
|
233
250
|
}
|
|
234
251
|
}
|
|
235
252
|
if (srcDir !== path.resolve(srcDir)) {
|
|
236
253
|
console.log(
|
|
237
|
-
`Invoke the API with an absolute path '${path.resolve(srcDir)}'
|
|
254
|
+
`Invoke the API with an absolute path '${path.resolve(srcDir)}' to reduce security risks.`,
|
|
238
255
|
);
|
|
239
256
|
if (isSecureMode) {
|
|
240
257
|
res.writeHead(500, { "Content-Type": "application/json" });
|
|
241
258
|
return res.end(
|
|
242
259
|
JSON.stringify({
|
|
243
|
-
error:
|
|
260
|
+
error: "Absolute path needed",
|
|
244
261
|
details: "Relative paths are not supported in secure mode.",
|
|
245
262
|
}),
|
|
246
263
|
);
|
|
@@ -250,6 +267,15 @@ const start = (options) => {
|
|
|
250
267
|
let bomNSData = (await createBom(srcDir, reqOptions)) || {};
|
|
251
268
|
bomNSData = postProcess(bomNSData, reqOptions);
|
|
252
269
|
if (reqOptions.serverUrl && reqOptions.apiKey) {
|
|
270
|
+
if (!isAllowedHost(reqOptions.serverUrl)) {
|
|
271
|
+
res.writeHead(403, { "Content-Type": "application/json" });
|
|
272
|
+
return res.end(
|
|
273
|
+
JSON.stringify({
|
|
274
|
+
error: "Host Not Allowed",
|
|
275
|
+
details: "The URL host is not allowed as per the allowlist.",
|
|
276
|
+
}),
|
|
277
|
+
);
|
|
278
|
+
}
|
|
253
279
|
if (isSecureMode && !reqOptions.serverUrl?.startsWith("https://")) {
|
|
254
280
|
console.log(
|
|
255
281
|
"Dependency Track API server is used with a non-https url, which poses a security risk.",
|
|
@@ -267,7 +293,7 @@ const start = (options) => {
|
|
|
267
293
|
res.writeHead(500, { "Content-Type": "application/json" });
|
|
268
294
|
return res.end(
|
|
269
295
|
JSON.stringify({
|
|
270
|
-
error:
|
|
296
|
+
error: "Unable to submit the SBOM to the Dependency-Track server",
|
|
271
297
|
details: errorMessages,
|
|
272
298
|
}),
|
|
273
299
|
);
|
|
@@ -79,7 +79,11 @@ export function prepareSdkmanBuild(projectType) {
|
|
|
79
79
|
*/
|
|
80
80
|
export function preparePythonEnv(_filePath, options) {
|
|
81
81
|
if (hasAnyProjectType(["python"], options, false)) {
|
|
82
|
-
if (
|
|
82
|
+
if (
|
|
83
|
+
DEBUG_MODE &&
|
|
84
|
+
process.env?.CDXGEN_IN_CONTAINER !== "true" &&
|
|
85
|
+
arch() !== "x64"
|
|
86
|
+
) {
|
|
83
87
|
console.log(
|
|
84
88
|
`INFO: Many pypi packages have limited support for ${arch()} architecture. Run the cdxgen container image with --platform=linux/amd64 for best experience.`,
|
|
85
89
|
);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyclonedx/cdxgen",
|
|
3
|
-
"version": "11.2.
|
|
3
|
+
"version": "11.2.7",
|
|
4
4
|
"description": "Creates CycloneDX Software Bill of Materials (SBOM) from source or container image",
|
|
5
5
|
"homepage": "http://github.com/cyclonedx/cdxgen",
|
|
6
6
|
"author": "Prabhu Subramanian <prabhu@appthreat.com>",
|
|
@@ -71,8 +71,8 @@
|
|
|
71
71
|
"*": "biome check --fix --no-errors-on-unmatched"
|
|
72
72
|
},
|
|
73
73
|
"dependencies": {
|
|
74
|
-
"@babel/parser": "^7.27.
|
|
75
|
-
"@babel/traverse": "^7.27.
|
|
74
|
+
"@babel/parser": "^7.27.1",
|
|
75
|
+
"@babel/traverse": "^7.27.1",
|
|
76
76
|
"@iarna/toml": "2.2.5",
|
|
77
77
|
"@npmcli/arborist": "9.0.2",
|
|
78
78
|
"ajv": "^8.17.1",
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"cheerio": "^1.0.0",
|
|
81
81
|
"edn-data": "1.1.2",
|
|
82
82
|
"find-up": "7.0.0",
|
|
83
|
-
"glob": "^11.0.
|
|
83
|
+
"glob": "^11.0.2",
|
|
84
84
|
"global-agent": "^3.0.0",
|
|
85
85
|
"got": "^14.4.7",
|
|
86
86
|
"iconv-lite": "^0.6.3",
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
"yoctocolors": "^2.1.1"
|
|
102
102
|
},
|
|
103
103
|
"optionalDependencies": {
|
|
104
|
-
"@appthreat/atom": "2.1.
|
|
104
|
+
"@appthreat/atom": "2.1.18",
|
|
105
105
|
"@appthreat/cdx-proto": "1.0.1",
|
|
106
106
|
"@cyclonedx/cdxgen-plugins-bin": "1.6.10",
|
|
107
107
|
"@cyclonedx/cdxgen-plugins-bin-linux-arm": "1.6.10",
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
"typescript": "^5.8.3"
|
|
134
134
|
},
|
|
135
135
|
"overrides": {
|
|
136
|
-
"glob": "^11.0.
|
|
136
|
+
"glob": "^11.0.2",
|
|
137
137
|
"node-gyp": "^10.2.0",
|
|
138
138
|
"prebuild": "^13.0.0",
|
|
139
139
|
"pacote": "^20.0.0",
|
|
@@ -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":"AA27BA;;;;;;;;GAQG;AACH,gFAFW,MAAM,SAchB;AAqYD;;;;;;;GAOG;AACH,mCALW,MAAM,qBAyEhB;AAED;;;;;GAKG;AACH,uCAHW,MAAM;;;;EAKhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM;;;;EAkBhB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,8BAgvChB;AAED;;;;;GAKG;AACH,sCAHW,MAAM,8BAmvBhB;AAED;;;;;;;;;;GAUG;AACH,+DAsEC;AAED;;;;;GAKG;AACH,sCAHW,MAAM,8BAkehB;AAED;;;;;GAKG;AACH,kCAHW,MAAM,8BA+YhB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,8BAuIhB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,8BAkEhB;AAED;;;;;GAKG;AACH,mCAHW,MAAM,qBAkLhB;AAED;;;;;GAKG;AACH,uCAHW,MAAM,qBAsHhB;AAED;;;;;GAKG;AACH,uCAHW,MAAM,qBA2BhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM,qBA2BhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM,qBA2BhB;AAED;;;;;GAKG;AACH,0CAHW,MAAM,qBAuBhB;AAED;;;;;GAKG;AACH,mCAHW,MAAM,8BAqDhB;AAED;;;;;GAKG;AACH,uCAHW,MAAM,8BA4ChB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,qBA2BhB;AAED;;;;;GAKG;AACH,qCAHW,MAAM,8BA8IhB;AAED;;;;;GAKG;AACH,qCAHW,MAAM,8BAmJhB;AAED;;;;;GAKG;AACH,iDAHW,MAAM,qBAmUhB;AAED;;;;;GAKG;AACH,mCAHW,MAAM,qBAiJhB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,8BAwNhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM,8BA8ZhB;AAED;;;;;GAKG;AACH,2CAHW,MAAM;;;;;;;;;;;;;;;;;;;;GAoChB;AAED;;;;;;;;KA+DC;AAED;;;;;;GAMG;AACH,yDAiGC;AAED;;;;;;;;;GASG;AACH,2GAuCC;AAED;;;;;GAKG;AACH,0CAHW,MAAM,EAAE,8BA6vBlB;AAED;;;;;GAKG;AACH,iCAHW,MAAM,8BAqUhB;AAED;;;;;GAKG;AACH,gCAHW,MAAM,qBA2QhB;AAED;;;;;;;GAOG;AACH,wDAHY,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CA2HjD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/helpers/utils.js"],"names":[],"mappings":"AA8EA;;;;;GAKG;AACH,0DAUC;AAED;;;;;;GAMG;AACH,yDAHmB,OAAO,UAazB;AAmFD,8CAKC;AAED,0CAIC;AAsBD,yCAYC;AAID,2CAQC;AAiOD;;;;;;;GAOG;AACH,4EAiBC;AAED;;;;;;GAMG;AACH,mGA2EC;AAED;;;;;;;;GAQG;AACH,yGAeC;AAyBD;;;;;;GAMG;AACH,qCAJW,MAAM,WACN,MAAM,2BA8BhB;AAED;;;;;;GAMG;AACH,+CAJW,MAAM,WACN,MAAM,+BA0BhB;AAYD;;;;GAIG;AACH,gCAFa,MAAM,CAIlB;AAED,iCAQC;AAED;;;;;;IAMI;AACJ,iDAJW,MAAM,GACJ,OAAO,CAWnB;AAED;;;;;;;;;GASG;AACH,iEA2BC;AAED;;;;;GAKG;AACH,6CAqDC;AAED;;;;;;GAMG;AACH,sEA0DC;AAED;;;;GAIG;AACH,4EAoCC;AAED;;;GAGG;AACH;;EAUC;AAED,sEA0BC;AAED;;;;GAIG;AACH,+DA4CC;AAED;;;;;GAKG;AACH,0CAHW,MAAM,WACN,OAAO,kBA+EjB;AAED;;;;;GAKG;AACH,0CAHW,MAAM,YACN,MAAM;;;GAygBhB;AAED;;;;;;;GAOG;AACH,6CAFW,MAAM,MA2DhB;AAgCD;;;;GAIG;AACH,4CAFW,MAAM;;;GA4OhB;AAED;;;;GAIG;AACH,4CAFW,MAAM,kBAiEhB;AAoHD;;;;;GAKG;AACH,kDAHW,MAAM,GACJ,MAAM,CAgBlB;AAED;;;;;;;;;;GAUG;AACH,wCARW,MAAM;;;;;;;;;;;;;;;;;;GAuvBhB;AAED;;;;GAIG;AACH,8CAFW,MAAM,kBA+ChB;AAED;;;;GAIG;AACH,sCAFW,MAAM,kBAgFhB;AAED;;;;;GAKG;AACH,kCAHW,MAAM,OAqIhB;AAED;;;;;;GAMG;AACH,0CALW,MAAM,WACN,MAAM,OA+JhB;AAED;;;;;;;;;GASG;AACH,4CAPW,MAAM,gBACN,GAAG,aACH,GAAG,gBACH,MAAM,OA+GhB;AAiBD;;;;;;GAMG;AACH,0CALW,MAAM,oBACN,MAAM,kBACN,GAAG,mBACH,MAAM;;;;;;;;;GA6OhB;AAED;;;GAGG;AACH,uCAFW,MAAM,SAoChB;AAED;;;GAGG;AACH,wCAFW,MAAM,OAahB;AAED,yEAwBC;AAED;;;;GAIG;AACH,+CAFW,MAAM;;;EAwDhB;AAED;;;;;GAKG;AACH,iDAHW,MAAM,qBACN,MAAM;;;;;;;;EAmDhB;AAED;;;;;;;;GAQG;AACH,qDANW,MAAM,6CAIJ,MAAM,CAoFlB;AAED;;;GAGG;AACH,iDAFW,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/helpers/utils.js"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../lib/helpers/validator.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../lib/helpers/validator.js"],"names":[],"mappings":"AAuUA;;;;GAIG;AACH,uCAFW,MAAM,WA0FhB;AAjZM,qCAJI,MAAM,WAkDhB;AAOM,0CAFI,MAAM,WA2DhB;AAOM,uCAFI,MAAM,WA4EhB;AA6BM,sCAFI,MAAM,WAwFhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../../lib/managers/binary.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../../lib/managers/binary.js"],"names":[],"mappings":"AAwVA,wDAkBC;AAED;;;;;GAKG;AACH,kDAFa,SAAS,MAAO,CAqB5B;AAED;;;;;;;GAOG;AACH,kEAqaC;AAsDD,gDAoDC;AAED;;;;;;GAMG;AACH,qCAJW,MAAM,cACN,MAAM,WA0ChB;AAED;;;;;;;;GAQG;AACH,kCANW,MAAM,iBACN,MAAM,YACN,OAAO,GAEN,OAAO,CA8BlB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../lib/managers/docker.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../lib/managers/docker.js"],"names":[],"mappings":"AAkFA;;GAEG;AACH,oCAmBC;AAED;;GAEG;AACH,4CA6CC;AA7HD,4BAA6C;AAC7C,kCAAmC,WAAW,CAAC;AAmCxC,kDAeN;AAqFM,iCAHI,MAAM,WACN,MAAM,iDAehB;AAqBM,6DAmBN;AAgLM,4EAsGN;AAEM,oFAwBN;AAUM;;;;;;;;EAyEN;AAsBM,2DAuMN;AAgBM,yFAuGN;AAMM;;;;;;;;;;;;;;GAwDN;AAEM;;;;;;;;GAyGN;AAMM,4EA+IN;AAKM,4EA2GN;AAEM,+EAEN;AAEM,4EA2CN;AAEM,iFA0BN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"piptree.d.ts","sourceRoot":"","sources":["../../../lib/managers/piptree.js"],"names":[],"mappings":"AAgIO,
|
|
1
|
+
{"version":3,"file":"piptree.d.ts","sourceRoot":"","sources":["../../../lib/managers/piptree.js"],"names":[],"mappings":"AAgIO,uFAoCN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../lib/server/server.js"],"names":[],"mappings":"AA8IA,yDAKC;AAED,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../lib/server/server.js"],"names":[],"mappings":"AA8IA,yDAKC;AAED,0CA0KC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pregen.d.ts","sourceRoot":"","sources":["../../../../lib/stages/pregen/pregen.js"],"names":[],"mappings":"AA+BA;;;;;GAKG;AACH,iEAkBC;AAED;;;;GAIG;AACH,iEASC;AAED;;;;;GAKG;AACH,
|
|
1
|
+
{"version":3,"file":"pregen.d.ts","sourceRoot":"","sources":["../../../../lib/stages/pregen/pregen.js"],"names":[],"mappings":"AA+BA;;;;;GAKG;AACH,iEAkBC;AAED;;;;GAIG;AACH,iEASC;AAED;;;;;GAKG;AACH,wEAyCC;AAED;;;;;GAKG;AACH,qEAyDC;AAED;;;;;;;;GAQG;AACH,uEAmBC;AAED;;;;;GAKG;AACH,0EAyCC;AAED;;;;;GAKG;AACH,sEA6EC;AAED;;;;;GAKG;AACH,qEA8PC"}
|