@cdxgen/cdxgen 13.4.0 → 13.6.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 (305) hide show
  1. package/README.md +9 -9
  2. package/bin/cdxgen-secure.js +15 -0
  3. package/bin/cdxgen.js +29 -5
  4. package/bin/evinse.js +8 -0
  5. package/bin/hbom.js +15 -7
  6. package/bin/repl.js +29 -0
  7. package/bin/validate.js +6 -0
  8. package/data/cbomosdb-queries.json +13 -1
  9. package/data/component-tags.json +8 -0
  10. package/data/license-aliases.json +24 -2
  11. package/data/queries-darwin.json +25 -1
  12. package/data/queries-win.json +19 -1
  13. package/data/queries.json +41 -0
  14. package/data/remediations.json +407 -1
  15. package/data/rules/ai-bom.yaml +1 -1
  16. package/data/rules/brotli-decoder.yaml +107 -0
  17. package/data/rules/cbom-security.yaml +235 -4
  18. package/data/rules/go-binaries.yaml +46 -0
  19. package/data/rules/golem-go.yaml +80 -0
  20. package/data/rules/hbom-compliance.yaml +40 -22
  21. package/data/rules/hbom-performance.yaml +7 -1
  22. package/data/rules/host-topology.yaml +1 -1
  23. package/data/rules/obom-runtime.yaml +31 -2
  24. package/data/rules/php-runtime.yaml +143 -0
  25. package/data/rules/vscode-extensions.yaml +75 -0
  26. package/data/spdx-license-list.json +121 -7
  27. package/data/spdx-licenses.json +69 -0
  28. package/data/spdx.schema.json +845 -2
  29. package/lib/audit/index.js +14 -0
  30. package/lib/cli/bomAssembly.js +120 -6
  31. package/lib/cli/cliOptions.js +110 -3
  32. package/lib/cli/index.js +182 -6
  33. package/lib/cli/jsBom.js +153 -64
  34. package/lib/cli/jvmBom.js +363 -66
  35. package/lib/cli/managedBom.js +853 -87
  36. package/lib/cli/nativeBom.js +267 -33
  37. package/lib/core/boundedFile.js +344 -0
  38. package/lib/core/brotliProbe.js +182 -0
  39. package/lib/core/env.js +38 -8
  40. package/lib/core/fs.js +40 -19
  41. package/lib/core/httpClient.js +172 -46
  42. package/lib/core/lockPaths.js +38 -0
  43. package/lib/core/paths.js +24 -1
  44. package/lib/core/processTree.js +5 -0
  45. package/lib/core/projectConfig.js +1 -0
  46. package/lib/core/projectTooling.js +97 -0
  47. package/lib/core/propertySanitizer.js +72 -0
  48. package/lib/core/toolRegistry.js +170 -0
  49. package/lib/ecosystems/cppEvidence.js +263 -106
  50. package/lib/ecosystems/cppIncludeResolver.js +16 -5
  51. package/lib/ecosystems/ecosystems.js +25 -10
  52. package/lib/ecosystems/gemHostProbe.js +301 -0
  53. package/lib/ecosystems/golem.js +550 -6
  54. package/lib/ecosystems/gradleutils.js +858 -244
  55. package/lib/ecosystems/parsers-bazel.js +107 -6
  56. package/lib/ecosystems/parsers-dotnet.js +117 -18
  57. package/lib/ecosystems/parsers-go.js +1090 -367
  58. package/lib/ecosystems/parsers-js.js +505 -22
  59. package/lib/ecosystems/parsers-jvm.js +259 -17
  60. package/lib/ecosystems/parsers-misc.js +438 -64
  61. package/lib/ecosystems/parsers-python.js +100 -12
  62. package/lib/ecosystems/pythonutils.js +128 -2
  63. package/lib/ecosystems/rubyutils.js +544 -34
  64. package/lib/ecosystems/rusi.js +10 -0
  65. package/lib/ecosystems/scalacliutils.js +4 -1
  66. package/lib/ecosystems/scalasem.js +798 -151
  67. package/lib/ecosystems/vendoredCode.js +237 -3
  68. package/lib/ecosystems/venvProbe.js +360 -0
  69. package/lib/evinser/evinser.js +472 -61
  70. package/lib/evinser/swiftsem.js +68 -5
  71. package/lib/helpers/agenticToolutils.js +413 -93
  72. package/lib/helpers/vsixutils.js +1574 -315
  73. package/lib/inventory/agentSkillSpec.js +17 -0
  74. package/lib/inventory/apkInstalledDb.js +243 -0
  75. package/lib/inventory/atomUtils.js +110 -0
  76. package/lib/inventory/auditCategories.js +3 -3
  77. package/lib/inventory/brotliDecoder.js +142 -0
  78. package/lib/inventory/buildToolRateLimit.js +1 -1
  79. package/lib/inventory/cacheDir.js +52 -9
  80. package/lib/inventory/cbomutils.js +56 -7
  81. package/lib/inventory/certificates.js +2371 -0
  82. package/lib/inventory/communityAiConfigParser.js +4 -9
  83. package/lib/inventory/deps.js +41 -4
  84. package/lib/inventory/display.js +200 -3
  85. package/lib/inventory/dosai.js +639 -63
  86. package/lib/inventory/dotnetRuntime.js +217 -0
  87. package/lib/inventory/dynamic.js +45 -3
  88. package/lib/inventory/envcontext.js +475 -18
  89. package/lib/inventory/evidenceUtils.js +447 -23
  90. package/lib/inventory/fetchBatch.js +1 -1
  91. package/lib/inventory/formulationParsers.js +32 -3
  92. package/lib/inventory/goBuildInfo.js +140 -0
  93. package/lib/inventory/gtfobins.js +13 -0
  94. package/lib/inventory/hbom.js +67 -7
  95. package/lib/inventory/hbomAnalysis.js +16 -0
  96. package/lib/inventory/hostRuntimeProbe.js +686 -0
  97. package/lib/inventory/hostTopology.js +21 -0
  98. package/lib/inventory/jvmLocalRepos.js +9 -2
  99. package/lib/inventory/jvmToolEnv.js +29 -0
  100. package/lib/inventory/licenseEnhancer.js +12 -0
  101. package/lib/inventory/mavenCentralMirror.js +534 -0
  102. package/lib/inventory/nodeBuildInfo.js +218 -0
  103. package/lib/inventory/nodeHostProbe.js +202 -0
  104. package/lib/inventory/osPackagePurl.js +244 -0
  105. package/lib/inventory/osPackageResolver.js +271 -87
  106. package/lib/inventory/osinfo.js +79 -31
  107. package/lib/inventory/osqueryTransform.js +114 -5
  108. package/lib/inventory/phpBuildInfo.js +438 -0
  109. package/lib/inventory/phpHostProbe.js +185 -0
  110. package/lib/inventory/rootfsCerts.js +426 -0
  111. package/lib/inventory/rubyBuildInfo.js +972 -0
  112. package/lib/inventory/rubyHostProbe.js +218 -0
  113. package/lib/inventory/scalaCoords.js +4 -3
  114. package/lib/inventory/scalaDedupe.js +440 -0
  115. package/lib/inventory/source.js +256 -5
  116. package/lib/inventory/spdx.js +144 -0
  117. package/lib/inventory/traceRunner.js +5 -1
  118. package/lib/inventory/tracedCrypto.js +129 -0
  119. package/lib/managers/binary.js +866 -186
  120. package/lib/managers/docker.js +245 -12
  121. package/lib/parsers/email.js +277 -0
  122. package/lib/parsers/largeJson.js +62 -13
  123. package/lib/parsers/vscodeExtensionId.js +183 -0
  124. package/lib/server/server.js +198 -2
  125. package/lib/stages/postgen/annotator.js +17 -1
  126. package/lib/stages/postgen/introspection/reflect.js +4 -1
  127. package/lib/stages/postgen/postgen.js +5 -5
  128. package/lib/stages/postgen/ruleEngine.js +71 -6
  129. package/lib/stages/postgen/specVersionCompat.js +30 -0
  130. package/lib/stages/pregen/envAudit.js +1 -0
  131. package/lib/stages/pregen/pregen.js +231 -62
  132. package/lib/validator/bomValidator.js +32 -6
  133. package/lib/validator/generated/runtime.mjs +13 -0
  134. package/lib/validator/generated/validate-1.6.mjs +27 -8
  135. package/lib/validator/generated/validate-1.7.mjs +32 -13
  136. package/lib/validator/generated/validate-2.0.mjs +31 -12
  137. package/lib/validator/index.js +1 -1
  138. package/package.json +19 -18
  139. package/types/bin/cdxgen-secure.d.ts +3 -0
  140. package/types/bin/cdxgen-secure.d.ts.map +1 -0
  141. package/types/bin/repl.d.ts.map +1 -1
  142. package/types/lib/audit/index.d.ts.map +1 -1
  143. package/types/lib/cli/bomAssembly.d.ts +22 -3
  144. package/types/lib/cli/bomAssembly.d.ts.map +1 -1
  145. package/types/lib/cli/cliOptions.d.ts +43 -0
  146. package/types/lib/cli/cliOptions.d.ts.map +1 -1
  147. package/types/lib/cli/index.d.ts.map +1 -1
  148. package/types/lib/cli/jsBom.d.ts +1 -17
  149. package/types/lib/cli/jsBom.d.ts.map +1 -1
  150. package/types/lib/cli/jvmBom.d.ts +20 -0
  151. package/types/lib/cli/jvmBom.d.ts.map +1 -1
  152. package/types/lib/cli/managedBom.d.ts.map +1 -1
  153. package/types/lib/cli/nativeBom.d.ts.map +1 -1
  154. package/types/lib/core/boundedFile.d.ts +70 -0
  155. package/types/lib/core/boundedFile.d.ts.map +1 -0
  156. package/types/lib/core/brotliProbe.d.ts +37 -0
  157. package/types/lib/core/brotliProbe.d.ts.map +1 -0
  158. package/types/lib/core/env.d.ts +22 -2
  159. package/types/lib/core/env.d.ts.map +1 -1
  160. package/types/lib/core/fs.d.ts.map +1 -1
  161. package/types/lib/core/httpClient.d.ts +24 -0
  162. package/types/lib/core/httpClient.d.ts.map +1 -1
  163. package/types/lib/core/lockPaths.d.ts +19 -0
  164. package/types/lib/core/lockPaths.d.ts.map +1 -0
  165. package/types/lib/core/processTree.d.ts +2 -0
  166. package/types/lib/core/processTree.d.ts.map +1 -1
  167. package/types/lib/core/projectConfig.d.ts.map +1 -1
  168. package/types/lib/core/projectTooling.d.ts +41 -0
  169. package/types/lib/core/projectTooling.d.ts.map +1 -0
  170. package/types/lib/core/propertySanitizer.d.ts +26 -0
  171. package/types/lib/core/propertySanitizer.d.ts.map +1 -1
  172. package/types/lib/core/toolRegistry.d.ts +36 -0
  173. package/types/lib/core/toolRegistry.d.ts.map +1 -0
  174. package/types/lib/ecosystems/cppEvidence.d.ts +40 -13
  175. package/types/lib/ecosystems/cppEvidence.d.ts.map +1 -1
  176. package/types/lib/ecosystems/cppIncludeResolver.d.ts +2 -1
  177. package/types/lib/ecosystems/cppIncludeResolver.d.ts.map +1 -1
  178. package/types/lib/ecosystems/ecosystems.d.ts.map +1 -1
  179. package/types/lib/ecosystems/gemHostProbe.d.ts +28 -0
  180. package/types/lib/ecosystems/gemHostProbe.d.ts.map +1 -0
  181. package/types/lib/ecosystems/golem.d.ts +81 -1
  182. package/types/lib/ecosystems/golem.d.ts.map +1 -1
  183. package/types/lib/ecosystems/gradleutils.d.ts +57 -21
  184. package/types/lib/ecosystems/gradleutils.d.ts.map +1 -1
  185. package/types/lib/ecosystems/parsers-bazel.d.ts.map +1 -1
  186. package/types/lib/ecosystems/parsers-dotnet.d.ts +40 -4
  187. package/types/lib/ecosystems/parsers-dotnet.d.ts.map +1 -1
  188. package/types/lib/ecosystems/parsers-go.d.ts +85 -13
  189. package/types/lib/ecosystems/parsers-go.d.ts.map +1 -1
  190. package/types/lib/ecosystems/parsers-js.d.ts +17 -20
  191. package/types/lib/ecosystems/parsers-js.d.ts.map +1 -1
  192. package/types/lib/ecosystems/parsers-jvm.d.ts +28 -2
  193. package/types/lib/ecosystems/parsers-jvm.d.ts.map +1 -1
  194. package/types/lib/ecosystems/parsers-misc.d.ts +37 -58
  195. package/types/lib/ecosystems/parsers-misc.d.ts.map +1 -1
  196. package/types/lib/ecosystems/parsers-python.d.ts +14 -3
  197. package/types/lib/ecosystems/parsers-python.d.ts.map +1 -1
  198. package/types/lib/ecosystems/pythonutils.d.ts +19 -1
  199. package/types/lib/ecosystems/pythonutils.d.ts.map +1 -1
  200. package/types/lib/ecosystems/rubyutils.d.ts +144 -12
  201. package/types/lib/ecosystems/rubyutils.d.ts.map +1 -1
  202. package/types/lib/ecosystems/rusi.d.ts.map +1 -1
  203. package/types/lib/ecosystems/scalacliutils.d.ts.map +1 -1
  204. package/types/lib/ecosystems/scalasem.d.ts.map +1 -1
  205. package/types/lib/ecosystems/vendoredCode.d.ts +26 -0
  206. package/types/lib/ecosystems/vendoredCode.d.ts.map +1 -1
  207. package/types/lib/ecosystems/venvProbe.d.ts +40 -0
  208. package/types/lib/ecosystems/venvProbe.d.ts.map +1 -0
  209. package/types/lib/evinser/evinser.d.ts +88 -8
  210. package/types/lib/evinser/evinser.d.ts.map +1 -1
  211. package/types/lib/evinser/swiftsem.d.ts +10 -0
  212. package/types/lib/evinser/swiftsem.d.ts.map +1 -1
  213. package/types/lib/inventory/agentSkillSpec.d.ts +13 -0
  214. package/types/lib/inventory/agentSkillSpec.d.ts.map +1 -0
  215. package/types/lib/inventory/apkInstalledDb.d.ts +42 -0
  216. package/types/lib/inventory/apkInstalledDb.d.ts.map +1 -0
  217. package/types/lib/inventory/atomUtils.d.ts +33 -0
  218. package/types/lib/inventory/atomUtils.d.ts.map +1 -1
  219. package/types/lib/inventory/brotliDecoder.d.ts +58 -0
  220. package/types/lib/inventory/brotliDecoder.d.ts.map +1 -0
  221. package/types/lib/inventory/cacheDir.d.ts +12 -4
  222. package/types/lib/inventory/cacheDir.d.ts.map +1 -1
  223. package/types/lib/inventory/cbomutils.d.ts +17 -0
  224. package/types/lib/inventory/cbomutils.d.ts.map +1 -1
  225. package/types/lib/inventory/certificates.d.ts +205 -0
  226. package/types/lib/inventory/certificates.d.ts.map +1 -0
  227. package/types/lib/inventory/communityAiConfigParser.d.ts.map +1 -1
  228. package/types/lib/inventory/deps.d.ts +2 -1
  229. package/types/lib/inventory/deps.d.ts.map +1 -1
  230. package/types/lib/inventory/display.d.ts +18 -0
  231. package/types/lib/inventory/display.d.ts.map +1 -1
  232. package/types/lib/inventory/dosai.d.ts +162 -7
  233. package/types/lib/inventory/dosai.d.ts.map +1 -1
  234. package/types/lib/inventory/dotnetRuntime.d.ts +44 -0
  235. package/types/lib/inventory/dotnetRuntime.d.ts.map +1 -0
  236. package/types/lib/inventory/dynamic.d.ts +6 -1
  237. package/types/lib/inventory/dynamic.d.ts.map +1 -1
  238. package/types/lib/inventory/envcontext.d.ts +92 -8
  239. package/types/lib/inventory/envcontext.d.ts.map +1 -1
  240. package/types/lib/inventory/evidenceUtils.d.ts +29 -10
  241. package/types/lib/inventory/evidenceUtils.d.ts.map +1 -1
  242. package/types/lib/inventory/formulationParsers.d.ts.map +1 -1
  243. package/types/lib/inventory/goBuildInfo.d.ts +10 -0
  244. package/types/lib/inventory/goBuildInfo.d.ts.map +1 -0
  245. package/types/lib/inventory/gtfobins.d.ts.map +1 -1
  246. package/types/lib/inventory/hbom.d.ts.map +1 -1
  247. package/types/lib/inventory/hbomAnalysis.d.ts +10 -0
  248. package/types/lib/inventory/hbomAnalysis.d.ts.map +1 -1
  249. package/types/lib/inventory/hostRuntimeProbe.d.ts +44 -0
  250. package/types/lib/inventory/hostRuntimeProbe.d.ts.map +1 -0
  251. package/types/lib/inventory/hostTopology.d.ts.map +1 -1
  252. package/types/lib/inventory/jvmToolEnv.d.ts +12 -0
  253. package/types/lib/inventory/jvmToolEnv.d.ts.map +1 -1
  254. package/types/lib/inventory/licenseEnhancer.d.ts.map +1 -1
  255. package/types/lib/inventory/mavenCentralMirror.d.ts +170 -0
  256. package/types/lib/inventory/mavenCentralMirror.d.ts.map +1 -0
  257. package/types/lib/inventory/nodeBuildInfo.d.ts +95 -0
  258. package/types/lib/inventory/nodeBuildInfo.d.ts.map +1 -0
  259. package/types/lib/inventory/nodeHostProbe.d.ts +15 -0
  260. package/types/lib/inventory/nodeHostProbe.d.ts.map +1 -0
  261. package/types/lib/inventory/osPackagePurl.d.ts +99 -0
  262. package/types/lib/inventory/osPackagePurl.d.ts.map +1 -0
  263. package/types/lib/inventory/osPackageResolver.d.ts +44 -2
  264. package/types/lib/inventory/osPackageResolver.d.ts.map +1 -1
  265. package/types/lib/inventory/osinfo.d.ts +31 -6
  266. package/types/lib/inventory/osinfo.d.ts.map +1 -1
  267. package/types/lib/inventory/osqueryTransform.d.ts +51 -0
  268. package/types/lib/inventory/osqueryTransform.d.ts.map +1 -1
  269. package/types/lib/inventory/phpBuildInfo.d.ts +142 -0
  270. package/types/lib/inventory/phpBuildInfo.d.ts.map +1 -0
  271. package/types/lib/inventory/phpHostProbe.d.ts +35 -0
  272. package/types/lib/inventory/phpHostProbe.d.ts.map +1 -0
  273. package/types/lib/inventory/rootfsCerts.d.ts +27 -0
  274. package/types/lib/inventory/rootfsCerts.d.ts.map +1 -0
  275. package/types/lib/inventory/rubyBuildInfo.d.ts +271 -0
  276. package/types/lib/inventory/rubyBuildInfo.d.ts.map +1 -0
  277. package/types/lib/inventory/rubyHostProbe.d.ts +47 -0
  278. package/types/lib/inventory/rubyHostProbe.d.ts.map +1 -0
  279. package/types/lib/inventory/source.d.ts +38 -0
  280. package/types/lib/inventory/source.d.ts.map +1 -1
  281. package/types/lib/inventory/spdx.d.ts +15 -0
  282. package/types/lib/inventory/spdx.d.ts.map +1 -1
  283. package/types/lib/inventory/traceRunner.d.ts +4 -1
  284. package/types/lib/inventory/traceRunner.d.ts.map +1 -1
  285. package/types/lib/inventory/tracedCrypto.d.ts +22 -0
  286. package/types/lib/inventory/tracedCrypto.d.ts.map +1 -1
  287. package/types/lib/managers/binary.d.ts +10 -0
  288. package/types/lib/managers/binary.d.ts.map +1 -1
  289. package/types/lib/managers/docker.d.ts +24 -0
  290. package/types/lib/managers/docker.d.ts.map +1 -1
  291. package/types/lib/parsers/email.d.ts +19 -0
  292. package/types/lib/parsers/email.d.ts.map +1 -0
  293. package/types/lib/parsers/largeJson.d.ts +17 -3
  294. package/types/lib/parsers/largeJson.d.ts.map +1 -1
  295. package/types/lib/server/server.d.ts +8 -0
  296. package/types/lib/server/server.d.ts.map +1 -1
  297. package/types/lib/stages/postgen/annotator.d.ts.map +1 -1
  298. package/types/lib/stages/postgen/introspection/reflect.d.ts.map +1 -1
  299. package/types/lib/stages/postgen/ruleEngine.d.ts +7 -4
  300. package/types/lib/stages/postgen/ruleEngine.d.ts.map +1 -1
  301. package/types/lib/stages/postgen/specVersionCompat.d.ts.map +1 -1
  302. package/types/lib/stages/pregen/envAudit.d.ts.map +1 -1
  303. package/types/lib/stages/pregen/pregen.d.ts +26 -9
  304. package/types/lib/stages/pregen/pregen.d.ts.map +1 -1
  305. package/types/lib/validator/bomValidator.d.ts.map +1 -1
