@cdxgen/cdxgen 13.3.0 → 13.5.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.
Files changed (372) hide show
  1. package/README.md +12 -9
  2. package/bin/cdxgen-secure.js +15 -0
  3. package/bin/cdxgen.js +115 -31
  4. package/bin/evinse.js +23 -1
  5. package/bin/hbom.js +15 -7
  6. package/bin/repl.js +115 -0
  7. package/bin/sign.js +45 -15
  8. package/bin/tracebom.js +5 -1
  9. package/bin/validate.js +84 -18
  10. package/bin/verify.js +155 -86
  11. package/data/cbomosdb-queries.json +13 -1
  12. package/data/component-tags.json +8 -0
  13. package/data/helpers/init.gradle +46 -21
  14. package/data/queries-darwin.json +25 -1
  15. package/data/queries-win.json +19 -1
  16. package/data/queries.json +41 -0
  17. package/data/remediations.json +344 -1
  18. package/data/rules/cbom-security.yaml +235 -4
  19. package/data/rules/dependency-sources.yaml +67 -0
  20. package/data/rules/go-binaries.yaml +46 -0
  21. package/data/rules/golem-go.yaml +80 -0
  22. package/data/rules/hbom-compliance.yaml +40 -22
  23. package/data/rules/hbom-performance.yaml +7 -1
  24. package/data/rules/host-topology.yaml +1 -1
  25. package/data/rules/obom-runtime.yaml +31 -2
  26. package/data/rules/php-runtime.yaml +143 -0
  27. package/data/rules/scala-evidence.yaml +115 -0
  28. package/lib/audit/index.js +52 -6
  29. package/lib/cli/bomAssembly.js +28 -3
  30. package/lib/cli/cliOptions.js +110 -3
  31. package/lib/cli/index.js +186 -58
  32. package/lib/cli/jsBom.js +50 -29
  33. package/lib/cli/jvmBom.js +779 -146
  34. package/lib/cli/managedBom.js +1021 -261
  35. package/lib/cli/nativeBom.js +364 -58
  36. package/lib/core/activity.js +12 -0
  37. package/lib/core/env.js +47 -17
  38. package/lib/core/fs.js +31 -21
  39. package/lib/core/httpClient.js +233 -69
  40. package/lib/core/pluginRun.js +184 -0
  41. package/lib/core/processTree.js +100 -0
  42. package/lib/core/projectConfig.js +1 -0
  43. package/lib/core/projectTooling.js +97 -0
  44. package/lib/core/propertySanitizer.js +72 -0
  45. package/lib/core/runState.js +39 -0
  46. package/lib/core/toml.js +72 -0
  47. package/lib/ecosystems/asarutils.js +4 -2
  48. package/lib/ecosystems/bunutils.js +5 -7
  49. package/lib/ecosystems/cargoCache.js +231 -8
  50. package/lib/ecosystems/cmakeResolver.js +10 -21
  51. package/lib/ecosystems/cppBuildContext.js +631 -0
  52. package/lib/ecosystems/cppEvidence.js +337 -22
  53. package/lib/ecosystems/cppIncludeResolver.js +294 -0
  54. package/lib/ecosystems/denoutils.js +93 -66
  55. package/lib/ecosystems/ecosystems.js +1967 -788
  56. package/lib/ecosystems/golem.js +578 -18
  57. package/lib/ecosystems/gradleutils.js +340 -46
  58. package/lib/ecosystems/jsEvidence.js +85 -24
  59. package/lib/ecosystems/kosi.js +21 -4
  60. package/lib/ecosystems/npmutils.js +64 -0
  61. package/lib/ecosystems/parsers-dotnet.js +668 -153
  62. package/lib/ecosystems/parsers-elm.js +46 -28
  63. package/lib/ecosystems/parsers-gleam.js +3 -4
  64. package/lib/ecosystems/parsers-go.js +1283 -297
  65. package/lib/ecosystems/parsers-js.js +92 -26
  66. package/lib/ecosystems/parsers-julia.js +2 -3
  67. package/lib/ecosystems/parsers-jvm.js +463 -29
  68. package/lib/ecosystems/parsers-misc.js +405 -93
  69. package/lib/ecosystems/parsers-python.js +152 -20
  70. package/lib/ecosystems/parsers-rust.js +4 -4
  71. package/lib/ecosystems/parsers-terraform.js +1573 -19
  72. package/lib/ecosystems/pythonutils.js +102 -6
  73. package/lib/ecosystems/remote/huggingface.js +3 -0
  74. package/lib/ecosystems/rubyutils.js +73 -20
  75. package/lib/ecosystems/rusi.js +32 -9
  76. package/lib/ecosystems/sbtutils.js +243 -187
  77. package/lib/ecosystems/scalacliutils.js +343 -0
  78. package/lib/ecosystems/scalasem.js +2620 -0
  79. package/lib/ecosystems/terraformRegistry.js +288 -0
  80. package/lib/ecosystems/utils.js +2 -0
  81. package/lib/ecosystems/vendoredCode.js +156 -0
  82. package/lib/evinser/evinser.js +695 -78
  83. package/lib/evinser/swiftsem.js +68 -5
  84. package/lib/helpers/agenticToolutils.js +2 -2
  85. package/lib/helpers/bomSigner.js +576 -128
  86. package/lib/inventory/agentSkillSpec.js +17 -0
  87. package/lib/inventory/aiCollector.js +4 -1
  88. package/lib/inventory/analyzer.js +110 -127
  89. package/lib/inventory/apkInstalledDb.js +243 -0
  90. package/lib/inventory/atomUtils.js +204 -48
  91. package/lib/inventory/auditCategories.js +10 -3
  92. package/lib/inventory/buildToolRateLimit.js +144 -0
  93. package/lib/inventory/cacheCommands.js +2 -1
  94. package/lib/inventory/cacheDir.js +52 -9
  95. package/lib/inventory/certificates.js +2371 -0
  96. package/lib/inventory/cmakeBuildDirs.js +254 -0
  97. package/lib/inventory/communityAiConfigParser.js +4 -9
  98. package/lib/inventory/deps.js +507 -128
  99. package/lib/inventory/display.js +200 -3
  100. package/lib/inventory/dosai.js +747 -101
  101. package/lib/inventory/dosaiParsers.js +310 -15
  102. package/lib/inventory/dynamic.js +96 -8
  103. package/lib/inventory/envcontext.js +168 -5
  104. package/lib/inventory/evidenceUtils.js +590 -132
  105. package/lib/inventory/fetchBatch.js +574 -38
  106. package/lib/inventory/fetchDiskCache.js +597 -0
  107. package/lib/inventory/forgeEnricher.js +14 -5
  108. package/lib/inventory/formulationParsers.js +3 -2
  109. package/lib/inventory/goBuildInfo.js +140 -0
  110. package/lib/inventory/hbom.js +67 -7
  111. package/lib/inventory/hbomAnalysis.js +16 -0
  112. package/lib/inventory/hostTopology.js +21 -0
  113. package/lib/inventory/jvmLocalRepos.js +917 -0
  114. package/lib/inventory/mcpConfigParser.js +2 -3
  115. package/lib/inventory/osPackagePurl.js +244 -0
  116. package/lib/inventory/osPackageResolver.js +89 -87
  117. package/lib/inventory/osinfo.js +79 -31
  118. package/lib/inventory/osqueryTransform.js +114 -5
  119. package/lib/inventory/parentSelection.js +146 -0
  120. package/lib/inventory/phpBuildInfo.js +487 -0
  121. package/lib/inventory/phpHostProbe.js +641 -0
  122. package/lib/inventory/rootfsCerts.js +426 -0
  123. package/lib/inventory/rustFormulationParser.js +3 -4
  124. package/lib/inventory/scalaCoords.js +153 -0
  125. package/lib/inventory/source.js +215 -11
  126. package/lib/inventory/spdx.js +245 -0
  127. package/lib/inventory/traceRunner.js +93 -8
  128. package/lib/inventory/tracedCrypto.js +423 -0
  129. package/lib/managers/binary.js +529 -183
  130. package/lib/managers/docker.js +199 -44
  131. package/lib/managers/oci.js +24 -2
  132. package/lib/parsers/cmakeCache.js +69 -0
  133. package/lib/parsers/cmakeLists.js +16 -2
  134. package/lib/parsers/cmakePresets.js +400 -0
  135. package/lib/parsers/compileCommands.js +557 -0
  136. package/lib/parsers/email.js +277 -0
  137. package/lib/parsers/largeJson.js +34 -2
  138. package/lib/parsers/strictJson.js +322 -0
  139. package/lib/parsers/terraformConfig.js +1073 -0
  140. package/lib/parsers/terraformSource.js +652 -0
  141. package/lib/server/server.js +209 -1
  142. package/lib/stages/postgen/annotator.js +17 -1
  143. package/lib/stages/postgen/introspection/markers.js +1 -1
  144. package/lib/stages/postgen/introspection/reflect.js +4 -1
  145. package/lib/stages/postgen/postgen.js +20 -6
  146. package/lib/stages/postgen/ruleEngine.js +58 -1
  147. package/lib/stages/postgen/specVersionCompat.js +62 -0
  148. package/lib/stages/pregen/pregen.js +117 -5
  149. package/lib/validator/bomValidator.js +26 -5
  150. package/lib/validator/generated/runtime.mjs +13 -0
  151. package/lib/validator/generated/validate-1.6.mjs +26 -7
  152. package/lib/validator/generated/validate-1.7.mjs +31 -12
  153. package/lib/validator/generated/validate-2.0.mjs +30 -11
  154. package/lib/validator/index.js +25 -10
  155. package/lib/validator/reporters/json.js +1 -0
  156. package/package.json +23 -23
  157. package/types/bin/cdxgen-secure.d.ts +3 -0
  158. package/types/bin/cdxgen-secure.d.ts.map +1 -0
  159. package/types/bin/repl.d.ts.map +1 -1
  160. package/types/lib/audit/index.d.ts.map +1 -1
  161. package/types/lib/cli/bomAssembly.d.ts +9 -2
  162. package/types/lib/cli/bomAssembly.d.ts.map +1 -1
  163. package/types/lib/cli/cliOptions.d.ts +43 -0
  164. package/types/lib/cli/cliOptions.d.ts.map +1 -1
  165. package/types/lib/cli/index.d.ts.map +1 -1
  166. package/types/lib/cli/jsBom.d.ts.map +1 -1
  167. package/types/lib/cli/jvmBom.d.ts +44 -1
  168. package/types/lib/cli/jvmBom.d.ts.map +1 -1
  169. package/types/lib/cli/managedBom.d.ts +7 -4
  170. package/types/lib/cli/managedBom.d.ts.map +1 -1
  171. package/types/lib/cli/nativeBom.d.ts +3 -1
  172. package/types/lib/cli/nativeBom.d.ts.map +1 -1
  173. package/types/lib/core/activity.d.ts.map +1 -1
  174. package/types/lib/core/env.d.ts +27 -2
  175. package/types/lib/core/env.d.ts.map +1 -1
  176. package/types/lib/core/fs.d.ts.map +1 -1
  177. package/types/lib/core/httpClient.d.ts +13 -8
  178. package/types/lib/core/httpClient.d.ts.map +1 -1
  179. package/types/lib/core/pluginRun.d.ts +97 -0
  180. package/types/lib/core/pluginRun.d.ts.map +1 -0
  181. package/types/lib/core/processTree.d.ts +36 -0
  182. package/types/lib/core/processTree.d.ts.map +1 -0
  183. package/types/lib/core/projectConfig.d.ts.map +1 -1
  184. package/types/lib/core/projectTooling.d.ts +41 -0
  185. package/types/lib/core/projectTooling.d.ts.map +1 -0
  186. package/types/lib/core/propertySanitizer.d.ts +26 -0
  187. package/types/lib/core/propertySanitizer.d.ts.map +1 -1
  188. package/types/lib/core/runState.d.ts +29 -0
  189. package/types/lib/core/runState.d.ts.map +1 -0
  190. package/types/lib/core/toml.d.ts +20 -0
  191. package/types/lib/core/toml.d.ts.map +1 -0
  192. package/types/lib/ecosystems/asarutils.d.ts.map +1 -1
  193. package/types/lib/ecosystems/bunutils.d.ts.map +1 -1
  194. package/types/lib/ecosystems/cargoCache.d.ts +12 -0
  195. package/types/lib/ecosystems/cargoCache.d.ts.map +1 -1
  196. package/types/lib/ecosystems/cmakeResolver.d.ts +5 -3
  197. package/types/lib/ecosystems/cmakeResolver.d.ts.map +1 -1
  198. package/types/lib/ecosystems/cppBuildContext.d.ts +55 -0
  199. package/types/lib/ecosystems/cppBuildContext.d.ts.map +1 -0
  200. package/types/lib/ecosystems/cppEvidence.d.ts +19 -3
  201. package/types/lib/ecosystems/cppEvidence.d.ts.map +1 -1
  202. package/types/lib/ecosystems/cppIncludeResolver.d.ts +92 -0
  203. package/types/lib/ecosystems/cppIncludeResolver.d.ts.map +1 -0
  204. package/types/lib/ecosystems/denoutils.d.ts +9 -3
  205. package/types/lib/ecosystems/denoutils.d.ts.map +1 -1
  206. package/types/lib/ecosystems/ecosystems.d.ts +62 -13
  207. package/types/lib/ecosystems/ecosystems.d.ts.map +1 -1
  208. package/types/lib/ecosystems/golem.d.ts +81 -1
  209. package/types/lib/ecosystems/golem.d.ts.map +1 -1
  210. package/types/lib/ecosystems/gradleutils.d.ts +59 -7
  211. package/types/lib/ecosystems/gradleutils.d.ts.map +1 -1
  212. package/types/lib/ecosystems/jsEvidence.d.ts.map +1 -1
  213. package/types/lib/ecosystems/kosi.d.ts.map +1 -1
  214. package/types/lib/ecosystems/npmutils.d.ts +15 -0
  215. package/types/lib/ecosystems/npmutils.d.ts.map +1 -1
  216. package/types/lib/ecosystems/parsers-dotnet.d.ts +155 -5
  217. package/types/lib/ecosystems/parsers-dotnet.d.ts.map +1 -1
  218. package/types/lib/ecosystems/parsers-elm.d.ts.map +1 -1
  219. package/types/lib/ecosystems/parsers-gleam.d.ts.map +1 -1
  220. package/types/lib/ecosystems/parsers-go.d.ts +119 -5
  221. package/types/lib/ecosystems/parsers-go.d.ts.map +1 -1
  222. package/types/lib/ecosystems/parsers-js.d.ts +6 -1
  223. package/types/lib/ecosystems/parsers-js.d.ts.map +1 -1
  224. package/types/lib/ecosystems/parsers-julia.d.ts.map +1 -1
  225. package/types/lib/ecosystems/parsers-jvm.d.ts +74 -3
  226. package/types/lib/ecosystems/parsers-jvm.d.ts.map +1 -1
  227. package/types/lib/ecosystems/parsers-misc.d.ts +21 -59
  228. package/types/lib/ecosystems/parsers-misc.d.ts.map +1 -1
  229. package/types/lib/ecosystems/parsers-python.d.ts +57 -6
  230. package/types/lib/ecosystems/parsers-python.d.ts.map +1 -1
  231. package/types/lib/ecosystems/parsers-terraform.d.ts +38 -21
  232. package/types/lib/ecosystems/parsers-terraform.d.ts.map +1 -1
  233. package/types/lib/ecosystems/pythonutils.d.ts +26 -1
  234. package/types/lib/ecosystems/pythonutils.d.ts.map +1 -1
  235. package/types/lib/ecosystems/remote/huggingface.d.ts.map +1 -1
  236. package/types/lib/ecosystems/rubyutils.d.ts +21 -1
  237. package/types/lib/ecosystems/rubyutils.d.ts.map +1 -1
  238. package/types/lib/ecosystems/rusi.d.ts.map +1 -1
  239. package/types/lib/ecosystems/sbtutils.d.ts +88 -2
  240. package/types/lib/ecosystems/sbtutils.d.ts.map +1 -1
  241. package/types/lib/ecosystems/scalacliutils.d.ts +56 -0
  242. package/types/lib/ecosystems/scalacliutils.d.ts.map +1 -0
  243. package/types/lib/ecosystems/scalasem.d.ts +311 -0
  244. package/types/lib/ecosystems/scalasem.d.ts.map +1 -0
  245. package/types/lib/ecosystems/terraformRegistry.d.ts +9 -0
  246. package/types/lib/ecosystems/terraformRegistry.d.ts.map +1 -0
  247. package/types/lib/ecosystems/utils.d.ts +2 -2
  248. package/types/lib/ecosystems/utils.d.ts.map +1 -1
  249. package/types/lib/ecosystems/vendoredCode.d.ts +32 -0
  250. package/types/lib/ecosystems/vendoredCode.d.ts.map +1 -0
  251. package/types/lib/evinser/evinser.d.ts +100 -8
  252. package/types/lib/evinser/evinser.d.ts.map +1 -1
  253. package/types/lib/evinser/swiftsem.d.ts +10 -0
  254. package/types/lib/evinser/swiftsem.d.ts.map +1 -1
  255. package/types/lib/helpers/bomSigner.d.ts +80 -4
  256. package/types/lib/helpers/bomSigner.d.ts.map +1 -1
  257. package/types/lib/inventory/agentSkillSpec.d.ts +13 -0
  258. package/types/lib/inventory/agentSkillSpec.d.ts.map +1 -0
  259. package/types/lib/inventory/aiCollector.d.ts.map +1 -1
  260. package/types/lib/inventory/analyzer.d.ts.map +1 -1
  261. package/types/lib/inventory/apkInstalledDb.d.ts +42 -0
  262. package/types/lib/inventory/apkInstalledDb.d.ts.map +1 -0
  263. package/types/lib/inventory/atomUtils.d.ts +96 -10
  264. package/types/lib/inventory/atomUtils.d.ts.map +1 -1
  265. package/types/lib/inventory/auditCategories.d.ts +3 -0
  266. package/types/lib/inventory/auditCategories.d.ts.map +1 -1
  267. package/types/lib/inventory/buildToolRateLimit.d.ts +38 -0
  268. package/types/lib/inventory/buildToolRateLimit.d.ts.map +1 -0
  269. package/types/lib/inventory/cacheCommands.d.ts +2 -1
  270. package/types/lib/inventory/cacheCommands.d.ts.map +1 -1
  271. package/types/lib/inventory/cacheDir.d.ts +12 -4
  272. package/types/lib/inventory/cacheDir.d.ts.map +1 -1
  273. package/types/lib/inventory/certificates.d.ts +205 -0
  274. package/types/lib/inventory/certificates.d.ts.map +1 -0
  275. package/types/lib/inventory/cmakeBuildDirs.d.ts +58 -0
  276. package/types/lib/inventory/cmakeBuildDirs.d.ts.map +1 -0
  277. package/types/lib/inventory/communityAiConfigParser.d.ts.map +1 -1
  278. package/types/lib/inventory/deps.d.ts +61 -2
  279. package/types/lib/inventory/deps.d.ts.map +1 -1
  280. package/types/lib/inventory/display.d.ts +18 -0
  281. package/types/lib/inventory/display.d.ts.map +1 -1
  282. package/types/lib/inventory/dosai.d.ts +202 -14
  283. package/types/lib/inventory/dosai.d.ts.map +1 -1
  284. package/types/lib/inventory/dosaiParsers.d.ts +53 -7
  285. package/types/lib/inventory/dosaiParsers.d.ts.map +1 -1
  286. package/types/lib/inventory/dynamic.d.ts +16 -1
  287. package/types/lib/inventory/dynamic.d.ts.map +1 -1
  288. package/types/lib/inventory/envcontext.d.ts +40 -2
  289. package/types/lib/inventory/envcontext.d.ts.map +1 -1
  290. package/types/lib/inventory/evidenceUtils.d.ts +48 -14
  291. package/types/lib/inventory/evidenceUtils.d.ts.map +1 -1
  292. package/types/lib/inventory/fetchBatch.d.ts +83 -14
  293. package/types/lib/inventory/fetchBatch.d.ts.map +1 -1
  294. package/types/lib/inventory/fetchDiskCache.d.ts +169 -0
  295. package/types/lib/inventory/fetchDiskCache.d.ts.map +1 -0
  296. package/types/lib/inventory/forgeEnricher.d.ts.map +1 -1
  297. package/types/lib/inventory/formulationParsers.d.ts.map +1 -1
  298. package/types/lib/inventory/goBuildInfo.d.ts +10 -0
  299. package/types/lib/inventory/goBuildInfo.d.ts.map +1 -0
  300. package/types/lib/inventory/hbom.d.ts.map +1 -1
  301. package/types/lib/inventory/hbomAnalysis.d.ts +10 -0
  302. package/types/lib/inventory/hbomAnalysis.d.ts.map +1 -1
  303. package/types/lib/inventory/hostTopology.d.ts.map +1 -1
  304. package/types/lib/inventory/jvmLocalRepos.d.ts +178 -0
  305. package/types/lib/inventory/jvmLocalRepos.d.ts.map +1 -0
  306. package/types/lib/inventory/mcpConfigParser.d.ts.map +1 -1
  307. package/types/lib/inventory/osPackagePurl.d.ts +99 -0
  308. package/types/lib/inventory/osPackagePurl.d.ts.map +1 -0
  309. package/types/lib/inventory/osPackageResolver.d.ts +6 -2
  310. package/types/lib/inventory/osPackageResolver.d.ts.map +1 -1
  311. package/types/lib/inventory/osinfo.d.ts +31 -6
  312. package/types/lib/inventory/osinfo.d.ts.map +1 -1
  313. package/types/lib/inventory/osqueryTransform.d.ts +51 -0
  314. package/types/lib/inventory/osqueryTransform.d.ts.map +1 -1
  315. package/types/lib/inventory/parentSelection.d.ts +34 -0
  316. package/types/lib/inventory/parentSelection.d.ts.map +1 -0
  317. package/types/lib/inventory/phpBuildInfo.d.ts +142 -0
  318. package/types/lib/inventory/phpBuildInfo.d.ts.map +1 -0
  319. package/types/lib/inventory/phpHostProbe.d.ts +35 -0
  320. package/types/lib/inventory/phpHostProbe.d.ts.map +1 -0
  321. package/types/lib/inventory/rootfsCerts.d.ts +27 -0
  322. package/types/lib/inventory/rootfsCerts.d.ts.map +1 -0
  323. package/types/lib/inventory/rustFormulationParser.d.ts.map +1 -1
  324. package/types/lib/inventory/scalaCoords.d.ts +80 -0
  325. package/types/lib/inventory/scalaCoords.d.ts.map +1 -0
  326. package/types/lib/inventory/source.d.ts +28 -0
  327. package/types/lib/inventory/source.d.ts.map +1 -1
  328. package/types/lib/inventory/spdx.d.ts +24 -0
  329. package/types/lib/inventory/spdx.d.ts.map +1 -1
  330. package/types/lib/inventory/traceRunner.d.ts +16 -1
  331. package/types/lib/inventory/traceRunner.d.ts.map +1 -1
  332. package/types/lib/inventory/tracedCrypto.d.ts +64 -0
  333. package/types/lib/inventory/tracedCrypto.d.ts.map +1 -0
  334. package/types/lib/managers/binary.d.ts +10 -0
  335. package/types/lib/managers/binary.d.ts.map +1 -1
  336. package/types/lib/managers/docker.d.ts +12 -0
  337. package/types/lib/managers/docker.d.ts.map +1 -1
  338. package/types/lib/managers/oci.d.ts +3 -1
  339. package/types/lib/managers/oci.d.ts.map +1 -1
  340. package/types/lib/parsers/cmakeCache.d.ts +16 -0
  341. package/types/lib/parsers/cmakeCache.d.ts.map +1 -1
  342. package/types/lib/parsers/cmakeLists.d.ts +2 -1
  343. package/types/lib/parsers/cmakeLists.d.ts.map +1 -1
  344. package/types/lib/parsers/cmakePresets.d.ts +78 -0
  345. package/types/lib/parsers/cmakePresets.d.ts.map +1 -0
  346. package/types/lib/parsers/compileCommands.d.ts +115 -0
  347. package/types/lib/parsers/compileCommands.d.ts.map +1 -0
  348. package/types/lib/parsers/email.d.ts +19 -0
  349. package/types/lib/parsers/email.d.ts.map +1 -0
  350. package/types/lib/parsers/largeJson.d.ts +13 -0
  351. package/types/lib/parsers/largeJson.d.ts.map +1 -1
  352. package/types/lib/parsers/strictJson.d.ts +46 -0
  353. package/types/lib/parsers/strictJson.d.ts.map +1 -0
  354. package/types/lib/parsers/terraformConfig.d.ts +70 -0
  355. package/types/lib/parsers/terraformConfig.d.ts.map +1 -0
  356. package/types/lib/parsers/terraformSource.d.ts +66 -0
  357. package/types/lib/parsers/terraformSource.d.ts.map +1 -0
  358. package/types/lib/server/server.d.ts +8 -0
  359. package/types/lib/server/server.d.ts.map +1 -1
  360. package/types/lib/stages/postgen/annotator.d.ts.map +1 -1
  361. package/types/lib/stages/postgen/introspection/reflect.d.ts.map +1 -1
  362. package/types/lib/stages/postgen/postgen.d.ts.map +1 -1
  363. package/types/lib/stages/postgen/ruleEngine.d.ts +7 -4
  364. package/types/lib/stages/postgen/ruleEngine.d.ts.map +1 -1
  365. package/types/lib/stages/postgen/specVersionCompat.d.ts.map +1 -1
  366. package/types/lib/stages/pregen/pregen.d.ts +14 -1
  367. package/types/lib/stages/pregen/pregen.d.ts.map +1 -1
  368. package/types/lib/validator/bomValidator.d.ts.map +1 -1
  369. package/types/lib/validator/index.d.ts +8 -0
  370. package/types/lib/validator/index.d.ts.map +1 -1
  371. package/types/lib/validator/reporters/json.d.ts.map +1 -1
  372. package/lib/third-party/arborist/snapshots/calc-dep-flags.test.cjs +0 -462
