@cdxgen/cdxgen 13.4.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.
- package/README.md +7 -7
- package/bin/cdxgen-secure.js +15 -0
- package/bin/cdxgen.js +25 -5
- package/bin/evinse.js +5 -0
- package/bin/hbom.js +15 -7
- package/bin/repl.js +29 -0
- package/data/cbomosdb-queries.json +13 -1
- package/data/component-tags.json +8 -0
- package/data/queries-darwin.json +25 -1
- package/data/queries-win.json +19 -1
- package/data/queries.json +41 -0
- package/data/remediations.json +283 -1
- package/data/rules/cbom-security.yaml +235 -4
- package/data/rules/go-binaries.yaml +46 -0
- package/data/rules/golem-go.yaml +80 -0
- package/data/rules/hbom-compliance.yaml +40 -22
- package/data/rules/hbom-performance.yaml +7 -1
- package/data/rules/host-topology.yaml +1 -1
- package/data/rules/obom-runtime.yaml +31 -2
- package/data/rules/php-runtime.yaml +143 -0
- package/lib/audit/index.js +14 -0
- package/lib/cli/bomAssembly.js +28 -3
- package/lib/cli/cliOptions.js +110 -3
- package/lib/cli/index.js +73 -4
- package/lib/cli/jvmBom.js +126 -20
- package/lib/cli/managedBom.js +711 -71
- package/lib/cli/nativeBom.js +225 -28
- package/lib/core/env.js +30 -8
- package/lib/core/fs.js +28 -19
- package/lib/core/httpClient.js +74 -45
- package/lib/core/projectConfig.js +1 -0
- package/lib/core/projectTooling.js +97 -0
- package/lib/core/propertySanitizer.js +72 -0
- package/lib/ecosystems/golem.js +550 -6
- package/lib/ecosystems/gradleutils.js +30 -20
- package/lib/ecosystems/parsers-dotnet.js +117 -18
- package/lib/ecosystems/parsers-go.js +1090 -367
- package/lib/ecosystems/parsers-jvm.js +259 -17
- package/lib/ecosystems/parsers-misc.js +229 -44
- package/lib/ecosystems/parsers-python.js +11 -10
- package/lib/ecosystems/rubyutils.js +6 -3
- package/lib/ecosystems/rusi.js +10 -0
- package/lib/ecosystems/scalacliutils.js +2 -1
- package/lib/ecosystems/scalasem.js +3 -1
- package/lib/evinser/evinser.js +126 -18
- package/lib/evinser/swiftsem.js +68 -5
- package/lib/inventory/agentSkillSpec.js +17 -0
- package/lib/inventory/apkInstalledDb.js +243 -0
- package/lib/inventory/atomUtils.js +33 -0
- package/lib/inventory/auditCategories.js +3 -3
- package/lib/inventory/cacheDir.js +52 -9
- package/lib/inventory/certificates.js +2371 -0
- package/lib/inventory/communityAiConfigParser.js +4 -9
- package/lib/inventory/deps.js +6 -4
- package/lib/inventory/display.js +200 -3
- package/lib/inventory/dosai.js +500 -58
- package/lib/inventory/dynamic.js +45 -3
- package/lib/inventory/envcontext.js +168 -5
- package/lib/inventory/evidenceUtils.js +436 -23
- package/lib/inventory/formulationParsers.js +3 -2
- package/lib/inventory/goBuildInfo.js +140 -0
- package/lib/inventory/hbom.js +67 -7
- package/lib/inventory/hbomAnalysis.js +16 -0
- package/lib/inventory/hostTopology.js +21 -0
- package/lib/inventory/osPackagePurl.js +244 -0
- package/lib/inventory/osPackageResolver.js +89 -87
- package/lib/inventory/osinfo.js +79 -31
- package/lib/inventory/osqueryTransform.js +114 -5
- package/lib/inventory/phpBuildInfo.js +487 -0
- package/lib/inventory/phpHostProbe.js +641 -0
- package/lib/inventory/rootfsCerts.js +426 -0
- package/lib/inventory/source.js +207 -3
- package/lib/inventory/spdx.js +144 -0
- package/lib/inventory/traceRunner.js +5 -1
- package/lib/inventory/tracedCrypto.js +129 -0
- package/lib/managers/binary.js +529 -183
- package/lib/managers/docker.js +166 -12
- package/lib/parsers/email.js +277 -0
- package/lib/parsers/largeJson.js +34 -2
- package/lib/server/server.js +186 -1
- package/lib/stages/postgen/annotator.js +17 -1
- package/lib/stages/postgen/introspection/reflect.js +4 -1
- package/lib/stages/postgen/postgen.js +5 -5
- package/lib/stages/postgen/ruleEngine.js +58 -1
- package/lib/stages/postgen/specVersionCompat.js +30 -0
- package/lib/stages/pregen/pregen.js +117 -5
- package/lib/validator/bomValidator.js +26 -5
- package/lib/validator/generated/runtime.mjs +13 -0
- package/lib/validator/generated/validate-1.6.mjs +26 -7
- package/lib/validator/generated/validate-1.7.mjs +31 -12
- package/lib/validator/generated/validate-2.0.mjs +30 -11
- package/package.json +17 -17
- package/types/bin/cdxgen-secure.d.ts +3 -0
- package/types/bin/cdxgen-secure.d.ts.map +1 -0
- package/types/bin/repl.d.ts.map +1 -1
- package/types/lib/audit/index.d.ts.map +1 -1
- package/types/lib/cli/bomAssembly.d.ts +9 -2
- package/types/lib/cli/bomAssembly.d.ts.map +1 -1
- package/types/lib/cli/cliOptions.d.ts +43 -0
- package/types/lib/cli/cliOptions.d.ts.map +1 -1
- package/types/lib/cli/index.d.ts.map +1 -1
- package/types/lib/cli/jvmBom.d.ts +20 -0
- package/types/lib/cli/jvmBom.d.ts.map +1 -1
- package/types/lib/cli/managedBom.d.ts.map +1 -1
- package/types/lib/cli/nativeBom.d.ts.map +1 -1
- package/types/lib/core/env.d.ts +18 -2
- package/types/lib/core/env.d.ts.map +1 -1
- package/types/lib/core/fs.d.ts.map +1 -1
- package/types/lib/core/httpClient.d.ts.map +1 -1
- package/types/lib/core/projectConfig.d.ts.map +1 -1
- package/types/lib/core/projectTooling.d.ts +41 -0
- package/types/lib/core/projectTooling.d.ts.map +1 -0
- package/types/lib/core/propertySanitizer.d.ts +26 -0
- package/types/lib/core/propertySanitizer.d.ts.map +1 -1
- package/types/lib/ecosystems/cppEvidence.d.ts +1 -1
- package/types/lib/ecosystems/golem.d.ts +81 -1
- package/types/lib/ecosystems/golem.d.ts.map +1 -1
- package/types/lib/ecosystems/gradleutils.d.ts +10 -8
- package/types/lib/ecosystems/gradleutils.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-dotnet.d.ts +40 -4
- package/types/lib/ecosystems/parsers-dotnet.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-go.d.ts +85 -13
- package/types/lib/ecosystems/parsers-go.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-jvm.d.ts +28 -2
- package/types/lib/ecosystems/parsers-jvm.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-misc.d.ts +18 -58
- package/types/lib/ecosystems/parsers-misc.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-python.d.ts +4 -3
- package/types/lib/ecosystems/parsers-python.d.ts.map +1 -1
- package/types/lib/ecosystems/pythonutils.d.ts +1 -1
- package/types/lib/ecosystems/rubyutils.d.ts.map +1 -1
- package/types/lib/ecosystems/rusi.d.ts.map +1 -1
- package/types/lib/ecosystems/scalacliutils.d.ts.map +1 -1
- package/types/lib/ecosystems/scalasem.d.ts.map +1 -1
- package/types/lib/evinser/evinser.d.ts +25 -0
- package/types/lib/evinser/evinser.d.ts.map +1 -1
- package/types/lib/evinser/swiftsem.d.ts +10 -0
- package/types/lib/evinser/swiftsem.d.ts.map +1 -1
- package/types/lib/inventory/agentSkillSpec.d.ts +13 -0
- package/types/lib/inventory/agentSkillSpec.d.ts.map +1 -0
- package/types/lib/inventory/apkInstalledDb.d.ts +42 -0
- package/types/lib/inventory/apkInstalledDb.d.ts.map +1 -0
- package/types/lib/inventory/atomUtils.d.ts +14 -0
- package/types/lib/inventory/atomUtils.d.ts.map +1 -1
- package/types/lib/inventory/cacheDir.d.ts +12 -4
- package/types/lib/inventory/cacheDir.d.ts.map +1 -1
- package/types/lib/inventory/certificates.d.ts +205 -0
- package/types/lib/inventory/certificates.d.ts.map +1 -0
- package/types/lib/inventory/communityAiConfigParser.d.ts.map +1 -1
- package/types/lib/inventory/deps.d.ts +2 -1
- package/types/lib/inventory/deps.d.ts.map +1 -1
- package/types/lib/inventory/display.d.ts +18 -0
- package/types/lib/inventory/display.d.ts.map +1 -1
- package/types/lib/inventory/dosai.d.ts +145 -6
- package/types/lib/inventory/dosai.d.ts.map +1 -1
- package/types/lib/inventory/dynamic.d.ts +6 -1
- package/types/lib/inventory/dynamic.d.ts.map +1 -1
- package/types/lib/inventory/envcontext.d.ts +40 -2
- package/types/lib/inventory/envcontext.d.ts.map +1 -1
- package/types/lib/inventory/evidenceUtils.d.ts +29 -10
- package/types/lib/inventory/evidenceUtils.d.ts.map +1 -1
- package/types/lib/inventory/formulationParsers.d.ts.map +1 -1
- package/types/lib/inventory/goBuildInfo.d.ts +10 -0
- package/types/lib/inventory/goBuildInfo.d.ts.map +1 -0
- package/types/lib/inventory/hbom.d.ts.map +1 -1
- package/types/lib/inventory/hbomAnalysis.d.ts +10 -0
- package/types/lib/inventory/hbomAnalysis.d.ts.map +1 -1
- package/types/lib/inventory/hostTopology.d.ts.map +1 -1
- package/types/lib/inventory/osPackagePurl.d.ts +99 -0
- package/types/lib/inventory/osPackagePurl.d.ts.map +1 -0
- package/types/lib/inventory/osPackageResolver.d.ts +6 -2
- package/types/lib/inventory/osPackageResolver.d.ts.map +1 -1
- package/types/lib/inventory/osinfo.d.ts +31 -6
- package/types/lib/inventory/osinfo.d.ts.map +1 -1
- package/types/lib/inventory/osqueryTransform.d.ts +51 -0
- package/types/lib/inventory/osqueryTransform.d.ts.map +1 -1
- package/types/lib/inventory/phpBuildInfo.d.ts +142 -0
- package/types/lib/inventory/phpBuildInfo.d.ts.map +1 -0
- package/types/lib/inventory/phpHostProbe.d.ts +35 -0
- package/types/lib/inventory/phpHostProbe.d.ts.map +1 -0
- package/types/lib/inventory/rootfsCerts.d.ts +27 -0
- package/types/lib/inventory/rootfsCerts.d.ts.map +1 -0
- package/types/lib/inventory/source.d.ts +28 -0
- package/types/lib/inventory/source.d.ts.map +1 -1
- package/types/lib/inventory/spdx.d.ts +15 -0
- package/types/lib/inventory/spdx.d.ts.map +1 -1
- package/types/lib/inventory/traceRunner.d.ts +4 -1
- package/types/lib/inventory/traceRunner.d.ts.map +1 -1
- package/types/lib/inventory/tracedCrypto.d.ts +22 -0
- package/types/lib/inventory/tracedCrypto.d.ts.map +1 -1
- package/types/lib/managers/binary.d.ts +10 -0
- package/types/lib/managers/binary.d.ts.map +1 -1
- package/types/lib/managers/docker.d.ts +12 -0
- package/types/lib/managers/docker.d.ts.map +1 -1
- package/types/lib/parsers/email.d.ts +19 -0
- package/types/lib/parsers/email.d.ts.map +1 -0
- package/types/lib/parsers/largeJson.d.ts +13 -0
- package/types/lib/parsers/largeJson.d.ts.map +1 -1
- package/types/lib/server/server.d.ts +8 -0
- package/types/lib/server/server.d.ts.map +1 -1
- package/types/lib/stages/postgen/annotator.d.ts.map +1 -1
- package/types/lib/stages/postgen/introspection/reflect.d.ts.map +1 -1
- package/types/lib/stages/postgen/ruleEngine.d.ts +7 -4
- package/types/lib/stages/postgen/ruleEngine.d.ts.map +1 -1
- package/types/lib/stages/postgen/specVersionCompat.d.ts.map +1 -1
- package/types/lib/stages/pregen/pregen.d.ts +14 -1
- package/types/lib/stages/pregen/pregen.d.ts.map +1 -1
- package/types/lib/validator/bomValidator.d.ts.map +1 -1
package/data/remediations.json
CHANGED
|
@@ -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",
|
|
@@ -615,6 +639,30 @@
|
|
|
615
639
|
},
|
|
616
640
|
"docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
|
|
617
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
|
+
},
|
|
618
666
|
"clojure.lein.missing": {
|
|
619
667
|
"ecosystem": "clojure",
|
|
620
668
|
"kind": "fallback.engaged",
|
|
@@ -672,6 +720,30 @@
|
|
|
672
720
|
},
|
|
673
721
|
"docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
|
|
674
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
|
+
},
|
|
675
747
|
"swift.toolchain.missing": {
|
|
676
748
|
"ecosystem": "swift",
|
|
677
749
|
"kind": "fallback.engaged",
|
|
@@ -718,11 +790,35 @@
|
|
|
718
790
|
},
|
|
719
791
|
"docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
|
|
720
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
|
+
},
|
|
721
817
|
"dotnet.sdk.missing": {
|
|
722
818
|
"ecosystem": "csharp",
|
|
723
819
|
"kind": "evidence.degraded",
|
|
724
820
|
"impact": "components",
|
|
725
|
-
"title": ".NET
|
|
821
|
+
"title": "The .NET runtime dosai needs is not installed, so dotnet slices are degraded",
|
|
726
822
|
"targetTier": "resolved",
|
|
727
823
|
"actions": [
|
|
728
824
|
{
|
|
@@ -749,6 +845,30 @@
|
|
|
749
845
|
},
|
|
750
846
|
"docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
|
|
751
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
|
+
},
|
|
752
872
|
"dosai.semantics.persist-failed": {
|
|
753
873
|
"ecosystem": "csharp",
|
|
754
874
|
"kind": "evidence.degraded",
|
|
@@ -773,6 +893,48 @@
|
|
|
773
893
|
},
|
|
774
894
|
"docs": "https://cyclonedx.github.io/cdxgen/#/EVINSE"
|
|
775
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
|
+
},
|
|
776
938
|
"cocoa.pods.missing": {
|
|
777
939
|
"ecosystem": "cocoa",
|
|
778
940
|
"kind": "fallback.engaged",
|
|
@@ -796,6 +958,54 @@
|
|
|
796
958
|
},
|
|
797
959
|
"docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
|
|
798
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
|
+
},
|
|
799
1009
|
"ruby.build-deps.missing": {
|
|
800
1010
|
"ecosystem": "ruby",
|
|
801
1011
|
"kind": "evidence.degraded",
|
|
@@ -1048,6 +1258,54 @@
|
|
|
1048
1258
|
},
|
|
1049
1259
|
"docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES?id=php"
|
|
1050
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
|
+
},
|
|
1051
1309
|
"dart.pub-get-needed": {
|
|
1052
1310
|
"ecosystem": "dart",
|
|
1053
1311
|
"kind": "evidence.degraded",
|
|
@@ -1143,6 +1401,30 @@
|
|
|
1143
1401
|
},
|
|
1144
1402
|
"docs": "https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES"
|
|
1145
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
|
+
},
|
|
1146
1428
|
"policy.secure-mode": {
|
|
1147
1429
|
"ecosystem": "generic",
|
|
1148
1430
|
"kind": "evidence.degraded",
|
|
@@ -141,21 +141,22 @@
|
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
- id: CBC-001
|
|
144
|
-
name: "Expired
|
|
145
|
-
description: "
|
|
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 $
|
|
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 }}'
|
|
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
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Go binary toolchain rules
|
|
2
|
+
# Category: go-security
|
|
3
|
+
# Evaluates the cdx:go:buildVersion property recorded for executable file
|
|
4
|
+
# components during container/rootfs scans.
|
|
5
|
+
|
|
6
|
+
- id: GO-TLS-001
|
|
7
|
+
name: "Go binary built with a toolchain that lacks the CVE-2026-111943 distrust list"
|
|
8
|
+
description: "Go links its standard library statically, so a binary keeps the trust behaviour of the toolchain it was built with. Releases before go1.26.10, and go1.27.0 through go1.27.2, lack the eight SPKI hashes Go uses to distrust the CVE-2026-111943 intermediate CA keys, and older release lines (1.25 and earlier) will never receive them. Release candidates of newer lines (go1.28rc1) already carry the fix."
|
|
9
|
+
severity: high
|
|
10
|
+
category: go-security
|
|
11
|
+
dry-run-support: full
|
|
12
|
+
condition: |
|
|
13
|
+
components[
|
|
14
|
+
type = 'file'
|
|
15
|
+
and $hasProp($, 'cdx:go:buildVersion')
|
|
16
|
+
and (
|
|
17
|
+
$prop($, 'cdx:go:buildVersion') = 'unknown-pre-1.18'
|
|
18
|
+
or (
|
|
19
|
+
$m := $match($prop($, 'cdx:go:buildVersion'), /^go(\d+)\.(\d+)(?:\.(\d+))?/);
|
|
20
|
+
$m != null
|
|
21
|
+
and $number($m.groups[0]) = 1
|
|
22
|
+
and (
|
|
23
|
+
$number($m.groups[1]) < 26
|
|
24
|
+
or (
|
|
25
|
+
$number($m.groups[1]) = 26
|
|
26
|
+
and ($m.groups[2] != null ? $number($m.groups[2]) : 0) < 10
|
|
27
|
+
)
|
|
28
|
+
or (
|
|
29
|
+
$number($m.groups[1]) = 27
|
|
30
|
+
and ($m.groups[2] != null ? $number($m.groups[2]) : 0) < 3
|
|
31
|
+
)
|
|
32
|
+
)
|
|
33
|
+
)
|
|
34
|
+
)
|
|
35
|
+
]
|
|
36
|
+
location: |
|
|
37
|
+
{
|
|
38
|
+
"bomRef": $firstNonEmpty($."bom-ref", bom.serialNumber)
|
|
39
|
+
}
|
|
40
|
+
message: "Go binary '{{ name }}' was built with {{ $prop($, 'cdx:go:buildVersion') }}, which lacks the CVE-2026-111943 distrust list"
|
|
41
|
+
mitigation: "Rebuild the binary with go1.26.10, go1.27.3 or newer so its crypto/x509 rejects the distrusted intermediate CA keys."
|
|
42
|
+
evidence: |
|
|
43
|
+
{
|
|
44
|
+
"buildVersion": $prop($, 'cdx:go:buildVersion'),
|
|
45
|
+
"srcFile": $prop($, 'internal:SrcFile')
|
|
46
|
+
}
|