package/data/queries.json CHANGED
@@ -30,6 +30,18 @@
30
30
  "purlType": "vscode-extension",
31
31
  "componentType": "application"
32
32
  },
33
+ "chrome_search_engines": {
34
+ "query": "SELECT chrome_search_engines.*, chrome_search_engines.browser_type || '/' || chrome_search_engines.uid || '/' || chrome_search_engines.profile AS label FROM users JOIN chrome_search_engines USING (uid);",
35
+ "description": "The default search engine of every Chromium-based browser profile, for each user.",
36
+ "purlType": "swid",
37
+ "componentType": "data"
38
+ },
39
+ "ai_agent_skills": {
40
+ "query": "SELECT ai_agent_skills.*, hash.sha256 FROM users JOIN ai_agent_skills USING (uid) LEFT JOIN hash ON hash.path = ai_agent_skills.path UNION ALL SELECT ai_agent_skills.*, hash.sha256 FROM ai_agent_skills LEFT JOIN hash ON hash.path = ai_agent_skills.path WHERE ai_agent_skills.scope = 'system';",
41
+ "description": "AI agent skills (SKILL.md packages) installed for each user, through Claude Code plugins and system-wide, with the SHA-256 of each SKILL.md. Skills have no package identity, so they get no purl.",
42
+ "purlType": "generic",
43
+ "componentType": "file"
44
+ },
33
45
  "deb_packages": {
34
46
  "query": "select * from deb_packages;",
35
47
  "description": "Retrieves all the installed DEB packages in the target Linux system.",
@@ -69,6 +81,29 @@
69
81
  "description": "Retrieves all the installed RPM packages in the target Linux system.",
70
82
  "purlType": "rpm"
71
83
  },