@@ -111,6 +111,30 @@
111
111
  },
112
112
  "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES?id=java"
113
113
  },
114
+ "jvm.maven.tooling-disabled": {
115
+ "ecosystem": "java",
116
+ "kind": "fallback.engaged",
117
+ "impact": "transitive-deps",
118
+ "title": "Maven was skipped because dependency installation is disabled; only the direct dependencies declared in pom.xml files were captured",
119
+ "targetTier": "resolved",
120
+ "actions": [
121
+ {
122
+ "kind": "config",
123
+ "command": "Only for a project you trust: pass --install-deps so cdxgen can run Maven. Secure mode keeps installs off unless this flag is given. Outside secure mode, --introspect also runs Maven without installing packages."
124
+ },
125
+ {
126
+ "kind": "rerun"
127
+ }
128
+ ],
129
+ "verify": {
130
+ "rules": [],
131
+ "expectTier": "resolved",
132
+ "eventsCleared": [
133
+ "jvm.maven.tooling-disabled"
134
+ ]
135
+ },
136
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES?id=java"
137
+ },
114
138
  "jvm.gradle.unresolved-config": {
115
139
  "ecosystem": "java",
116
140
  "kind": "fallback.engaged",
@@ -263,6 +287,46 @@
263
287
  },
264
288
  "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES?id=java"
