@cdxgen/cdxgen 13.5.0 → 13.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -10
- package/bin/audit.js +7 -4
- package/bin/cdxgen.js +260 -37
- package/bin/convert.js +146 -22
- package/bin/evinse.js +28 -3
- package/bin/repl.js +47 -3
- package/bin/sign.js +211 -34
- package/bin/tracebom.js +18 -6
- package/bin/validate.js +24 -3
- package/bin/verify.js +113 -5
- package/data/behavior-taxonomy.schema.json +1491 -0
- package/data/cyclonedx-2.0-bundled.schema.json +18606 -5528
- package/data/cyclonedx-2.0-cryptography-defs.schema.json +857 -0
- package/data/license-aliases.json +24 -2
- package/data/pqc-migration.json +239 -0
- package/data/remediations.json +176 -0
- package/data/rules/ai-bom.yaml +1 -1
- package/data/rules/brotli-decoder.yaml +107 -0
- package/data/rules/cbom-security.yaml +4 -3
- package/data/rules/package-integrity.yaml +28 -0
- package/data/rules/vscode-extensions.yaml +75 -0
- package/data/spdx-license-list.json +121 -7
- package/data/spdx-licenses.json +69 -0
- package/data/spdx.schema.json +845 -2
- package/lib/audit/index.js +25 -3
- package/lib/cli/bomAssembly.js +172 -4
- package/lib/cli/cliOptions.js +121 -17
- package/lib/cli/index.js +720 -902
- package/lib/cli/jsBom.js +156 -64
- package/lib/cli/jvmBom.js +602 -86
- package/lib/cli/managedBom.js +161 -19
- package/lib/cli/nativeBom.js +52 -5
- package/lib/core/boundedFile.js +344 -0
- package/lib/core/brotliProbe.js +182 -0
- package/lib/core/env.js +34 -0
- package/lib/core/fs.js +138 -3
- package/lib/core/globPatterns.js +218 -0
- package/lib/core/httpClient.js +98 -1
- package/lib/core/lockPaths.js +38 -0
- package/lib/core/paths.js +24 -1
- package/lib/core/processTree.js +100 -8
- package/lib/core/projectConfig.js +332 -25
- package/lib/core/toolRegistry.js +184 -0
- package/lib/ecosystems/cppEvidence.js +263 -106
- package/lib/ecosystems/cppIncludeResolver.js +16 -5
- package/lib/ecosystems/denoutils.js +2 -2
- package/lib/ecosystems/ecosystems.js +25 -10
- package/lib/ecosystems/gemHostProbe.js +301 -0
- package/lib/ecosystems/golem.js +3 -8
- package/lib/ecosystems/gradleutils.js +1909 -229
- package/lib/ecosystems/jsEvidence.js +90 -38
- package/lib/ecosystems/kosi.js +3 -5
- package/lib/ecosystems/npmVersionResolution.js +376 -0
- package/lib/ecosystems/parsers-bazel.js +107 -6
- package/lib/ecosystems/parsers-js.js +505 -22
- package/lib/ecosystems/parsers-misc.js +209 -20
- package/lib/ecosystems/parsers-python.js +178 -30
- package/lib/ecosystems/parsers-rust.js +117 -15
- package/lib/ecosystems/pythonutils.js +128 -2
- package/lib/ecosystems/remote/huggingface.js +22 -0
- package/lib/ecosystems/rubyutils.js +538 -31
- package/lib/ecosystems/rusi.js +2 -4
- package/lib/ecosystems/scalacliutils.js +2 -0
- package/lib/ecosystems/scalasem.js +798 -152
- package/lib/ecosystems/vendoredCode.js +237 -3
- package/lib/ecosystems/venvProbe.js +360 -0
- package/lib/evinser/evinser.js +536 -71
- package/lib/evinser/scalasem.js +5 -1
- package/lib/helpers/agenticToolutils.js +525 -94
- package/lib/helpers/bomSigner.js +43 -9
- package/lib/helpers/jssSigner.js +1276 -0
- package/lib/helpers/vsixutils.js +1574 -315
- package/lib/inventory/agentBlueprint.js +193 -0
- package/lib/inventory/agentToolNames.js +145 -0
- package/lib/inventory/aiCollector.js +153 -7
- package/lib/inventory/aiInventory.js +44 -8
- package/lib/inventory/aiProviders.js +324 -0
- package/lib/inventory/atomUtils.js +77 -0
- package/lib/inventory/bomUtils.js +8 -1
- package/lib/inventory/brotliDecoder.js +142 -0
- package/lib/inventory/buildToolRateLimit.js +1 -1
- package/lib/inventory/cbomutils.js +56 -7
- package/lib/inventory/ciParsers/githubActionsLock.js +821 -0
- package/lib/inventory/citations.js +31 -2
- package/lib/inventory/communityAiConfigParser.js +978 -80
- package/lib/inventory/cyclonedx20.js +152 -0
- package/lib/inventory/cyclonedx20Common.js +286 -0
- package/lib/inventory/cyclonedx20Derived.js +159 -0
- package/lib/inventory/cyclonedx20Parties.js +552 -0
- package/lib/inventory/cyclonedx20Read.js +768 -0
- package/lib/inventory/cyclonedx20ReadCommon.js +374 -0
- package/lib/inventory/cyclonedx20ReadComponents.js +692 -0
- package/lib/inventory/cyclonedx20ReadContext.js +380 -0
- package/lib/inventory/cyclonedx20ReadEvidence.js +466 -0
- package/lib/inventory/cyclonedx20ReadSections.js +599 -0
- package/lib/inventory/cyclonedx20Render.js +766 -0
- package/lib/inventory/cyclonedx20RenderComponents.js +716 -0
- package/lib/inventory/cyclonedx20RenderDefinitions.js +405 -0
- package/lib/inventory/cyclonedx20RenderEvidence.js +726 -0
- package/lib/inventory/cyclonedx20RenderHardware.js +203 -0
- package/lib/inventory/cyclonedx20RenderPatents.js +174 -0
- package/lib/inventory/cyclonedx20RenderRefIds.js +314 -0
- package/lib/inventory/cyclonedx20RenderSections.js +499 -0
- package/lib/inventory/cyclonedx20Tables.js +594 -0
- package/lib/inventory/deps.js +141 -13
- package/lib/inventory/dosai.js +375 -6
- package/lib/inventory/dosaiParsers.js +3 -6
- package/lib/inventory/dotnetRuntime.js +367 -0
- package/lib/inventory/ecosystemFormulationParsers.js +979 -0
- package/lib/inventory/envcontext.js +436 -48
- package/lib/inventory/evidenceUtils.js +13 -1
- package/lib/inventory/fetchBatch.js +1 -1
- package/lib/inventory/formulationParsers.js +124 -14
- package/lib/inventory/gtfobins.js +13 -0
- package/lib/inventory/hbom.js +45 -6
- package/lib/inventory/hbomLoader.js +166 -0
- package/lib/inventory/hostRuntimeProbe.js +686 -0
- package/lib/inventory/jvmLocalRepos.js +9 -2
- package/lib/inventory/jvmToolEnv.js +29 -0
- package/lib/inventory/licenseEnhancer.js +12 -0
- package/lib/inventory/mavenCentralMirror.js +534 -0
- package/lib/inventory/mcpConfigParser.js +5 -0
- package/lib/inventory/nodeBuildInfo.js +218 -0
- package/lib/inventory/nodeHostProbe.js +202 -0
- package/lib/inventory/occurrenceKey.js +90 -0
- package/lib/inventory/osPackageResolver.js +182 -0
- package/lib/inventory/phpBuildInfo.js +10 -59
- package/lib/inventory/phpHostProbe.js +32 -488
- package/lib/inventory/pqcMigration.js +426 -0
- package/lib/inventory/rubyBuildInfo.js +972 -0
- package/lib/inventory/rubyHostProbe.js +218 -0
- package/lib/inventory/rustFormulationParser.js +21 -10
- package/lib/inventory/scalaCoords.js +4 -3
- package/lib/inventory/scalaDedupe.js +440 -0
- package/lib/inventory/source.js +114 -8
- package/lib/managers/binary.js +337 -3
- package/lib/managers/docker.js +79 -0
- package/lib/parsers/huggingfaceManifest.js +9 -1
- package/lib/parsers/huggingfaceUtils.js +18 -0
- package/lib/parsers/kiroPermissions.js +166 -0
- package/lib/parsers/largeJson.js +28 -11
- package/lib/parsers/vscodeExtensionId.js +183 -0
- package/lib/server/server.js +48 -35
- package/lib/stages/postgen/postgen.js +41 -1
- package/lib/stages/postgen/ruleEngine.js +13 -5
- package/lib/stages/postgen/specVersionCompat.js +76 -0
- package/lib/stages/pregen/envAudit.js +1 -0
- package/lib/stages/pregen/pregen.js +114 -57
- package/lib/validator/bomValidator.js +14 -2
- package/lib/validator/complianceEngine.js +30 -3
- package/lib/validator/complianceRules.js +1416 -4
- package/lib/validator/generated/validate-1.6.mjs +1 -1
- package/lib/validator/generated/validate-1.7.mjs +1 -1
- package/lib/validator/generated/validate-2.0.mjs +57554 -13851
- package/lib/validator/index.js +49 -8
- package/lib/validator/reporters/json.js +6 -0
- package/package.json +11 -10
- package/types/bin/repl.d.ts.map +1 -1
- package/types/lib/audit/index.d.ts +6 -2
- package/types/lib/audit/index.d.ts.map +1 -1
- package/types/lib/cli/bomAssembly.d.ts +29 -1
- package/types/lib/cli/bomAssembly.d.ts.map +1 -1
- package/types/lib/cli/cliOptions.d.ts +6 -0
- package/types/lib/cli/cliOptions.d.ts.map +1 -1
- package/types/lib/cli/index.d.ts.map +1 -1
- package/types/lib/cli/jsBom.d.ts +3 -18
- package/types/lib/cli/jsBom.d.ts.map +1 -1
- package/types/lib/cli/jvmBom.d.ts +15 -0
- package/types/lib/cli/jvmBom.d.ts.map +1 -1
- package/types/lib/cli/managedBom.d.ts.map +1 -1
- package/types/lib/cli/nativeBom.d.ts.map +1 -1
- package/types/lib/core/boundedFile.d.ts +100 -0
- package/types/lib/core/boundedFile.d.ts.map +1 -0
- package/types/lib/core/brotliProbe.d.ts +37 -0
- package/types/lib/core/brotliProbe.d.ts.map +1 -0
- package/types/lib/core/env.d.ts +14 -0
- package/types/lib/core/env.d.ts.map +1 -1
- package/types/lib/core/fs.d.ts +4 -0
- package/types/lib/core/fs.d.ts.map +1 -1
- package/types/lib/core/globPatterns.d.ts +70 -0
- package/types/lib/core/globPatterns.d.ts.map +1 -0
- package/types/lib/core/httpClient.d.ts +24 -0
- package/types/lib/core/httpClient.d.ts.map +1 -1
- package/types/lib/core/lockPaths.d.ts +19 -0
- package/types/lib/core/lockPaths.d.ts.map +1 -0
- package/types/lib/core/paths.d.ts +9 -0
- package/types/lib/core/paths.d.ts.map +1 -1
- package/types/lib/core/processTree.d.ts +17 -4
- package/types/lib/core/processTree.d.ts.map +1 -1
- package/types/lib/core/projectConfig.d.ts +47 -8
- package/types/lib/core/projectConfig.d.ts.map +1 -1
- package/types/lib/core/toolRegistry.d.ts +36 -0
- package/types/lib/core/toolRegistry.d.ts.map +1 -0
- package/types/lib/ecosystems/cppEvidence.d.ts +40 -13
- package/types/lib/ecosystems/cppEvidence.d.ts.map +1 -1
- package/types/lib/ecosystems/cppIncludeResolver.d.ts +2 -1
- package/types/lib/ecosystems/cppIncludeResolver.d.ts.map +1 -1
- package/types/lib/ecosystems/ecosystems.d.ts.map +1 -1
- package/types/lib/ecosystems/gemHostProbe.d.ts +28 -0
- package/types/lib/ecosystems/gemHostProbe.d.ts.map +1 -0
- package/types/lib/ecosystems/golem.d.ts.map +1 -1
- package/types/lib/ecosystems/gradleutils.d.ts +294 -20
- package/types/lib/ecosystems/gradleutils.d.ts.map +1 -1
- package/types/lib/ecosystems/jsEvidence.d.ts +14 -1
- package/types/lib/ecosystems/jsEvidence.d.ts.map +1 -1
- package/types/lib/ecosystems/kosi.d.ts.map +1 -1
- package/types/lib/ecosystems/npmVersionResolution.d.ts +119 -0
- package/types/lib/ecosystems/npmVersionResolution.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-bazel.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-js.d.ts +17 -20
- package/types/lib/ecosystems/parsers-js.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-misc.d.ts +19 -0
- package/types/lib/ecosystems/parsers-misc.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-python.d.ts +10 -0
- package/types/lib/ecosystems/parsers-python.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-rust.d.ts.map +1 -1
- package/types/lib/ecosystems/pythonutils.d.ts +19 -1
- package/types/lib/ecosystems/pythonutils.d.ts.map +1 -1
- package/types/lib/ecosystems/remote/huggingface.d.ts.map +1 -1
- package/types/lib/ecosystems/rubyutils.d.ts +144 -12
- package/types/lib/ecosystems/rubyutils.d.ts.map +1 -1
- package/types/lib/ecosystems/rusi.d.ts.map +1 -1
- package/types/lib/ecosystems/scalacliutils.d.ts.map +1 -1
- package/types/lib/ecosystems/scalasem.d.ts +58 -16
- package/types/lib/ecosystems/scalasem.d.ts.map +1 -1
- package/types/lib/ecosystems/vendoredCode.d.ts +26 -0
- package/types/lib/ecosystems/vendoredCode.d.ts.map +1 -1
- package/types/lib/ecosystems/venvProbe.d.ts +40 -0
- package/types/lib/ecosystems/venvProbe.d.ts.map +1 -0
- package/types/lib/evinser/evinser.d.ts +120 -13
- package/types/lib/evinser/evinser.d.ts.map +1 -1
- package/types/lib/evinser/scalasem.d.ts.map +1 -1
- package/types/lib/helpers/agenticToolutils.d.ts +53 -19
- package/types/lib/helpers/agenticToolutils.d.ts.map +1 -1
- package/types/lib/helpers/bomSigner.d.ts +20 -3
- package/types/lib/helpers/bomSigner.d.ts.map +1 -1
- package/types/lib/helpers/jssSigner.d.ts +288 -0
- package/types/lib/helpers/jssSigner.d.ts.map +1 -0
- package/types/lib/helpers/vsixutils.d.ts +303 -19
- package/types/lib/helpers/vsixutils.d.ts.map +1 -1
- package/types/lib/inventory/agentBlueprint.d.ts +70 -0
- package/types/lib/inventory/agentBlueprint.d.ts.map +1 -0
- package/types/lib/inventory/agentToolNames.d.ts +51 -0
- package/types/lib/inventory/agentToolNames.d.ts.map +1 -0
- package/types/lib/inventory/aiCollector.d.ts.map +1 -1
- package/types/lib/inventory/aiInventory.d.ts.map +1 -1
- package/types/lib/inventory/aiProviders.d.ts +85 -0
- package/types/lib/inventory/aiProviders.d.ts.map +1 -0
- package/types/lib/inventory/atomUtils.d.ts +19 -0
- package/types/lib/inventory/atomUtils.d.ts.map +1 -1
- package/types/lib/inventory/bomUtils.d.ts.map +1 -1
- package/types/lib/inventory/brotliDecoder.d.ts +58 -0
- package/types/lib/inventory/brotliDecoder.d.ts.map +1 -0
- package/types/lib/inventory/cbomutils.d.ts +17 -0
- package/types/lib/inventory/cbomutils.d.ts.map +1 -1
- package/types/lib/inventory/ciParsers/githubActionsLock.d.ts +101 -0
- package/types/lib/inventory/ciParsers/githubActionsLock.d.ts.map +1 -0
- package/types/lib/inventory/citations.d.ts +5 -0
- package/types/lib/inventory/citations.d.ts.map +1 -1
- package/types/lib/inventory/communityAiConfigParser.d.ts.map +1 -1
- package/types/lib/inventory/cyclonedx20.d.ts +99 -0
- package/types/lib/inventory/cyclonedx20.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20Common.d.ts +102 -0
- package/types/lib/inventory/cyclonedx20Common.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20Derived.d.ts +74 -0
- package/types/lib/inventory/cyclonedx20Derived.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20Parties.d.ts +91 -0
- package/types/lib/inventory/cyclonedx20Parties.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20Read.d.ts +51 -0
- package/types/lib/inventory/cyclonedx20Read.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20ReadCommon.d.ts +69 -0
- package/types/lib/inventory/cyclonedx20ReadCommon.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20ReadComponents.d.ts +77 -0
- package/types/lib/inventory/cyclonedx20ReadComponents.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20ReadContext.d.ts +118 -0
- package/types/lib/inventory/cyclonedx20ReadContext.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20ReadEvidence.d.ts +40 -0
- package/types/lib/inventory/cyclonedx20ReadEvidence.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20ReadSections.d.ts +45 -0
- package/types/lib/inventory/cyclonedx20ReadSections.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20Render.d.ts +53 -0
- package/types/lib/inventory/cyclonedx20Render.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20RenderComponents.d.ts +73 -0
- package/types/lib/inventory/cyclonedx20RenderComponents.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20RenderDefinitions.d.ts +29 -0
- package/types/lib/inventory/cyclonedx20RenderDefinitions.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20RenderEvidence.d.ts +110 -0
- package/types/lib/inventory/cyclonedx20RenderEvidence.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20RenderHardware.d.ts +42 -0
- package/types/lib/inventory/cyclonedx20RenderHardware.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20RenderPatents.d.ts +26 -0
- package/types/lib/inventory/cyclonedx20RenderPatents.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20RenderRefIds.d.ts +55 -0
- package/types/lib/inventory/cyclonedx20RenderRefIds.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20RenderSections.d.ts +45 -0
- package/types/lib/inventory/cyclonedx20RenderSections.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20Tables.d.ts +134 -0
- package/types/lib/inventory/cyclonedx20Tables.d.ts.map +1 -0
- package/types/lib/inventory/deps.d.ts +35 -2
- package/types/lib/inventory/deps.d.ts.map +1 -1
- package/types/lib/inventory/dosai.d.ts +36 -1
- package/types/lib/inventory/dosai.d.ts.map +1 -1
- package/types/lib/inventory/dosaiParsers.d.ts.map +1 -1
- package/types/lib/inventory/dotnetRuntime.d.ts +91 -0
- package/types/lib/inventory/dotnetRuntime.d.ts.map +1 -0
- package/types/lib/inventory/ecosystemFormulationParsers.d.ts +73 -0
- package/types/lib/inventory/ecosystemFormulationParsers.d.ts.map +1 -0
- package/types/lib/inventory/envcontext.d.ts +74 -12
- package/types/lib/inventory/envcontext.d.ts.map +1 -1
- package/types/lib/inventory/evidenceUtils.d.ts.map +1 -1
- package/types/lib/inventory/formulationParsers.d.ts.map +1 -1
- package/types/lib/inventory/gtfobins.d.ts.map +1 -1
- package/types/lib/inventory/hbom.d.ts +11 -0
- package/types/lib/inventory/hbom.d.ts.map +1 -1
- package/types/lib/inventory/hbomLoader.d.ts +54 -0
- package/types/lib/inventory/hbomLoader.d.ts.map +1 -1
- package/types/lib/inventory/hostRuntimeProbe.d.ts +44 -0
- package/types/lib/inventory/hostRuntimeProbe.d.ts.map +1 -0
- package/types/lib/inventory/jvmLocalRepos.d.ts +5 -1
- package/types/lib/inventory/jvmLocalRepos.d.ts.map +1 -1
- package/types/lib/inventory/jvmToolEnv.d.ts +12 -0
- package/types/lib/inventory/jvmToolEnv.d.ts.map +1 -1
- package/types/lib/inventory/licenseEnhancer.d.ts.map +1 -1
- package/types/lib/inventory/mavenCentralMirror.d.ts +170 -0
- package/types/lib/inventory/mavenCentralMirror.d.ts.map +1 -0
- package/types/lib/inventory/mcpConfigParser.d.ts.map +1 -1
- package/types/lib/inventory/nodeBuildInfo.d.ts +95 -0
- package/types/lib/inventory/nodeBuildInfo.d.ts.map +1 -0
- package/types/lib/inventory/nodeHostProbe.d.ts +15 -0
- package/types/lib/inventory/nodeHostProbe.d.ts.map +1 -0
- package/types/lib/inventory/occurrenceKey.d.ts +52 -0
- package/types/lib/inventory/occurrenceKey.d.ts.map +1 -0
- package/types/lib/inventory/osPackageResolver.d.ts +38 -0
- package/types/lib/inventory/osPackageResolver.d.ts.map +1 -1
- package/types/lib/inventory/phpBuildInfo.d.ts.map +1 -1
- package/types/lib/inventory/phpHostProbe.d.ts.map +1 -1
- package/types/lib/inventory/pqcMigration.d.ts +84 -0
- package/types/lib/inventory/pqcMigration.d.ts.map +1 -0
- package/types/lib/inventory/rubyBuildInfo.d.ts +271 -0
- package/types/lib/inventory/rubyBuildInfo.d.ts.map +1 -0
- package/types/lib/inventory/rubyHostProbe.d.ts +47 -0
- package/types/lib/inventory/rubyHostProbe.d.ts.map +1 -0
- package/types/lib/inventory/rustFormulationParser.d.ts +7 -2
- package/types/lib/inventory/rustFormulationParser.d.ts.map +1 -1
- package/types/lib/inventory/scalaCoords.d.ts.map +1 -1
- package/types/lib/inventory/scalaDedupe.d.ts +43 -0
- package/types/lib/inventory/scalaDedupe.d.ts.map +1 -0
- package/types/lib/inventory/source.d.ts +25 -0
- package/types/lib/inventory/source.d.ts.map +1 -1
- package/types/lib/managers/binary.d.ts.map +1 -1
- package/types/lib/managers/docker.d.ts +12 -0
- package/types/lib/managers/docker.d.ts.map +1 -1
- package/types/lib/parsers/huggingfaceManifest.d.ts +10 -1
- package/types/lib/parsers/huggingfaceManifest.d.ts.map +1 -1
- package/types/lib/parsers/huggingfaceUtils.d.ts +12 -0
- package/types/lib/parsers/huggingfaceUtils.d.ts.map +1 -1
- package/types/lib/parsers/kiroPermissions.d.ts +62 -0
- package/types/lib/parsers/kiroPermissions.d.ts.map +1 -0
- package/types/lib/parsers/largeJson.d.ts +4 -3
- package/types/lib/parsers/largeJson.d.ts.map +1 -1
- package/types/lib/parsers/vscodeExtensionId.d.ts +48 -0
- package/types/lib/parsers/vscodeExtensionId.d.ts.map +1 -0
- package/types/lib/server/server.d.ts.map +1 -1
- package/types/lib/stages/postgen/postgen.d.ts +7 -0
- 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/postgen/specVersionCompat.d.ts +25 -0
- package/types/lib/stages/postgen/specVersionCompat.d.ts.map +1 -1
- package/types/lib/stages/pregen/envAudit.d.ts.map +1 -1
- package/types/lib/stages/pregen/pregen.d.ts +12 -8
- package/types/lib/stages/pregen/pregen.d.ts.map +1 -1
- package/types/lib/validator/bomValidator.d.ts +5 -1
- package/types/lib/validator/bomValidator.d.ts.map +1 -1
- package/types/lib/validator/complianceEngine.d.ts +4 -4
- package/types/lib/validator/complianceEngine.d.ts.map +1 -1
- package/types/lib/validator/complianceRules.d.ts +14 -2
- package/types/lib/validator/complianceRules.d.ts.map +1 -1
- package/types/lib/validator/index.d.ts +10 -0
- package/types/lib/validator/index.d.ts.map +1 -1
- package/types/lib/validator/reporters/json.d.ts.map +1 -1
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
// Bounded reader for the .NET shared frameworks installed in a root file
|
|
2
|
+
// system.
|
|
3
|
+
//
|
|
4
|
+
// The .NET Docker images, dotnet-install.sh and the tarballs put the runtime
|
|
5
|
+
// under <dotnet root>/shared/<framework>/<version>/ without a package manager,
|
|
6
|
+
// so a BOM sees only its files. Each framework directory carries a
|
|
7
|
+
// <framework>.deps.json whose runtime target names the runtime pack it was
|
|
8
|
+
// built from, e.g. `Microsoft.NETCore.App.Runtime.linux-arm64/8.0.32`. That pack
|
|
9
|
+
// is a NuGet package, and it is the identity .NET security advisories list, so
|
|
10
|
+
// it becomes the component's purl.
|
|
11
|
+
// https://learn.microsoft.com/dotnet/core/dependency-loading/default-probing#how-are-the-properties-populated
|
|
12
|
+
|
|
13
|
+
import { closeSync, readSync } from "node:fs";
|
|
14
|
+
import { isAbsolute, join } from "node:path";
|
|
15
|
+
|
|
16
|
+
import { globSync } from "glob";
|
|
17
|
+
|
|
18
|
+
import { openRegularFile } from "../core/boundedFile.js";
|
|
19
|
+
import { applyPurl, tryBuildPurl } from "./purl.js";
|
|
20
|
+
|
|
21
|
+
const MAX_DEPS_JSON_BYTES = 8 * 1024 * 1024;
|
|
22
|
+
const MAX_FRAMEWORKS = 64;
|
|
23
|
+
const FRAMEWORKS = new Set([
|
|
24
|
+
"Microsoft.NETCore.App",
|
|
25
|
+
"Microsoft.AspNetCore.App",
|
|
26
|
+
"Microsoft.WindowsDesktop.App",
|
|
27
|
+
]);
|
|
28
|
+
// Where the .NET images, dotnet-install.sh, the tarballs and the distro
|
|
29
|
+
// packages put the dotnet root.
|
|
30
|
+
const DOTNET_ROOTS = [
|
|
31
|
+
"usr/share/dotnet",
|
|
32
|
+
"usr/lib/dotnet",
|
|
33
|
+
"usr/lib64/dotnet",
|
|
34
|
+
"usr/local/share/dotnet",
|
|
35
|
+
"opt/dotnet",
|
|
36
|
+
"root/.dotnet",
|
|
37
|
+
"home/*/.dotnet",
|
|
38
|
+
];
|
|
39
|
+
const RUNTIME_PACK_RE =
|
|
40
|
+
/^(Microsoft\.[A-Za-z]+(?:\.[A-Za-z]+)*\.App\.Runtime\.[A-Za-z0-9.-]+)\/(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)$/;
|
|
41
|
+
// The version shape a runtime pack names, anchored for the versions a line of
|
|
42
|
+
// `dotnet --list-runtimes` reports.
|
|
43
|
+
const RUNTIME_VERSION_RE = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/;
|
|
44
|
+
// The pre-release label a CPE can name: `rc` or `preview` with its number,
|
|
45
|
+
// written with or without a dot between the label and the number.
|
|
46
|
+
const PRERELEASE_LABEL_RE = /^(rc|preview)\.?(\d+)(?:[.-]|$)/;
|
|
47
|
+
|
|
48
|
+
function readJsonBounded(absPath, rootDir) {
|
|
49
|
+
const opened = openRegularFile(absPath, rootDir);
|
|
50
|
+
if (!opened) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
if (opened.size <= 0 || opened.size > MAX_DEPS_JSON_BYTES) {
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
const buffer = Buffer.allocUnsafe(opened.size);
|
|
58
|
+
const read = readSync(opened.fd, buffer, 0, opened.size, 0);
|
|
59
|
+
return JSON.parse(buffer.toString("utf8", 0, read));
|
|
60
|
+
} catch {
|
|
61
|
+
return undefined;
|
|
62
|
+
} finally {
|
|
63
|
+
try {
|
|
64
|
+
closeSync(opened.fd);
|
|
65
|
+
} catch {
|
|
66
|
+
// already closed
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Read the runtime pack a shared framework's deps.json was built from.
|
|
73
|
+
*
|
|
74
|
+
* @param {Object} depsJson parsed <framework>.deps.json
|
|
75
|
+
* @param {string} framework framework directory name
|
|
76
|
+
* @returns {{pack: string, version: string, rid: string}|undefined}
|
|
77
|
+
*/
|
|
78
|
+
export function runtimePackFromDepsJson(depsJson, framework) {
|
|
79
|
+
const targetName = depsJson?.runtimeTarget?.name;
|
|
80
|
+
if (typeof targetName !== "string") {
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
const target = depsJson?.targets?.[targetName];
|
|
84
|
+
if (!target || typeof target !== "object") {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
for (const key of Object.keys(target)) {
|
|
88
|
+
const match = RUNTIME_PACK_RE.exec(key);
|
|
89
|
+
if (!match?.[1].startsWith(`${framework}.Runtime.`)) {
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
pack: match[1],
|
|
94
|
+
version: match[2],
|
|
95
|
+
rid: match[1].slice(`${framework}.Runtime.`.length),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* The .NET majors whose previews NVD names `preview.<N>`. NVD names the
|
|
103
|
+
* previews of every other .NET major, of ASP.NET Core and of .NET Core
|
|
104
|
+
* `preview<N>`.
|
|
105
|
+
*/
|
|
106
|
+
const DOTTED_PREVIEW_MAJORS = new Set([7, 8, 10]);
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Read the pre-release tag of a runtime version.
|
|
110
|
+
*
|
|
111
|
+
* @param {string} version runtime version
|
|
112
|
+
* @returns {{label: string, number: string}|null|undefined} the `rc` or
|
|
113
|
+
* `preview` tag and its number; undefined for a release; null for a
|
|
114
|
+
* pre-release of any other kind
|
|
115
|
+
*/
|
|
116
|
+
function dotnetPrerelease(version) {
|
|
117
|
+
const dashAt = version.indexOf("-");
|
|
118
|
+
if (dashAt < 0) {
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
const tag = PRERELEASE_LABEL_RE.exec(version.slice(dashAt + 1));
|
|
122
|
+
return tag ? { label: tag[1], number: tag[2] } : null;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* The CPE NVD uses for a shared framework version, with the version and update
|
|
127
|
+
* fields spelled the way the NVD CPE dictionary spells them.
|
|
128
|
+
*
|
|
129
|
+
* The product is `.net` from 5.0 on, `.net_core` before it, and `asp.net_core`
|
|
130
|
+
* for ASP.NET Core. NVD names a .NET Core x.y.0 release and its pre-releases
|
|
131
|
+
* with two version parts (`.net_core:3.1`, `.net_core:3.0:preview9`), and the
|
|
132
|
+
* .NET 5.0 pre-releases the same way (`.net:5.0:rc1`); every other version
|
|
133
|
+
* keeps three. A release candidate is `rc<N>`, and a preview is
|
|
134
|
+
* `preview.<N>` for .NET 7, 8 and 10 and `preview<N>` otherwise. A release
|
|
135
|
+
* keeps the `*` update, which is the only one NVD lists for some releases. A
|
|
136
|
+
* pre-release of any other kind names no version NVD has, so it gets no CPE.
|
|
137
|
+
*
|
|
138
|
+
* @param {string} framework framework directory name
|
|
139
|
+
* @param {string} version runtime version
|
|
140
|
+
* @returns {string|undefined} CPE 2.3 string
|
|
141
|
+
*/
|
|
142
|
+
export function dotnetCpe(framework, version) {
|
|
143
|
+
const base = /^(\d+)\.(\d+)\.(\d+)/.exec(version || "");
|
|
144
|
+
if (!base) {
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
const major = Number(base[1]);
|
|
148
|
+
let product;
|
|
149
|
+
if (framework === "Microsoft.AspNetCore.App") {
|
|
150
|
+
product = "asp.net_core";
|
|
151
|
+
} else if (framework === "Microsoft.NETCore.App") {
|
|
152
|
+
product = major >= 5 ? ".net" : ".net_core";
|
|
153
|
+
} else {
|
|
154
|
+
return undefined;
|
|
155
|
+
}
|
|
156
|
+
const prerelease = dotnetPrerelease(version);
|
|
157
|
+
if (prerelease === null) {
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
160
|
+
let update = "*";
|
|
161
|
+
if (prerelease?.label === "rc") {
|
|
162
|
+
update = `rc${prerelease.number}`;
|
|
163
|
+
} else if (prerelease) {
|
|
164
|
+
update =
|
|
165
|
+
product === ".net" && DOTTED_PREVIEW_MAJORS.has(major)
|
|
166
|
+
? `preview.${prerelease.number}`
|
|
167
|
+
: `preview${prerelease.number}`;
|
|
168
|
+
}
|
|
169
|
+
const twoPart =
|
|
170
|
+
base[3] === "0" &&
|
|
171
|
+
(product === ".net_core" ||
|
|
172
|
+
(product === ".net" && major === 5 && prerelease !== undefined));
|
|
173
|
+
const cpeVersion = twoPart ? `${base[1]}.${base[2]}` : base[0];
|
|
174
|
+
return `cpe:2.3:a:microsoft:${product}:${cpeVersion}:${update}:*:*:*:*:*:*`;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Create the platform component for one installed shared framework.
|
|
179
|
+
*
|
|
180
|
+
* @param {string} framework framework directory name
|
|
181
|
+
* @param {{pack: string, version: string, rid: string}} runtime runtime pack
|
|
182
|
+
* @param {string} [location] root-relative path of the deps.json. A runtime
|
|
183
|
+
* found on the scanning host gets none, since host paths can name the user's
|
|
184
|
+
* home directory.
|
|
185
|
+
* @returns {Object|undefined} component, or undefined when no purl can be built
|
|
186
|
+
*/
|
|
187
|
+
export function createDotnetRuntimeComponent(framework, runtime, location) {
|
|
188
|
+
const component = {
|
|
189
|
+
type: "platform",
|
|
190
|
+
name: runtime.pack,
|
|
191
|
+
version: runtime.version,
|
|
192
|
+
properties: [
|
|
193
|
+
{ name: "cdx:dotnet:sharedFramework", value: framework },
|
|
194
|
+
{ name: "cdx:dotnet:runtimeIdentifier", value: runtime.rid },
|
|
195
|
+
],
|
|
196
|
+
};
|
|
197
|
+
if (location) {
|
|
198
|
+
component.evidence = {
|
|
199
|
+
occurrences: [{ location: `/${location.replace(/^\/+/, "")}` }],
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
const cpe = dotnetCpe(framework, runtime.version);
|
|
203
|
+
if (cpe) {
|
|
204
|
+
component.cpe = cpe;
|
|
205
|
+
}
|
|
206
|
+
const purl = tryBuildPurl({
|
|
207
|
+
type: "nuget",
|
|
208
|
+
name: runtime.pack,
|
|
209
|
+
version: runtime.version,
|
|
210
|
+
});
|
|
211
|
+
if (!purl) {
|
|
212
|
+
return undefined;
|
|
213
|
+
}
|
|
214
|
+
return applyPurl(component, purl);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Parse the output of `dotnet --list-runtimes`, one `<framework> <version>
|
|
219
|
+
* [<directory>]` line per installed runtime. Warnings, update notices, blank
|
|
220
|
+
* lines, unknown frameworks and versions of a shape no runtime pack names are
|
|
221
|
+
* left out, and no more than MAX_FRAMEWORKS runtimes are kept.
|
|
222
|
+
*
|
|
223
|
+
* https://learn.microsoft.com/dotnet/core/install/how-to-detect-installed-versions
|
|
224
|
+
*
|
|
225
|
+
* @param {string} output output of `dotnet --list-runtimes`
|
|
226
|
+
* @returns {{framework: string, version: string, frameworkDir: string}[]} one
|
|
227
|
+
* entry per installed runtime
|
|
228
|
+
*/
|
|
229
|
+
export function parseDotnetListRuntimes(output) {
|
|
230
|
+
const entries = [];
|
|
231
|
+
if (!output) {
|
|
232
|
+
return entries;
|
|
233
|
+
}
|
|
234
|
+
for (const rawLine of `${output}`.split(/\r?\n/)) {
|
|
235
|
+
if (entries.length >= MAX_FRAMEWORKS) {
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
const line = rawLine.trim();
|
|
239
|
+
// The directory is the text between ` [` and the trailing `]`, and can
|
|
240
|
+
// contain spaces, as in `C:\Program Files\dotnet\shared\Microsoft.NETCore.App`.
|
|
241
|
+
const bracketAt = line.indexOf(" [");
|
|
242
|
+
if (bracketAt <= 0 || !line.endsWith("]")) {
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
const head = line.slice(0, bracketAt);
|
|
246
|
+
const spaceAt = head.indexOf(" ");
|
|
247
|
+
if (spaceAt <= 0) {
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
const framework = head.slice(0, spaceAt);
|
|
251
|
+
const version = head.slice(spaceAt + 1);
|
|
252
|
+
if (!FRAMEWORKS.has(framework) || !RUNTIME_VERSION_RE.test(version)) {
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
const frameworkDir = line.slice(bracketAt + 2, line.length - 1);
|
|
256
|
+
entries.push({ framework, version, frameworkDir });
|
|
257
|
+
}
|
|
258
|
+
return entries;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Create the platform component for one runtime the host install reports.
|
|
263
|
+
*
|
|
264
|
+
* The identity comes from the deps.json in the runtime's own directory, read
|
|
265
|
+
* with the directory as the root so the read cannot leave it and a symlink is
|
|
266
|
+
* not followed. Only an absolute directory is read, which is what the dotnet
|
|
267
|
+
* host prints. A runtime whose deps.json is missing, unreadable or names
|
|
268
|
+
* another version keeps its name, its version and its CPE, without a purl:
|
|
269
|
+
* without the runtime identifier of the pack there is no correct nuget purl.
|
|
270
|
+
*
|
|
271
|
+
* @param {{framework: string, version: string, frameworkDir: string}} entry
|
|
272
|
+
* one entry of parseDotnetListRuntimes
|
|
273
|
+
* @returns {Object} platform component
|
|
274
|
+
*/
|
|
275
|
+
export function createHostDotnetRuntimeComponent(entry) {
|
|
276
|
+
const depsJson = isAbsolute(entry.frameworkDir)
|
|
277
|
+
? readJsonBounded(
|
|
278
|
+
join(entry.frameworkDir, entry.version, `${entry.framework}.deps.json`),
|
|
279
|
+
entry.frameworkDir,
|
|
280
|
+
)
|
|
281
|
+
: undefined;
|
|
282
|
+
const runtime = runtimePackFromDepsJson(depsJson, entry.framework);
|
|
283
|
+
// The directory a runtime lives in is named after its version.
|
|
284
|
+
if (runtime && runtime.version === entry.version) {
|
|
285
|
+
const component = createDotnetRuntimeComponent(entry.framework, runtime);
|
|
286
|
+
if (component) {
|
|
287
|
+
return component;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
const component = {
|
|
291
|
+
type: "platform",
|
|
292
|
+
name: entry.framework,
|
|
293
|
+
version: entry.version,
|
|
294
|
+
properties: [
|
|
295
|
+
{ name: "cdx:dotnet:sharedFramework", value: entry.framework },
|
|
296
|
+
],
|
|
297
|
+
};
|
|
298
|
+
const cpe = dotnetCpe(entry.framework, entry.version);
|
|
299
|
+
if (cpe) {
|
|
300
|
+
component.cpe = cpe;
|
|
301
|
+
}
|
|
302
|
+
return component;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Find the .NET shared frameworks installed under a root that no package
|
|
307
|
+
* manager owns, and return one platform component per runtime pack.
|
|
308
|
+
*
|
|
309
|
+
* @param {string} rootDir extracted root file system
|
|
310
|
+
* @param {string[]} [ownedPaths] root-relative paths a package database owns
|
|
311
|
+
* @returns {Object[]} platform components
|
|
312
|
+
*/
|
|
313
|
+
export function collectDotnetRuntimes(rootDir, ownedPaths = []) {
|
|
314
|
+
if (!rootDir) {
|
|
315
|
+
return [];
|
|
316
|
+
}
|
|
317
|
+
const owned = new Set(
|
|
318
|
+
(ownedPaths || []).map((p) => p.replace(/^\/+/, "").replaceAll("\\", "/")),
|
|
319
|
+
);
|
|
320
|
+
let depsFiles = [];
|
|
321
|
+
try {
|
|
322
|
+
depsFiles = globSync(
|
|
323
|
+
DOTNET_ROOTS.map((root) => `${root}/shared/*/*/*.deps.json`),
|
|
324
|
+
{
|
|
325
|
+
cwd: rootDir,
|
|
326
|
+
absolute: false,
|
|
327
|
+
nodir: true,
|
|
328
|
+
dot: true,
|
|
329
|
+
follow: false,
|
|
330
|
+
},
|
|
331
|
+
)
|
|
332
|
+
.map((file) => file.replaceAll("\\", "/"))
|
|
333
|
+
.sort();
|
|
334
|
+
} catch {
|
|
335
|
+
return [];
|
|
336
|
+
}
|
|
337
|
+
const components = [];
|
|
338
|
+
const seen = new Set();
|
|
339
|
+
for (const file of depsFiles.slice(0, MAX_FRAMEWORKS)) {
|
|
340
|
+
if (owned.has(file)) {
|
|
341
|
+
continue;
|
|
342
|
+
}
|
|
343
|
+
const parts = file.split("/");
|
|
344
|
+
const framework = parts[parts.length - 3];
|
|
345
|
+
if (
|
|
346
|
+
!FRAMEWORKS.has(framework) ||
|
|
347
|
+
parts.at(-1) !== `${framework}.deps.json`
|
|
348
|
+
) {
|
|
349
|
+
continue;
|
|
350
|
+
}
|
|
351
|
+
const runtime = runtimePackFromDepsJson(
|
|
352
|
+
readJsonBounded(join(rootDir, file), rootDir),
|
|
353
|
+
framework,
|
|
354
|
+
);
|
|
355
|
+
// The directory a runtime lives in is named after its version.
|
|
356
|
+
if (!runtime || runtime.version !== parts[parts.length - 2]) {
|
|
357
|
+
continue;
|
|
358
|
+
}
|
|
359
|
+
const component = createDotnetRuntimeComponent(framework, runtime, file);
|
|
360
|
+
if (!component || seen.has(component["bom-ref"])) {
|
|
361
|
+
continue;
|
|
362
|
+
}
|
|
363
|
+
seen.add(component["bom-ref"]);
|
|
364
|
+
components.push(component);
|
|
365
|
+
}
|
|
366
|
+
return components;
|
|
367
|
+
}
|