84
+ "pacman_packages": {
85
+ "query": "select * from pacman_packages;",
86
+ "description": "Retrieves all the packages pacman installed on Arch Linux and the distros built on it.",
87
+ "purlType": "alpm"
88
+ },
89
+ "snap_packages": {
90
+ "query": "select * from snap_packages;",
91
+ "description": "Retrieves the installed snap packages at their current revision.",
92
+ "purlType": "snap",
93
+ "componentType": "application"
94
+ },
95
+ "flatpak_packages": {
96
+ "query": "select app_id as name, name as display_name, version, arch, branch, commit_hash, origin, runtime, type, installation, summary, description, license, homepage, developer_name from flatpak_packages;",
97
+ "description": "Retrieves the Flatpak applications and runtimes installed system-wide and for each user.",
98
+ "purlType": "flatpak",
99
+ "componentType": "application"
100
+ },
101
+ "homebrew_packages": {
102
+ "query": "SELECT * FROM homebrew_packages;",
103
+ "description": "Homebrew formula and cask inventory including auto-update behavior.",
104
+ "purlType": "brew",
105
+ "componentType": "application"
106
+ },
72
107
  "python_packages": {
73
108
  "query": "select * from python_packages;",
74
109
  "description": "Python packages installed on system.",
@@ -85,6 +120,12 @@
85
120
  "purlType": "swid",
86
121
  "componentType": "data"
87
122
  },