265
289
  },
290
+ "build.rate-limited": {
291
+ "ecosystem": "generic",
292
+ "kind": "evidence.degraded",
293
+ "impact": "transitive-deps",
294
+ "title": "A build tool's repository rate limited the machine, so its dependency tree did not resolve",
295
+ "targetTier": null,
296
+ "actions": [
297
+ {
298
+ "kind": "config",
299
+ "command": "Maven: declare a <mirror> in the Maven settings.xml, or set MVNW_REPOURL for the Maven wrapper"
300
+ },
301
+ {
302
+ "kind": "config",
303
+ "command": "Gradle: declare the mirror repository in a Gradle init script"
304
+ },
305
+ {
306
+ "kind": "config",
307
+ "command": "sbt: list the mirror in ~/.sbt/repositories and pass -Dsbt.override.build.repos=true in SBT_OPTS or .sbtopts"
308
+ },
309
+ {
310
+ "kind": "config",
311
+ "command": "Mill and scala-cli: set central.from and central.to in Coursier's mirror.properties, separating several central.from URLs with semicolons"
312
+ },
313
+ {
314
+ "kind": "env",
315
+ "command": "Point MAVEN_CENTRAL_URL at a mirror for cdxgen's own lookups"
316
+ },
317
+ {
318
+ "kind": "rerun"
319
+ }
320
+ ],
321
+ "verify": {
322
+ "rules": [],
323
+ "expectTier": null,
324
+ "eventsCleared": [
325
+ "build.rate-limited"
326
+ ]
327
+ },
328
+ "docs": "https://cyclonedx.github.io/cdxgen/#/ADVANCED"
329
+ },
266
330
  "js.no-lockfile": {
267
331
  "ecosystem": "npm",
268
332
  "kind": "evidence.degraded",
@@ -575,6 +639,30 @@
575
639
  },
