Enhance redis binary classifier (#2329)

Allow existing matcher to match host identifiers longer than 12
characters. The binaries distributed by redis have the version before
payload, so add a matcher for that. Add test fixtures covering these
scenarios.

Signed-off-by: David Dooling <david.dooling@docker.com>
This commit is contained in:
David Dooling 2023-11-21 10:24:59 -06:00 committed by GitHub
parent 1c582f0aa5
commit 34774a0e10
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 40 additions and 2 deletions

View file

@ -312,6 +312,42 @@ func Test_Cataloger_DefaultClassifiers_PositiveCases(t *testing.T) {
Metadata: metadata("redis-binary"),
},
},
{
name: "positive-redis-7.0.14",
fixtureDir: "test-fixtures/classifiers/positive/redis-server-7.0.14",
expected: pkg.Package{
Name: "redis",
Version: "7.0.14",
Type: "binary",
PURL: "pkg:generic/redis@7.0.14",
Locations: locations("redis-server"),
Metadata: metadata("redis-binary"),
},
},
{
name: "positive-redis-7.2.3-amd64",
fixtureDir: "test-fixtures/classifiers/positive/redis-server-7.2.3-amd64",
expected: pkg.Package{
Name: "redis",
Version: "7.2.3",
Type: "binary",
PURL: "pkg:generic/redis@7.2.3",
Locations: locations("redis-server"),
Metadata: metadata("redis-binary"),
},
},
{
name: "positive-redis-7.2.3-arm64",
fixtureDir: "test-fixtures/classifiers/positive/redis-server-7.2.3-arm64",
expected: pkg.Package{
Name: "redis",
Version: "7.2.3",
Type: "binary",
PURL: "pkg:generic/redis@7.2.3",
Locations: locations("redis-server"),
Metadata: metadata("redis-binary"),
},
},
{
name: "positive-libpython3.7.so",
fixtureDir: "test-fixtures/classifiers/positive/python-binary-lib-3.7",

View file

@ -58,8 +58,10 @@ var defaultClassifiers = []classifier{
{
Class: "redis-binary",
FileGlob: "**/redis-server",
EvidenceMatcher: fileContentsVersionMatcher(
`(?s)payload %5.*(?P<version>\d.\d\.\d\d*?)[a-z0-9]{12}-[0-9]{19}`),
EvidenceMatcher: evidenceMatchers(
fileContentsVersionMatcher(`(?s)payload %5.*?(?P<version>\d.\d\.\d\d*)[a-z0-9]{12,15}-[0-9]{19}`),
fileContentsVersionMatcher(`(?s)\x00(?P<version>\d.\d\.\d\d*)[a-z0-9]{12}-[0-9]{19}\x00.*?payload %5`),
),
Package: "redis",
PURL: mustPURL("pkg:generic/redis@version"),
CPEs: singleCPE("cpe:2.3:a:redislabs:redis:*:*:*:*:*:*:*:*"),