123
+ "gpu_info": {
124
+ "query": "SELECT *, driver_version AS version, vendor AS publisher FROM gpu_info;",
125
+ "description": "GPU inventory with the vendor, model and installed driver version.",
126
+ "purlType": "swid",
127
+ "componentType": "device"
128
+ },
88
129
  "users_snapshot": {
89
130
  "query": "SELECT username as name, uuid as version, description, directory, shell, uid, gid FROM users;",
90
131
  "description": "Local user inventory for account and shell posture analysis.",
@@ -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",
@@ -407,6 +431,34 @@
407
431
  },
408
432
  "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
409
433
  },
434
+ "js.lockfile-unsafe-path": {
435
+ "ecosystem": "npm",
436
+ "kind": "evidence.degraded",
437
+ "impact": "transitive-deps",
438
+ "title": "Secure mode omitted package-lock.json entries whose paths point outside the project",
439
+ "targetTier": "lockfile",
440
+ "actions": [
441
+ {
442
+ "kind": "config",
443
+ "command": "Review the file: and link entries the warning names; remove any you did not add, and regenerate the lockfile with npm install --package-lock-only"
444
+ },
445
+ {
446
+ "kind": "config",
447
+ "command": "For trusted sibling file: or npm link dependencies, rerun outside secure mode on a trusted checkout to keep them"
448
+ },
449
+ {
450
+ "kind": "rerun"
451
+ }
452
+ ],
453
+ "verify": {
454
+ "rules": [],
455
+ "expectTier": "lockfile",
456
+ "eventsCleared": [
457
+ "js.lockfile-unsafe-path"
458
+ ]
459
+ },
460
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
461
+ },
410
462
  "js.pnpm-lock-unparseable": {
411
463
  "ecosystem": "npm",
412
464
  "kind": "evidence.degraded",
@@ -615,6 +667,30 @@
615
667
  },