576
640
  "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
577
641
  },
642
+ "python.poetry-export.tooling-disabled": {
643
+ "ecosystem": "python",
644
+ "kind": "fallback.engaged",
645
+ "impact": "transitive-deps",
646
+ "title": "poetry export and pdm export were skipped because dependency installation is disabled; only the packages in the lock file were captured",
647
+ "targetTier": null,
648
+ "actions": [
649
+ {
650
+ "kind": "config",
651
+ "command": "Only for a project you trust: pass --install-deps so cdxgen can run Poetry or PDM. Secure mode keeps installs off unless this flag is given. Outside secure mode, --introspect also runs Poetry or PDM without installing packages."
652
+ },
653
+ {
654
+ "kind": "rerun"
655
+ }
656
+ ],
657
+ "verify": {
658
+ "rules": [],
659
+ "expectTier": null,
660
+ "eventsCleared": [
661
+ "python.poetry-export.tooling-disabled"
662
+ ]
663
+ },
664
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
665
+ },
578
666
  "clojure.lein.missing": {
579
667
  "ecosystem": "clojure",
580
668
  "kind": "fallback.engaged",
@@ -632,6 +720,30 @@
632
720
  },
633
721
  "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
634
722
  },
723
+ "clojure.lein.tooling-disabled": {
724
+ "ecosystem": "clojure",
725
+ "kind": "fallback.engaged",
726
+ "impact": "transitive-deps",
727
+ "title": "Leiningen was skipped because dependency installation is disabled; only the dependencies declared in project.clj were captured",
728
+ "targetTier": null,
729
+ "actions": [
730
+ {
731
+ "kind": "config",
732
+ "command": "Only for a project you trust: pass --install-deps so cdxgen can run Leiningen. Secure mode keeps installs off unless this flag is given. Outside secure mode, --introspect also runs Leiningen without installing packages."
733
+ },
734
+ {
735
+ "kind": "rerun"
736
+ }
737
+ ],
738
+ "verify": {
739
+ "rules": [],
740
+ "expectTier": null,
741
+ "eventsCleared": [
742
+ "clojure.lein.tooling-disabled"
743
+ ]
744
+ },
745
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
746
+ },
635
747
  "swift.toolchain.missing": {
636
748
  "ecosystem": "swift",
637
749
  "kind": "fallback.engaged",
@@ -678,11 +790,35 @@
678
790
  },
