diff --git a/syft/pkg/cataloger/binary/capabilities.yaml b/syft/pkg/cataloger/binary/capabilities.yaml index 39871208f..a0ed0c35d 100644 --- a/syft/pkg/cataloger/binary/capabilities.yaml +++ b/syft/pkg/cataloger/binary/capabilities.yaml @@ -603,6 +603,26 @@ catalogers: cpes: - cpe:2.3:a:elixir-lang:elixir:*:*:*:*:*:*:*:* type: BinaryPkg + - method: glob + criteria: + - '**/grafana' + packages: + - class: grafana-binary + name: grafana + purl: pkg:generic/grafana + cpes: + - cpe:2.3:a:grafana:grafana:*:*:*:*:*:*:*:* + type: BinaryPkg + - method: glob + criteria: + - '**/grafana-server' + packages: + - class: grafana-binary + name: grafana + purl: pkg:generic/grafana + cpes: + - cpe:2.3:a:grafana:grafana:*:*:*:*:*:*:*:* + type: BinaryPkg - method: glob criteria: - '**/java' diff --git a/syft/pkg/cataloger/binary/classifier_cataloger_test.go b/syft/pkg/cataloger/binary/classifier_cataloger_test.go index abac67912..d56878f7b 100644 --- a/syft/pkg/cataloger/binary/classifier_cataloger_test.go +++ b/syft/pkg/cataloger/binary/classifier_cataloger_test.go @@ -1430,6 +1430,94 @@ func Test_Cataloger_PositiveCases(t *testing.T) { }, }, }, + { + logicalFixture: "grafana/12.3.1/linux-amd64", + expected: pkg.Package{ + Name: "grafana", + Version: "12.3.1", + Type: "binary", + PURL: "pkg:generic/grafana@12.3.1", + Locations: locations("grafana"), + Metadata: metadata("grafana-binary"), + }, + }, + { + logicalFixture: "grafana/12.0.0/linux-amd64", + expected: pkg.Package{ + Name: "grafana", + Version: "12.0.0", + Type: "binary", + PURL: "pkg:generic/grafana@12.0.0", + Locations: locations("grafana"), + Metadata: metadata("grafana-binary"), + }, + }, + { + logicalFixture: "grafana/11.0.0/linux-amd64", + expected: pkg.Package{ + Name: "grafana", + Version: "11.0.0", + Type: "binary", + PURL: "pkg:generic/grafana@11.0.0", + Locations: locations("grafana"), + Metadata: metadata("grafana-binary"), + }, + }, + { + logicalFixture: "grafana/10.4.19/linux-amd64", + expected: pkg.Package{ + Name: "grafana", + Version: "10.4.19", + Type: "binary", + PURL: "pkg:generic/grafana@10.4.19", + Locations: locations("grafana"), + Metadata: metadata("grafana-binary"), + }, + }, + { + logicalFixture: "grafana/9.5.21/linux-amd64", + expected: pkg.Package{ + Name: "grafana", + Version: "9.5.21", + Type: "binary", + PURL: "pkg:generic/grafana@9.5.21", + Locations: locations("grafana"), + Metadata: metadata("grafana-binary"), + }, + }, + { + logicalFixture: "grafana/9.0.0/linux-amd64", + expected: pkg.Package{ + Name: "grafana", + Version: "9.0.0", + Type: "binary", + PURL: "pkg:generic/grafana@9.0.0", + Locations: locations("grafana-server"), + Metadata: metadata("grafana-binary"), + }, + }, + { + logicalFixture: "grafana/7.5.17/linux-amd64", + expected: pkg.Package{ + Name: "grafana", + Version: "7.5.17", + Type: "binary", + PURL: "pkg:generic/grafana@7.5.17", + Locations: locations("grafana-server"), + Metadata: metadata("grafana-binary"), + }, + }, + { + logicalFixture: "grafana/6.7.6/linux-amd64", + expected: pkg.Package{ + Name: "grafana", + Version: "6.7.6", + Type: "binary", + PURL: "pkg:generic/grafana@6.7.6", + Locations: locations("grafana-server"), + Metadata: metadata("grafana-binary"), + }, + }, } for _, test := range tests { diff --git a/syft/pkg/cataloger/binary/classifiers.go b/syft/pkg/cataloger/binary/classifiers.go index 4d2189639..4e7c13ff7 100644 --- a/syft/pkg/cataloger/binary/classifiers.go +++ b/syft/pkg/cataloger/binary/classifiers.go @@ -697,6 +697,36 @@ func DefaultClassifiers() []binutils.Classifier { PURL: mustPURL("pkg:generic/elixir@version"), CPEs: singleCPE("cpe:2.3:a:elixir-lang:elixir:*:*:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource), }, + { + Class: "grafana-binary", + FileGlob: "**/grafana", + EvidenceMatcher: binutils.MatchAny( + // [NUL][NUL][NUL][NUL]release-12.3.1[NUL][NUL][NUL][NUL] + m.FileContentsVersionMatcher(`\x00+release-(?P[0-9]{2}\.[0-9]+\.[0-9]+)\x00+`), + // HEAD[NUL][NUL][NUL][NUL]12.0.0[NUL][NUL]$a + // 11.0.0[NUL][NUL]$a + m.FileContentsVersionMatcher(`(?P[0-9]{2}\.[0-9]+\.[0-9]+)\x00+\$a`), + // [NUL]0xDC0xBF10.4.19[NUL] + m.FileContentsVersionMatcher(`\x00.(?P10\.[0-9]+\.[0-9]+)\x00`), + // 9.5.21[NUL][NUL]v9.5.x[NUL][NUL][NUL][NUL][NUL][NUL]$a + m.FileContentsVersionMatcher(`(?P9\.[0-9]+\.[0-9]+)\x00\x00v`), + ), + Package: "grafana", + PURL: mustPURL("pkg:generic/grafana@version"), + CPEs: singleCPE("cpe:2.3:a:grafana:grafana:*:*:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource), + }, + { + Class: "grafana-binary", + FileGlob: "**/grafana-server", + EvidenceMatcher: m.FileContentsVersionMatcher( + // HEAD[NUL][NUL][NUL][NUL]9.0.0[NUL]:[NUL] + // HEAD[NUL][NUL][NUL][NUL]:[NUL][NUL][NUL][NUL][NUL][NUL][NUL]7.5.17[NUL][NUL][NUL][NUL] + // HEAD[NUL][NUL][NUL][NUL]m[NUL]...[NUL][NUL]6.7.6[NUL][NUL][NUL].[NUL][NUL][NUL][NUL][NUL][NUL][NUL]: + `HEAD\x00+.*\x00+(?P[0-9]\.[0-9]+\.[0-9]+)\x00+`), + Package: "grafana", + PURL: mustPURL("pkg:generic/grafana@version"), + CPEs: singleCPE("cpe:2.3:a:grafana:grafana:*:*:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource), + }, } return append(classifiers, defaultJavaClassifiers()...) diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/10.4.19/linux-amd64/grafana b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/10.4.19/linux-amd64/grafana new file mode 100644 index 000000000..e2123942a Binary files /dev/null and b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/10.4.19/linux-amd64/grafana differ diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/11.0.0/linux-amd64/grafana b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/11.0.0/linux-amd64/grafana new file mode 100644 index 000000000..37d9b83d2 Binary files /dev/null and b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/11.0.0/linux-amd64/grafana differ diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/12.0.0/linux-amd64/grafana b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/12.0.0/linux-amd64/grafana new file mode 100644 index 000000000..39bc1111e Binary files /dev/null and b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/12.0.0/linux-amd64/grafana differ diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/12.3.1/linux-amd64/grafana b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/12.3.1/linux-amd64/grafana new file mode 100644 index 000000000..d8ca660f4 Binary files /dev/null and b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/12.3.1/linux-amd64/grafana differ diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/6.7.6/linux-amd64/grafana-server b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/6.7.6/linux-amd64/grafana-server new file mode 100644 index 000000000..77d3c9313 Binary files /dev/null and b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/6.7.6/linux-amd64/grafana-server differ diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/7.5.17/linux-amd64/grafana-server b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/7.5.17/linux-amd64/grafana-server new file mode 100644 index 000000000..a734cee01 Binary files /dev/null and b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/7.5.17/linux-amd64/grafana-server differ diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/9.0.0/linux-amd64/grafana-server b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/9.0.0/linux-amd64/grafana-server new file mode 100644 index 000000000..86a7d9ed7 Binary files /dev/null and b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/9.0.0/linux-amd64/grafana-server differ diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/9.5.21/linux-amd64/grafana b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/9.5.21/linux-amd64/grafana new file mode 100644 index 000000000..bc51c844e Binary files /dev/null and b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/grafana/9.5.21/linux-amd64/grafana differ diff --git a/syft/pkg/cataloger/binary/test-fixtures/config.yaml b/syft/pkg/cataloger/binary/test-fixtures/config.yaml index f2a5638a2..a2c012f1b 100644 --- a/syft/pkg/cataloger/binary/test-fixtures/config.yaml +++ b/syft/pkg/cataloger/binary/test-fixtures/config.yaml @@ -846,3 +846,74 @@ from-images: paths: - /usr/local/lib/python3.11/site-packages/opencv_contrib_python.libs/libavcodec-9aae324f.so.59.37.100 + - name: grafana + version: 12.3.1 + images: + - ref: grafana/grafana:12.3.1@sha256:7c064e627d9cb50c3485c9ded5ca0222de89a08e41403322a0c3ca6f1777a8d1 + platform: linux/amd64 + paths: + - /usr/share/grafana/bin/grafana + + - name: grafana + version: 12.0.0 + images: + - ref: grafana/grafana:12.0.0@sha256:884f0f140669a5b9dccee1baece011a3fa5dd1951f1ba158b03de8ad1d178380 + platform: linux/amd64 + paths: + - /usr/share/grafana/bin/grafana + + - name: grafana + version: 11.0.0 + images: + - ref: grafana/grafana:11.0.0@sha256:a80bc3848cf5d4b2958ea25dbeb36fa9442ef4be8c73fe4bff11340307c32919 + platform: linux/amd64 + paths: + - /usr/share/grafana/bin/grafana + + - name: grafana + version: 10.4.19 + images: + - ref: grafana/grafana:10.4.19@sha256:388cb75aa7ab40af6766f7a8db73c90abfbfb646bf8208e86f7198d2c9530793 + platform: linux/amd64 + paths: + - /usr/share/grafana/bin/grafana + + - name: grafana + version: 9.5.21 + images: + - ref: grafana/grafana:9.5.21@sha256:439f57822d2daa899c0a04420488fd7c638c1d41d5db417563692ed0bbbfbb9c + platform: linux/amd64 + paths: + - /usr/share/grafana/bin/grafana + + - name: grafana + version: 9.4.0 + images: + - ref: grafana/grafana:9.4.0-beta1@sha256:d0060bcf84f0a0897e7c6c7e1b8740d89d10bf55b2dd45ba45942d36e40cdcc7 + platform: linux/amd64 + paths: + - /usr/share/grafana/bin/grafana-server + + - name: grafana + version: 9.0.0 + images: + - ref: grafana/grafana:9.0.0@sha256:1fdfc1f6feb47c0007ab59abdc5310493649367d9de1be27cf0e18ff529ca463 + platform: linux/amd64 + paths: + - /usr/share/grafana/bin/grafana-server + + - name: grafana + version: 7.5.17 + images: + - ref: grafana/grafana:7.5.17@sha256:6d4ab5ab5031f2725635522c28aa9917c6e614c49513a3f5c864900b868ea79a + platform: linux/amd64 + paths: + - /usr/share/grafana/bin/grafana-server + + - name: grafana + version: 6.7.6 + images: + - ref: grafana/grafana:6.7.6@sha256:7ee99c7f0835f1023b3a56c275da8bb37068ab9fcd5e33378c65435928d54dd0 + platform: linux/amd64 + paths: + - /usr/share/grafana/bin/grafana-server