616
668
  "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
617
669
  },
670
+ "python.poetry-export.tooling-disabled": {
671
+ "ecosystem": "python",
672
+ "kind": "fallback.engaged",
673
+ "impact": "transitive-deps",
674
+ "title": "poetry export and pdm export were skipped because dependency installation is disabled; only the packages in the lock file were captured",
675
+ "targetTier": null,
676
+ "actions": [
677
+ {
678
+ "kind": "config",
679
+ "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."
680
+ },
681
+ {
682
+ "kind": "rerun"
683
+ }
684
+ ],
685
+ "verify": {
686
+ "rules": [],
687
+ "expectTier": null,
688
+ "eventsCleared": [
689
+ "python.poetry-export.tooling-disabled"
690
+ ]
691
+ },
692
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
693
+ },
618
694
  "clojure.lein.missing": {
619
695
  "ecosystem": "clojure",
620
696
  "kind": "fallback.engaged",
@@ -672,6 +748,30 @@
672
748
  },
673
749
  "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
674
750
  },
751
+ "clojure.lein.tooling-disabled": {
752
+ "ecosystem": "clojure",
753
+ "kind": "fallback.engaged",
754
+ "impact": "transitive-deps",
755
+ "title": "Leiningen was skipped because dependency installation is disabled; only the dependencies declared in project.clj were captured",
756
+ "targetTier": null,
757
+ "actions": [
758
+ {
759
+ "kind": "config",
760
+ "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."
761
+ },
762
+ {
763
+ "kind": "rerun"
764
+ }
765
+ ],
766
+ "verify": {
767
+ "rules": [],
768
+ "expectTier": null,
769
+ "eventsCleared": [
770
+ "clojure.lein.tooling-disabled"
771
+ ]
772
+ },
773
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
774
+ },
675
775
  "swift.toolchain.missing": {
676
776
  "ecosystem": "swift",
677
777
  "kind": "fallback.engaged",
@@ -718,11 +818,35 @@
718
818
  },
719
819
  "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
720
820
  },
821
+ "swift.tooling-disabled": {
822
+ "ecosystem": "swift",
823
+ "kind": "fallback.engaged",
824
+ "impact": "transitive-deps",
825
+ "title": "SwiftPM was skipped because dependency installation is disabled; only the packages in Package.resolved were captured",
826
+ "targetTier": null,
827
+ "actions": [
828
+ {
829
+ "kind": "config",
830
+ "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."
831
+ },
832
+ {
833
+ "kind": "rerun"
834
+ }
835
+ ],
836
+ "verify": {
837
+ "rules": [],
838
+ "expectTier": null,
839
+ "eventsCleared": [
840
+ "swift.tooling-disabled"
841
+ ]
842
+ },
843
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
844
+ },
721
845
  "dotnet.sdk.missing": {
722
846
  "ecosystem": "csharp",
723
847
  "kind": "evidence.degraded",
724
848
  "impact": "components",
725
- "title": ".NET SDK is not installed, so dotnet slices are degraded",
849
+ "title": "The .NET runtime dosai needs is not installed, so dotnet slices are degraded",
726
850
  "targetTier": "resolved",
727
851
  "actions": [
728
852
  {
@@ -749,6 +873,30 @@
749
873
  },
750
874
  "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
751
875
  },
876
+ "dotnet.msbuild.tooling-disabled": {
877
+ "ecosystem": "csharp",
878
+ "kind": "fallback.engaged",
879
+ "impact": "versions",
880
+ "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",
881
+ "targetTier": "manifest",
882
+ "actions": [
883
+ {
884
+ "kind": "config",
885
+ "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."
886
+ },
887
+ {
888
+ "kind": "rerun"
889
+ }
890
+ ],
891
+ "verify": {
892
+ "rules": [],
893
+ "expectTier": "manifest",
894
+ "eventsCleared": [
895
+ "dotnet.msbuild.tooling-disabled"
896
+ ]
897
+ },
898
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
899
+ },
752
900
  "dosai.semantics.persist-failed": {
753
901
  "ecosystem": "csharp",
754
902
  "kind": "evidence.degraded",
@@ -773,6 +921,72 @@
773
921
  },
774
922
  "docs": "https://cyclonedx.github.io/cdxgen/#/EVINSE"
775
923
  },