679
791
  "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
680
792
  },
793
+ "swift.tooling-disabled": {
794
+ "ecosystem": "swift",
795
+ "kind": "fallback.engaged",
796
+ "impact": "transitive-deps",
797
+ "title": "SwiftPM was skipped because dependency installation is disabled; only the packages in Package.resolved were captured",
798
+ "targetTier": null,
799
+ "actions": [
800
+ {
801
+ "kind": "config",
802
+ "command": "Only for a project you trust: pass --install-deps so cdxgen can run SwiftPM. Secure mode keeps installs off unless this flag is given. Outside secure mode, --introspect also runs SwiftPM without installing packages."
803
+ },
804
+ {
805
+ "kind": "rerun"
806
+ }
807
+ ],
808
+ "verify": {
809
+ "rules": [],
810
+ "expectTier": null,
811
+ "eventsCleared": [
812
+ "swift.tooling-disabled"
813
+ ]
814
+ },
815
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
816
+ },
681
817
  "dotnet.sdk.missing": {
682
818
  "ecosystem": "csharp",
683
819
  "kind": "evidence.degraded",
684
820
  "impact": "components",
685
- "title": ".NET SDK is not installed, so dotnet slices are degraded",
821
+ "title": "The .NET runtime dosai needs is not installed, so dotnet slices are degraded",
686
822
  "targetTier": "resolved",
687
823
  "actions": [
688
824
  {
@@ -709,6 +845,30 @@
709
845
  },
710
846
  "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
711
847
  },
848
+ "dotnet.msbuild.tooling-disabled": {
849
+ "ecosystem": "csharp",
850
+ "kind": "fallback.engaged",
851
+ "impact": "versions",
852
+ "title": "dotnet msbuild was skipped because dependency installation is disabled; package versions set by MSBuild properties that no project or props file defines are empty",
853
+ "targetTier": "manifest",
854
+ "actions": [
855
+ {
856
+ "kind": "config",
857
+ "command": "Only for a project you trust: pass --install-deps so cdxgen can run MSBuild. Secure mode keeps installs off unless this flag is given. Outside secure mode, --introspect also runs MSBuild without installing packages."
858
+ },
859
+ {
860
+ "kind": "rerun"
861
+ }
862
+ ],
863
+ "verify": {
864
+ "rules": [],
865
+ "expectTier": "manifest",
866
+ "eventsCleared": [
867
+ "dotnet.msbuild.tooling-disabled"
868
+ ]
869
+ },
870
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
871
+ },
712
872
  "dosai.semantics.persist-failed": {
713
873
  "ecosystem": "csharp",
714
874
  "kind": "evidence.degraded",
@@ -733,6 +893,48 @@
733
893
  },
734
894
  "docs": "https://cyclonedx.github.io/cdxgen/#/EVINSE"
735
895
  },
896
+ "dosai.semantics.trimmed-report": {
897
+ "ecosystem": "csharp",
898
+ "kind": "evidence.degraded",
899
+ "impact": "none",
900
+ "title": "The persisted dosai report is partial: its methods half was written with --sections",
901
+ "targetTier": "resolved",
902
+ "actions": [
903
+ {
904
+ "kind": "config",
905
+ "detail": "Run dosai methods without --sections, or run cdxgen with --evidence, so the persisted report holds every section."
906
+ }
907
+ ],
908
+ "verify": {
909
+ "rules": [],
910
+ "expectTier": "resolved",
911
+ "eventsCleared": [
912
+ "dosai.semantics.trimmed-report"
913
+ ]
914
+ },
915
+ "docs": "https://cyclonedx.github.io/cdxgen/#/EVINSE"
916
+ },
917
+ "dosai.usages.trimmed-report": {
918
+ "ecosystem": "csharp",
919
+ "kind": "evidence.degraded",
920
+ "impact": "components",
921
+ "title": "The supplied dosai usages slice was written without sections cdxgen reads",
922
+ "targetTier": "resolved",
923
+ "actions": [
924
+ {
925
+ "kind": "config",
926
+ "detail": "Run dosai methods without --sections, or with every section cdxgen reads, for the report passed with --usages-slices-file."
927
+ }
928
+ ],
929
+ "verify": {
930
+ "rules": [],
931
+ "expectTier": "resolved",
932
+ "eventsCleared": [
933
+ "dosai.usages.trimmed-report"
934
+ ]
935
+ },
936
+ "docs": "https://cyclonedx.github.io/cdxgen/#/EVINSE"
937
+ },
736
938
  "cocoa.pods.missing": {
737
939
  "ecosystem": "cocoa",
738
940
  "kind": "fallback.engaged",
@@ -756,6 +958,54 @@
756
958
  },
757
959
  "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
758
960
  },