924
+ "dosai.semantics.trimmed-report": {
925
+ "ecosystem": "csharp",
926
+ "kind": "evidence.degraded",
927
+ "impact": "none",
928
+ "title": "The persisted dosai report is partial: its methods half was written with --sections",
929
+ "targetTier": "resolved",
930
+ "actions": [
931
+ {
932
+ "kind": "config",
933
+ "detail": "Run dosai methods without --sections, or run cdxgen with --evidence, so the persisted report holds every section."
934
+ }
935
+ ],
936
+ "verify": {
937
+ "rules": [],
938
+ "expectTier": "resolved",
939
+ "eventsCleared": [
940
+ "dosai.semantics.trimmed-report"
941
+ ]
942
+ },
943
+ "docs": "https://cyclonedx.github.io/cdxgen/#/EVINSE"
944
+ },
945
+ "dosai.usages.trimmed-report": {
946
+ "ecosystem": "csharp",
947
+ "kind": "evidence.degraded",
948
+ "impact": "components",
949
+ "title": "The supplied dosai usages slice was written without sections cdxgen reads",
950
+ "targetTier": "resolved",
951
+ "actions": [
952
+ {
953
+ "kind": "config",
954
+ "detail": "Run dosai methods without --sections, or with every section cdxgen reads, for the report passed with --usages-slices-file."
955
+ }
956
+ ],
957
+ "verify": {
958
+ "rules": [],
959
+ "expectTier": "resolved",
960
+ "eventsCleared": [
961
+ "dosai.usages.trimmed-report"
962
+ ]
963
+ },
964
+ "docs": "https://cyclonedx.github.io/cdxgen/#/EVINSE"
965
+ },
966
+ "dosai.method-calls-capped": {
967
+ "ecosystem": "csharp",
968
+ "kind": "evidence.degraded",
969
+ "impact": "components",
970
+ "title": "The dosai report holds more distinct method calls than cdxgen keeps, so some occurrence evidence was dropped",
971
+ "targetTier": "resolved",
972
+ "actions": [
973
+ {
974
+ "kind": "config",
975
+ "detail": "Raise the cap with CDXGEN_DOSAI_MAX_METHOD_CALLS, or write the report with dosai's --sections so it holds less."
976
+ },
977
+ {
978
+ "kind": "rerun"
979
+ }
980
+ ],
981
+ "verify": {
982
+ "rules": [],
983
+ "expectTier": "resolved",
984
+ "eventsCleared": [
985
+ "dosai.method-calls-capped"
986
+ ]
987
+ },
988
+ "docs": "https://cyclonedx.github.io/cdxgen/#/EVINSE"
989
+ },
776
990
  "cocoa.pods.missing": {
777
991
  "ecosystem": "cocoa",
778
992
  "kind": "fallback.engaged",
@@ -796,6 +1010,54 @@
796
1010
  },
797
1011
  "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
798
1012
  },
1013
+ "cocoa.podfile-json.tooling-disabled": {
1014
+ "ecosystem": "cocoa",
1015
+ "kind": "fallback.engaged",
1016
+ "impact": "components",
1017
+ "title": "pod ipc podfile-json was skipped because dependency installation is disabled; every pod from Podfile.lock is included without per-target filtering",
1018
+ "targetTier": null,
1019
+ "actions": [
1020
+ {
1021
+ "kind": "config",
1022
+ "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."
1023
+ },
1024
+ {
1025
+ "kind": "rerun"
1026
+ }
1027
+ ],
1028
+ "verify": {
1029
+ "rules": [],
1030
+ "expectTier": null,
1031
+ "eventsCleared": [
1032
+ "cocoa.podfile-json.tooling-disabled"
1033
+ ]
1034
+ },
1035
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
1036
+ },
1037
+ "cocoa.podspec.tooling-disabled": {
1038
+ "ecosystem": "cocoa",
1039
+ "kind": "fallback.engaged",
1040
+ "impact": "licenses",
1041
+ "title": "Ruby podspecs were not evaluated because dependency installation is disabled; their pods lack license and author details",
1042
+ "targetTier": null,
1043
+ "actions": [
1044
+ {
1045
+ "kind": "config",
1046
+ "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."
1047
+ },
1048
+ {
1049
+ "kind": "rerun"
1050
+ }
1051
+ ],
1052
+ "verify": {
1053
+ "rules": [],
1054
+ "expectTier": null,
1055
+ "eventsCleared": [
1056
+ "cocoa.podspec.tooling-disabled"
1057
+ ]
1058
+ },
1059
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
1060
+ },
799
1061
  "ruby.build-deps.missing": {
800
1062
  "ecosystem": "ruby",
801
1063
  "kind": "evidence.degraded",
@@ -1048,6 +1310,102 @@
1048
1310
  },
1049
1311
  "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES?id=php"
1050
1312
  },
1313
+ "php.host-probe.package-db-unreadable": {
1314
+ "ecosystem": "php",
1315
+ "kind": "evidence.degraded",
1316
+ "impact": "components",
1317
+ "title": "A package database could not be read in full, so the PHP no package owns on this host was not identified",
1318
+ "targetTier": null,
1319
+ "actions": [
1320
+ {
1321
+ "kind": "config",
1322
+ "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"
1323
+ },
1324
+ {
1325
+ "kind": "rerun"
1326
+ }
1327
+ ],
1328
+ "verify": {
1329
+ "rules": [],
1330
+ "expectTier": null,
1331
+ "eventsCleared": [
1332
+ "php.host-probe.package-db-unreadable"
1333
+ ]
1334
+ },
1335
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES?id=php"
1336
+ },
1337
+ "ruby.host-probe.package-db-unreadable": {
1338
+ "ecosystem": "ruby",
1339
+ "kind": "evidence.degraded",
1340
+ "impact": "components",
1341
+ "title": "A package database could not be read in full, so the Ruby no package owns on this host was not identified",
1342
+ "targetTier": null,
1343
+ "actions": [
1344
+ {
1345
+ "kind": "config",
1346
+ "command": "Run cdxgen as a user that can read the package databases (for example with sudo), so Ruby files can be matched to the packages that own them"
1347
+ },
1348
+ {
1349
+ "kind": "rerun"
1350
+ }
1351
+ ],
1352
+ "verify": {
1353
+ "rules": [],
1354
+ "expectTier": null,
1355
+ "eventsCleared": [
1356
+ "ruby.host-probe.package-db-unreadable"
1357
+ ]
1358
+ },
1359
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES?id=ruby"
1360
+ },
1361
+ "npm.host-probe.package-db-unreadable": {
1362
+ "ecosystem": "npm",
1363
+ "kind": "evidence.degraded",
1364
+ "impact": "components",
1365
+ "title": "A package database could not be read in full, so the Node.js no package owns on this host was not identified",
1366
+ "targetTier": null,
1367
+ "actions": [
1368
+ {
1369
+ "kind": "config",
1370
+ "command": "Run cdxgen as a user that can read the package databases (for example with sudo), so node binaries can be matched to the packages that own them"
1371
+ },
1372
+ {
1373
+ "kind": "rerun"
1374
+ }
1375
+ ],
1376
+ "verify": {
1377
+ "rules": [],
1378
+ "expectTier": null,
1379
+ "eventsCleared": [
1380
+ "npm.host-probe.package-db-unreadable"
1381
+ ]
1382
+ },
1383
+ "docs": "https://cyclonedx.github.io/cdxgen/#/OBOM_LESSONS"
1384
+ },
1385
+ "php.composer.platform-unattributed": {
1386
+ "ecosystem": "php",
1387
+ "kind": "evidence.degraded",
1388
+ "impact": "versions",
1389
+ "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",
1390
+ "targetTier": null,
1391
+ "actions": [
1392
+ {
1393
+ "kind": "config",
1394
+ "command": "Give the project a \"name\" in its composer.json, or scan the project directory itself"
1395
+ },
1396
+ {
1397
+ "kind": "rerun"
1398
+ }
1399
+ ],
1400
+ "verify": {
1401
+ "rules": [],
1402
+ "expectTier": null,
1403
+ "eventsCleared": [
1404
+ "php.composer.platform-unattributed"
1405
+ ]
1406
+ },
1407
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES?id=php"
1408
+ },
1051
1409
  "dart.pub-get-needed": {
1052
1410
  "ecosystem": "dart",
1053
1411
  "kind": "evidence.degraded",
@@ -1143,6 +1501,54 @@
1143
1501
  },
1144
1502
  "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
1145
1503
  },