961
+ "cocoa.podfile-json.tooling-disabled": {
962
+ "ecosystem": "cocoa",
963
+ "kind": "fallback.engaged",
964
+ "impact": "components",
965
+ "title": "pod ipc podfile-json was skipped because dependency installation is disabled; every pod from Podfile.lock is included without per-target filtering",
966
+ "targetTier": null,
967
+ "actions": [
968
+ {
969
+ "kind": "config",
970
+ "command": "Only for a project you trust: pass --install-deps so cdxgen can run CocoaPods. Secure mode keeps installs off unless this flag is given. Outside secure mode, --introspect also runs CocoaPods without installing packages."
971
+ },
972
+ {
973
+ "kind": "rerun"
974
+ }
975
+ ],
976
+ "verify": {
977
+ "rules": [],
978
+ "expectTier": null,
979
+ "eventsCleared": [
980
+ "cocoa.podfile-json.tooling-disabled"
981
+ ]
982
+ },
983
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
984
+ },
985
+ "cocoa.podspec.tooling-disabled": {
986
+ "ecosystem": "cocoa",
987
+ "kind": "fallback.engaged",
988
+ "impact": "licenses",
989
+ "title": "Ruby podspecs were not evaluated because dependency installation is disabled; their pods lack license and author details",
990
+ "targetTier": null,
991
+ "actions": [
992
+ {
993
+ "kind": "config",
994
+ "command": "Only for a project you trust: pass --install-deps so cdxgen can run CocoaPods. Secure mode keeps installs off unless this flag is given. Outside secure mode, --introspect also runs CocoaPods without installing packages."
995
+ },
996
+ {
997
+ "kind": "rerun"
998
+ }
999
+ ],
1000
+ "verify": {
1001
+ "rules": [],
1002
+ "expectTier": null,
1003
+ "eventsCleared": [
1004
+ "cocoa.podspec.tooling-disabled"
1005
+ ]
1006
+ },
1007
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
1008
+ },
759
1009
  "ruby.build-deps.missing": {
760
1010
  "ecosystem": "ruby",
761
1011
  "kind": "evidence.degraded",
@@ -1008,6 +1258,54 @@
1008
1258
  },
1009
1259
  "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES?id=php"
1010
1260
  },
1261
+ "php.host-probe.package-db-unreadable": {
1262
+ "ecosystem": "php",
1263
+ "kind": "evidence.degraded",
1264
+ "impact": "components",
1265
+ "title": "A package database could not be read in full, so the PHP no package owns on this host was not identified",
1266
+ "targetTier": null,
1267
+ "actions": [
1268
+ {
1269
+ "kind": "config",
1270
+ "command": "Run cdxgen as a user that can read the package databases (for example with sudo), so PHP files can be matched to the packages that own them"
1271
+ },
1272
+ {
1273
+ "kind": "rerun"
1274
+ }
1275
+ ],
1276
+ "verify": {
1277
+ "rules": [],
1278
+ "expectTier": null,
1279
+ "eventsCleared": [
1280
+ "php.host-probe.package-db-unreadable"
1281
+ ]
1282
+ },
1283
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES?id=php"
1284
+ },
1285
+ "php.composer.platform-unattributed": {
1286
+ "ecosystem": "php",
1287
+ "kind": "evidence.degraded",
1288
+ "impact": "versions",
1289
+ "title": "A composer.lock below the scanned directory sits beside a composer.json without a name, so its PHP and extension requirements were not recorded",
1290
+ "targetTier": null,
1291
+ "actions": [
1292
+ {
1293
+ "kind": "config",
1294
+ "command": "Give the project a \"name\" in its composer.json, or scan the project directory itself"
1295
+ },
1296
+ {
1297
+ "kind": "rerun"
1298
+ }
1299
+ ],
1300
+ "verify": {
1301
+ "rules": [],
1302
+ "expectTier": null,
1303
+ "eventsCleared": [
1304
+ "php.composer.platform-unattributed"
1305
+ ]
1306
+ },
1307
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES?id=php"
1308
+ },
1011
1309
  "dart.pub-get-needed": {
1012
1310
  "ecosystem": "dart",
1013
1311
  "kind": "evidence.degraded",
@@ -1103,6 +1401,30 @@
1103
1401
  },
1104
1402
  "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
1105
1403
  },
1404
+ "os.apk-installed-db.unreadable": {
1405
+ "ecosystem": "generic",
1406
+ "kind": "evidence.degraded",
1407
+ "impact": "components",
1408
+ "title": "The apk installed database could not be read in full, so the packages of this host are missing from the OBOM",
1409
+ "targetTier": null,
1410
+ "actions": [
1411
+ {
1412
+ "kind": "config",
1413
+ "command": "Run cdxgen as a user that can read the apk installed database (for example as root), so the packages it lists are inventoried"
1414
+ },
1415
+ {
1416
+ "kind": "rerun"
1417
+ }
1418
+ ],
1419
+ "verify": {
1420
+ "rules": [],
1421
+ "expectTier": null,
1422
+ "eventsCleared": [
1423
+ "os.apk-installed-db.unreadable"
1424
+ ]
1425
+ },
1426
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
1427
+ },
1106
1428
  "policy.secure-mode": {
1107
1429
  "ecosystem": "generic",
1108
1430
  "kind": "evidence.degraded",
@@ -1187,5 +1509,26 @@
1187
1509
  ]
1188
1510
  },
1189
1511
  "docs": "https://cyclonedx.github.io/cdxgen/#/ENV"
1512
+ },
1513
+ "policy.rate-limited": {
1514
+ "ecosystem": "generic",
1515
+ "kind": "evidence.degraded",
1516
+ "impact": "licenses",
1517
+ "title": "A registry rate limited this run, so its metadata came from local caches only",
1518
+ "targetTier": null,
1519
+ "actions": [
1520
+ {
1521
+ "kind": "env",
1522
+ "command": "Point MAVEN_CENTRAL_URL at a mirror or repository manager, or wait for the block to expire, then re-run"
1523
+ }
1524
+ ],
1525
+ "verify": {
1526
+ "rules": [],
1527
+ "expectTier": null,
1528
+ "eventsCleared": [
1529
+ "policy.rate-limited"
1530
+ ]
1531
+ },
1532
+ "docs": "https://cyclonedx.github.io/cdxgen/#/ENV"
1190
1533
  }
1191
1534
  }
@@ -141,21 +141,22 @@
141
141
  }
142
142
 
143
143
  - id: CBC-001
144
- name: "Expired or Expiring Certificate"
145
- description: "Certificates that have expired or are close to their expiration date will cause service disruptions or trust validation failures."
144
+ name: "Expired Certificate"
145
+ description: "A certificate whose validity ended before the audit ran will fail trust validation and cause service disruptions."
146
146
  severity: high
147
147
  category: cbom-compliance
148
148
  dry-run-support: full
149
149
  condition: |
150
150
  components[
151
151
  cryptoProperties.assetType = 'certificate'
152
- and $hasProp($, 'cdx:cert:isExpired', 'true')
152
+ and $certEndMillis(cryptoProperties.certificateProperties.notValidAfter) != null
153
+ and $certEndMillis(cryptoProperties.certificateProperties.notValidAfter) < $toMillis($now())
153
154
  ]
154
155
  location: |
155
156
  {
156
157
  "bomRef": $firstNonEmpty($."bom-ref", bom.serialNumber)
157
158
  }
158
- message: "Certificate for Subject '{{ cryptoProperties.certificateProperties.subjectName }}' has expired or is invalid"
159
+ message: "Certificate for Subject '{{ cryptoProperties.certificateProperties.subjectName }}' expired on {{ cryptoProperties.certificateProperties.notValidAfter }}"
159
160
  mitigation: "Renew the certificate and update the deployment trust stores."
160
161
  evidence: |
161
162
  {
@@ -163,3 +164,233 @@
163
164
  "issuer": cryptoProperties.certificateProperties.issuerName,
164
165
  "notValidAfter": cryptoProperties.certificateProperties.notValidAfter
165
166
  }