1504
+ "binary.brotli-probe.capped": {
1505
+ "ecosystem": "generic",
1506
+ "kind": "evidence.degraded",
1507
+ "impact": "components",
1508
+ "title": "The Brotli decoder probe reached its file or byte cap, so some native files were not read for an embedded decoder",
1509
+ "targetTier": null,
1510
+ "actions": [
1511
+ {
1512
+ "kind": "config",
1513
+ "command": "Scan the image or root filesystem in smaller parts (for example one application directory at a time with -t rootfs), so every native file is read for an embedded Brotli decoder"
1514
+ },
1515
+ {
1516
+ "kind": "rerun"
1517
+ }
1518
+ ],
1519
+ "verify": {
1520
+ "rules": [],
1521
+ "expectTier": null,
1522
+ "eventsCleared": [
1523
+ "binary.brotli-probe.capped"
1524
+ ]
1525
+ },
1526
+ "docs": "https://cyclonedx.github.io/cdxgen/#/BOM_AUDIT?id=brotli-security"
1527
+ },
1528
+ "os.apk-installed-db.unreadable": {
1529
+ "ecosystem": "generic",
1530
+ "kind": "evidence.degraded",
1531
+ "impact": "components",
1532
+ "title": "The apk installed database could not be read in full, so the packages of this host are missing from the OBOM",
1533
+ "targetTier": null,
1534
+ "actions": [
1535
+ {
1536
+ "kind": "config",
1537
+ "command": "Run cdxgen as a user that can read the apk installed database (for example as root), so the packages it lists are inventoried"
1538
+ },
1539
+ {
1540
+ "kind": "rerun"
1541
+ }
1542
+ ],
1543
+ "verify": {
1544
+ "rules": [],
1545
+ "expectTier": null,
1546
+ "eventsCleared": [
1547
+ "os.apk-installed-db.unreadable"
1548
+ ]
1549
+ },
1550
+ "docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
1551
+ },
1146
1552
  "policy.secure-mode": {
1147
1553
  "ecosystem": "generic",
1148
1554
  "kind": "evidence.degraded",
@@ -330,7 +330,7 @@
330
330
  components[
331
331
  type = 'machine-learning-model'
332
332
  and $prop($, 'cdx:ai:artifactFormat') = 'onnx'
333
- and not $hasProp($, 'cdx:onnx:producer')
333
+ and $not($hasProp($, 'cdx:onnx:producer'))
334
334
  ]
335
335
  location: |
336
336
  {
@@ -0,0 +1,107 @@
1
+ # Embedded Brotli decoder rules
2
+ # Category: brotli-security
3
+ # Evaluates the cdx:brotli:* properties recorded for native files (container,
4
+ # rootfs and OS scans) and vendored source trees (C/C++ source scans).
5
+ # CVE-2026-111497 is an out-of-bounds write in Google's Brotli decoder
6
+ # (CWE-252, CWE-787) reachable from any Brotli stream an attacker controls:
7
+ # an HTTP response a client decodes, a request body a server inflates, a
8
+ # compressed file. Fixed in google/brotli 1.0.10, 1.1.1 and 1.2.1 (commit
9
+ # 0ed4268). The Go port, andybalholm/brotli, had the same logic error but
10
+ # only crashes; it is fixed in v1.2.7.
11
+ # https://github.com/google/brotli/commit/0ed4268a4401abcb4472096340477cf4af7d1a2b
12
+ #
13
+ # The fix is read from the decoder itself (its BLOCK_SWITCH error name), not
14
+ # from a version number, so a distro backport that keeps the old version is
15
+ # recognised as fixed and a Node.js that still reports brotli 1.2.0 after the
16
+ # fix is not flagged.
17
+
18
+ - id: BROTLI-RCE-001
19
+ name: "Native file embeds a Brotli decoder affected by CVE-2026-111497"
20
+ description: "A binary, shared library or extension module carries its own copy of Google's C Brotli decoder without the fix for CVE-2026-111497. Updating the system libbrotli does not fix a private copy: the file itself has to be replaced by a release built from a fixed decoder."
21
+ severity: high
22
+ category: brotli-security
23
+ dry-run-support: full
24
+ condition: |
25
+ components[
26
+ $hasProp($, 'cdx:brotli:c:blockSwitchFix', 'false')
27
+ and $not($hasProp($, 'cdx:vendored', 'true'))
28
+ ]
29
+ location: |
30
+ {
31
+ "bomRef": $firstNonEmpty($."bom-ref", bom.serialNumber)
32
+ }
33
+ message: "'{{ name }}' embeds a Brotli decoder without the CVE-2026-111497 fix; a crafted Brotli stream can write past a decoder buffer (possible code execution). {{ $hasProp($, 'cdx:node:buildVersion') ? 'Upgrade Node.js ' & $prop($, 'cdx:node:buildVersion') & ' to 22.23.4, 24.22.1, 26.12.1 or later.' : 'Replace it with a build that bundles brotli 1.0.10, 1.1.1 or 1.2.1 (or google/brotli commit 0ed4268).' }}"
34
+ mitigation: "Node.js: 22.23.4, 24.22.1, 26.12.1. Python: Brotli 1.2.1, brotlicffi 1.2.1.0. Ruby: brotli gem 0.9.2. Java: Brotli4j 1.24.0. Other software: a release that bundles brotli 1.0.10, 1.1.1 or 1.2.1, or a rebuild with google/brotli commit 0ed4268. Until then, reject Content-Encoding: br request bodies at the proxy and keep untrusted Brotli data away from the affected process."
35
+ evidence: |
36
+ {
37
+ "srcFile": $prop($, 'internal:SrcFile'),
38
+ "evidence": $prop($, 'cdx:brotli:c:evidence'),
39
+ "nodeVersion": $prop($, 'cdx:node:buildVersion')
40
+ }
41
+
42
+ - id: BROTLI-RCE-002
43
+ name: "Vendored Brotli source affected by CVE-2026-111497"
44
+ description: "The project carries a copy of Google's Brotli sources whose decoder lacks the fix for CVE-2026-111497. Everything built from this tree inherits the bug, and no package manager or distro update will reach it."
45
+ severity: high
46
+ category: brotli-security
47
+ dry-run-support: full
48
+ condition: |
49
+ components[
50
+ $hasProp($, 'cdx:vendored', 'true')
51
+ and $hasProp($, 'cdx:brotli:c:blockSwitchFix', 'false')
52
+ ]
53
+ location: |
54
+ {
55
+ "bomRef": $firstNonEmpty($."bom-ref", bom.serialNumber)
56
+ }
57
+ message: "Vendored Brotli {{ version }} at '{{ $prop($, 'cdx:vendored:path') }}' lacks the CVE-2026-111497 fix; update it to 1.0.10, 1.1.1 or 1.2.1, or cherry-pick google/brotli commit 0ed4268."
58
+ mitigation: "Update the vendored copy to brotli 1.0.10, 1.1.1 or 1.2.1, or cherry-pick google/brotli commit 0ed4268 (with 50a9b70, b418fa8 and da98063), then rebuild everything that links it."
59
+ evidence: |
60
+ {
61
+ "path": $prop($, 'cdx:vendored:path'),
62
+ "version": version,
63
+ "versionSource": $prop($, 'cdx:vendored:versionSource')
64
+ }
65
+
66
+ - id: BROTLI-DOS-001
67
+ name: "Go binary embeds a Brotli port affected by the CVE-2026-111497 logic error"
68
+ description: "The Go port of the Brotli decoder (github.com/andybalholm/brotli) before v1.2.7 has the same unchecked block-switch error as the C decoder. Go's bounds checks turn it into a panic rather than a memory write, so a crafted stream crashes the process."
69
+ severity: medium
70
+ category: brotli-security
71
+ dry-run-support: full
72
+ condition: |
73
+ components[
74
+ $hasProp($, 'cdx:brotli:go:blockSwitchFix', 'false')
75
+ ]
76
+ location: |
77
+ {
78
+ "bomRef": $firstNonEmpty($."bom-ref", bom.serialNumber)
79
+ }
80
+ message: "'{{ name }}' embeds github.com/andybalholm/brotli older than v1.2.7; a crafted Brotli stream makes it panic. Rebuild with v1.2.7 or later."
81
+ mitigation: "Update github.com/andybalholm/brotli to v1.2.7 or later and rebuild the binary."
82
+ evidence: |
83
+ {
84
+ "srcFile": $prop($, 'internal:SrcFile')
85
+ }
86
+
87
+ - id: BROTLI-RCE-003
88
+ name: "Native file embeds a Brotli decoder whose CVE-2026-111497 fix state cannot be read"
89
+ description: "A binary, shared library or extension module carries Google's C Brotli decoder, recognised by its decoding tables, but the linker dropped the error-name table that shows whether the fix is in (--gc-sections, LTO and -dead_strip do this when nothing calls BrotliDecoderErrorString). Whether the copy is vulnerable has to be settled from the release that built the file."
90
+ severity: low
91
+ category: brotli-security
92
+ dry-run-support: full
93
+ condition: |
94
+ components[
95
+ $hasProp($, 'cdx:brotli:c:blockSwitchFix', 'unknown')
96
+ ]
97
+ location: |
98
+ {
99
+ "bomRef": $firstNonEmpty($."bom-ref", bom.serialNumber)
100
+ }
101
+ message: "'{{ name }}' embeds a Brotli decoder whose CVE-2026-111497 fix state cannot be read from the file; check that it was built from brotli 1.0.10, 1.1.1, 1.2.1 or later, or with google/brotli commit 0ed4268."
102
+ mitigation: "Find the release the file belongs to and confirm it bundles a fixed decoder (brotli 1.0.10, 1.1.1, 1.2.1, or commit 0ed4268); replace it otherwise."
103
+ evidence: |
104
+ {
105
+ "srcFile": $prop($, 'internal:SrcFile'),
106
+ "evidence": $prop($, 'cdx:brotli:c:evidence')
107
+ }