167
+
168
+ - id: CBC-002
169
+ name: "Certificate expiring within 30 days"
170
+ description: "A certificate that is still valid but expires within 30 days will soon cause trust validation failures."
171
+ severity: medium
172
+ category: cbom-compliance
173
+ dry-run-support: full
174
+ condition: |
175
+ components[
176
+ cryptoProperties.assetType = 'certificate'
177
+ and $certEndMillis(cryptoProperties.certificateProperties.notValidAfter) != null
178
+ and $certEndMillis(cryptoProperties.certificateProperties.notValidAfter) >= $toMillis($now())
179
+ and $certEndMillis(cryptoProperties.certificateProperties.notValidAfter) < ($toMillis($now()) + 2592000000)
180
+ ]
181
+ location: |
182
+ {
183
+ "bomRef": $firstNonEmpty($."bom-ref", bom.serialNumber)
184
+ }
185
+ message: "Certificate for Subject '{{ cryptoProperties.certificateProperties.subjectName }}' expires on {{ cryptoProperties.certificateProperties.notValidAfter }}"
186
+ mitigation: "Plan the certificate renewal and update the deployment trust stores before it expires."
187
+ evidence: |
188
+ {
189
+ "subject": cryptoProperties.certificateProperties.subjectName,
190
+ "issuer": cryptoProperties.certificateProperties.issuerName,
191
+ "notValidAfter": cryptoProperties.certificateProperties.notValidAfter
192
+ }
193
+
194
+ # The eight SPKI SHA-256 hashes Go 1.27.3 and 1.26.10 hard-code into
195
+ # crypto/x509 (CVE-2026-111943).
196
+ # https://github.com/golang/go/commit/90617fb7ceb59cf08bee7826bb51b8c8fb8c11de
197
+ - id: CBC-003
198
+ name: "Certificate or key distrusted by Go (CVE-2026-111943)"
199
+ description: "Go 1.27.3 and 1.26.10 reject every chain containing one of eight intermediate CA keys, matched by the SHA-256 of the certificate's SubjectPublicKeyInfo. The hash matches re-issued and cross-signed copies of the same key as well."
200
+ severity: high
201
+ category: cbom-security
202
+ dry-run-support: full
203
+ standards:
204
+ nist-800-53:
205
+ - "SC-13 Cryptographic Protection"
206
+ condition: |
207
+ (
208
+ $deny := [
209
+ "ebed6475c2c2d80fcb199f3fe8dd6e6b3ce60b77eb15d4e42c3dec0c6f5b5105",
210
+ "49dd353dc2b919a3770645117d0e60c16115e7d1bc259eefe734b00ea434fe5f",
211
+ "e0254c7fcdc265e2f0f8a428dabb75ab4ae039b4872d62f5ee57f0877d5a8a41",
212
+ "5c0660a2b164910d8ff589c18e14552e9e0ec237dcefe2cb736d41a4811f81a0",
213
+ "43bffa19d6ef651451f6841e019931e96f6f2eaeff28ab4b6f1ce4576de2717b",
214
+ "63ecefee431d49523bc1136c4e72d0206a477086caf606cd5cf025686c109cf8",
215
+ "ec4ffa1ad0ac88081314b7aaffef6a91f97cd57291bb5ba686c5415f5eb4f6b6",
216
+ "92c063d67e8f14db71d288e11266ffdaf69cbf115f7bab14f3bc2f68d25e0e30"
217
+ ];
218
+ components[
219
+ (
220
+ cryptoProperties.assetType = 'certificate'
221
+ or cryptoProperties.assetType = 'related-crypto-material'
222
+ )
223
+ and $exists(properties[name = 'cdx:crypto:spkiSha256'].value[$lowercase($) in $deny])
224
+ ]
225
+ )
226
+ location: |
227
+ {
228
+ "bomRef": $firstNonEmpty($."bom-ref", bom.serialNumber)
229
+ }
230
+ message: "Certificate or key '{{ name }}' carries a public key Go 1.27.3/1.26.10 distrust (CVE-2026-111943)"
231
+ mitigation: "Replace the certificate chain and remove the key from every trust store, bundle and pin. https://github.com/golang/go/commit/90617fb7ceb59cf08bee7826bb51b8c8fb8c11de"
232
+ evidence: |
233
+ {
234
+ "spkiSha256": $prop($, 'cdx:crypto:spkiSha256'),
235
+ "subject": cryptoProperties.certificateProperties.subjectName,
236
+ "locations": $count(evidence.occurrences)
237
+ }
238
+
239
+ - id: CBC-004
240
+ name: "Certificate issued under a Go-distrusted key (CVE-2026-111943)"
241
+ description: "The certificate was issued by one of the eight intermediate CA keys Go 1.27.3 and 1.26.10 distrust, so Go clients rebuilt with those releases will refuse the chain even while the operating system still accepts it."
242
+ severity: high
243
+ category: cbom-security
244
+ dry-run-support: full
245
+ standards:
246
+ nist-800-53:
247
+ - "SC-13 Cryptographic Protection"
248
+ condition: |
249
+ (
250
+ $deny := [
251
+ "ebed6475c2c2d80fcb199f3fe8dd6e6b3ce60b77eb15d4e42c3dec0c6f5b5105",
252
+ "49dd353dc2b919a3770645117d0e60c16115e7d1bc259eefe734b00ea434fe5f",
253
+ "e0254c7fcdc265e2f0f8a428dabb75ab4ae039b4872d62f5ee57f0877d5a8a41",
254
+ "5c0660a2b164910d8ff589c18e14552e9e0ec237dcefe2cb736d41a4811f81a0",
255
+ "43bffa19d6ef651451f6841e019931e96f6f2eaeff28ab4b6f1ce4576de2717b",
256
+ "63ecefee431d49523bc1136c4e72d0206a477086caf606cd5cf025686c109cf8",
257
+ "ec4ffa1ad0ac88081314b7aaffef6a91f97cd57291bb5ba686c5415f5eb4f6b6",
258
+ "92c063d67e8f14db71d288e11266ffdaf69cbf115f7bab14f3bc2f68d25e0e30"
259
+ ];
260
+ $badSkis := components[
261
+ cryptoProperties.assetType = 'certificate'
262
+ and $exists(properties[name = 'cdx:crypto:spkiSha256'].value[$lowercase($) in $deny])
263
+ ].properties[name = 'cdx:crypto:subjectKeyId'].value[$ != null].$lowercase($);
264
+ components[
265
+ cryptoProperties.assetType = 'certificate'
266
+ and $not($exists(properties[name = 'cdx:crypto:spkiSha256'].value[$lowercase($) in $deny]))
267
+ and (
268
+ $count(properties[name = 'cdx:crypto:issuerSpkiSha256' or name = 'cdx:crypto:unverifiedIssuerSpkiSha256'].value[$lowercase($) in $deny]) > 0
269
+ or (
270
+ $prop($, 'cdx:crypto:authorityKeyId') != null
271
+ and $lowercase($nullSafeProp($, 'cdx:crypto:authorityKeyId')) in $badSkis
272
+ )
273
+ )
274
+ ]
275
+ )
276
+ location: |
277
+ {
278
+ "bomRef": $firstNonEmpty($."bom-ref", bom.serialNumber)
279
+ }
280
+ message: "Certificate '{{ name }}' was issued under a public key Go 1.27.3/1.26.10 distrust (CVE-2026-111943)"
281
+ mitigation: "Re-issue the certificate under a trusted CA and update the server chain. https://github.com/golang/go/commit/90617fb7ceb59cf08bee7826bb51b8c8fb8c11de"
282
+ evidence: |
283
+ {
284
+ "authorityKeyId": $prop($, 'cdx:crypto:authorityKeyId'),
285
+ "issuerSpkiSha256": properties[name = 'cdx:crypto:issuerSpkiSha256'].value,
286
+ "subject": cryptoProperties.certificateProperties.subjectName
287
+ }
288
+
289
+ # Post-quantum OIDs (ML-DSA RFC 9881, SLH-DSA RFC 9909, ML-KEM RFC 9935) and
290
+ # the classical-only cutoff. NIST IR 8547 (initial public draft) proposes
291
+ # classical algorithms be disallowed after 2035.
292
+ - id: CBC-005
293
+ name: "Classical-only CA certificate valid past the post-quantum transition"
294
+ description: "A CA certificate whose key and signature algorithms are both classical stays valid beyond 2035-01-01, past the date NIST IR 8547 (initial public draft) proposes to disallow classical algorithms."
295
+ severity: low
296
+ category: cbom-security
297
+ dry-run-support: full
298
+ condition: |
299
+ (
300
+ $pq := [
301
+ "2.16.840.1.101.3.4.3.17", "2.16.840.1.101.3.4.3.18", "2.16.840.1.101.3.4.3.19",
302
+ "2.16.840.1.101.3.4.3.20", "2.16.840.1.101.3.4.3.21", "2.16.840.1.101.3.4.3.22",
303
+ "2.16.840.1.101.3.4.3.23", "2.16.840.1.101.3.4.3.24", "2.16.840.1.101.3.4.3.25",
304
+ "2.16.840.1.101.3.4.3.26", "2.16.840.1.101.3.4.3.27", "2.16.840.1.101.3.4.3.28",
305
+ "2.16.840.1.101.3.4.3.29", "2.16.840.1.101.3.4.3.30", "2.16.840.1.101.3.4.3.31",
306
+ "2.16.840.1.101.3.4.4.1", "2.16.840.1.101.3.4.4.2", "2.16.840.1.101.3.4.4.3"
307
+ ];
308
+ $cutoff := '2035-01-01T00:00:00Z';
309
+ components[
310
+ cryptoProperties.assetType = 'certificate'
311
+ and $prop($, 'cdx:crypto:certRole') in ['root', 'intermediate']
312
+ and $prop($, 'cdx:crypto:publicKeyAlgorithmOid') != null
313
+ and $prop($, 'cdx:crypto:signatureAlgorithmOid') != null
314
+ and $not($prop($, 'cdx:crypto:publicKeyAlgorithmOid') in $pq)
315
+ and $not($prop($, 'cdx:crypto:signatureAlgorithmOid') in $pq)
316
+ and $certEndMillis(cryptoProperties.certificateProperties.notValidAfter) != null
317
+ and $certEndMillis(cryptoProperties.certificateProperties.notValidAfter) > $toMillis($cutoff)
318
+ ]
319
+ )
320
+ location: |
321
+ {
322
+ "bomRef": $firstNonEmpty($."bom-ref", bom.serialNumber)
323
+ }
324
+ message: "CA certificate '{{ name }}' uses only classical algorithms but is valid past the 2035-01-01 cutoff"
325
+ mitigation: "Plan a migration to post-quantum algorithms before the classical-only validity window ends."
326
+ evidence: |
327
+ {
328
+ "keyAlgorithmOid": $prop($, 'cdx:crypto:publicKeyAlgorithmOid'),
329
+ "signatureAlgorithmOid": $prop($, 'cdx:crypto:signatureAlgorithmOid'),
330
+ "notValidAfter": cryptoProperties.certificateProperties.notValidAfter
331
+ }
332
+
333
+ - id: CBC-006
334
+ name: "Post-quantum key certified with a classical signature"
335
+ description: "The certificate's public key is post-quantum but its signature algorithm is classical, so the authentication of that key is only as strong as the classical signature."
336
+ severity: medium
337
+ category: cbom-security
338
+ dry-run-support: full
339
+ condition: |
340
+ (
341
+ $pq := [
342
+ "2.16.840.1.101.3.4.3.17", "2.16.840.1.101.3.4.3.18", "2.16.840.1.101.3.4.3.19",
343
+ "2.16.840.1.101.3.4.3.20", "2.16.840.1.101.3.4.3.21", "2.16.840.1.101.3.4.3.22",
344
+ "2.16.840.1.101.3.4.3.23", "2.16.840.1.101.3.4.3.24", "2.16.840.1.101.3.4.3.25",
345
+ "2.16.840.1.101.3.4.3.26", "2.16.840.1.101.3.4.3.27", "2.16.840.1.101.3.4.3.28",
346
+ "2.16.840.1.101.3.4.3.29", "2.16.840.1.101.3.4.3.30", "2.16.840.1.101.3.4.3.31",
347
+ "2.16.840.1.101.3.4.4.1", "2.16.840.1.101.3.4.4.2", "2.16.840.1.101.3.4.4.3"
348
+ ];
349
+ components[
350
+ cryptoProperties.assetType = 'certificate'
351
+ and $prop($, 'cdx:crypto:publicKeyAlgorithmOid') in $pq
352
+ and $prop($, 'cdx:crypto:signatureAlgorithmOid') != null
353
+ and $not($prop($, 'cdx:crypto:signatureAlgorithmOid') in $pq)
354
+ ]
355
+ )
356
+ location: |
357
+ {
358
+ "bomRef": $firstNonEmpty($."bom-ref", bom.serialNumber)
359
+ }
360
+ message: "Certificate '{{ name }}' binds a post-quantum key with the classical signature '{{ $prop($, 'cdx:crypto:signatureAlgorithm') }}'"
361
+ mitigation: "Re-issue the certificate under a post-quantum or composite signature scheme once one is standardised for your chain."
362
+ evidence: |
363
+ {
364
+ "keyAlgorithmOid": $prop($, 'cdx:crypto:publicKeyAlgorithmOid'),
365
+ "signatureAlgorithmOid": $prop($, 'cdx:crypto:signatureAlgorithmOid')
366
+ }
367
+
368
+ - id: CBC-007
369
+ name: "Unrecognised certificate algorithm"
370
+ description: "The key or signature algorithm is named only by its dotted OID, which means a composite, pre-standard or otherwise unregistered algorithm the inventory cannot classify. PLAN assigns this rule info severity; the rule engine's lowest level is low."
371
+ severity: low
372
+ category: cbom-security
373
+ dry-run-support: full
374
+ condition: |
375
+ components[
376
+ (
377
+ cryptoProperties.assetType = 'certificate'
378
+ and $match($safeStr($prop($, 'cdx:crypto:signatureAlgorithm')), /^[0-9]+(\.[0-9]+)+$/)
379
+ )
380
+ or (
381
+ cryptoProperties.assetType = 'related-crypto-material'
382
+ and $match(name, /^[0-9]+(\.[0-9]+)+$/)
383
+ )
384
+ ]
385
+ location: |
386
+ {
387
+ "bomRef": $firstNonEmpty($."bom-ref", bom.serialNumber)
388
+ }
389
+ message: "Certificate '{{ name }}' uses an algorithm named only by its OID '{{ $firstNonEmpty($prop($, 'cdx:crypto:signatureAlgorithm'), name) }}'"
390
+ mitigation: "Identify the algorithm behind the OID and confirm it is an approved one for this use."
391
+ evidence: |
392
+ {
393
+ "signatureAlgorithm": $prop($, 'cdx:crypto:signatureAlgorithm'),
394
+ "signatureAlgorithmOid": $prop($, 'cdx:crypto:signatureAlgorithmOid'),
395
+ "name": name
396
+ }