From 34774a0e104dd1ab0d6a8b9a44fdb0b4b26fa6a7 Mon Sep 17 00:00:00 2001 From: David Dooling <141646279+whalelines@users.noreply.github.com> Date: Tue, 21 Nov 2023 10:24:59 -0600 Subject: [PATCH] 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 --- syft/pkg/cataloger/binary/cataloger_test.go | 36 ++++++++++++++++++ .../cataloger/binary/default_classifiers.go | 6 ++- .../positive/redis-server-7.0.14/redis-server | Bin 0 -> 890 bytes .../redis-server-7.2.3-amd64/redis-server | Bin 0 -> 831 bytes .../redis-server-7.2.3-arm64/redis-server | Bin 0 -> 816 bytes 5 files changed, 40 insertions(+), 2 deletions(-) create mode 100755 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-7.0.14/redis-server create mode 100755 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-7.2.3-amd64/redis-server create mode 100755 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-7.2.3-arm64/redis-server diff --git a/syft/pkg/cataloger/binary/cataloger_test.go b/syft/pkg/cataloger/binary/cataloger_test.go index 77d727c25..086807cf4 100644 --- a/syft/pkg/cataloger/binary/cataloger_test.go +++ b/syft/pkg/cataloger/binary/cataloger_test.go @@ -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", diff --git a/syft/pkg/cataloger/binary/default_classifiers.go b/syft/pkg/cataloger/binary/default_classifiers.go index 24cb43219..9b4b2dc2c 100644 --- a/syft/pkg/cataloger/binary/default_classifiers.go +++ b/syft/pkg/cataloger/binary/default_classifiers.go @@ -58,8 +58,10 @@ var defaultClassifiers = []classifier{ { Class: "redis-binary", FileGlob: "**/redis-server", - EvidenceMatcher: fileContentsVersionMatcher( - `(?s)payload %5.*(?P\d.\d\.\d\d*?)[a-z0-9]{12}-[0-9]{19}`), + EvidenceMatcher: evidenceMatchers( + fileContentsVersionMatcher(`(?s)payload %5.*?(?P\d.\d\.\d\d*)[a-z0-9]{12,15}-[0-9]{19}`), + fileContentsVersionMatcher(`(?s)\x00(?P\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:*:*:*:*:*:*:*:*"), diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-7.0.14/redis-server b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-7.0.14/redis-server new file mode 100755 index 0000000000000000000000000000000000000000..68dae86a938b5803d1c6dd158d7a19d1e170570c GIT binary patch literal 890 zcmbtSO-~y!5H*Dhf!;W9=)qOBRU&1hO~gltniWx%^b+92Ioh?SVAj|x+shIz{0{nS z`ZId#mHdijoFziyNGv^Bn)lwkvBr<%>EzSK23eg=5;wMU19v7VB`7N%U_gUj(Z*^r zmpb7zI4l~q{6XYWSoaHDGjG%HcZn>(-)LN3SZI0WJ6#5Iq_bL;$y&AhXHlK5fxR`n zKKBb^>jOAI&pzU84K&yA`rPNIMfL9k=%d%~X9rQQ^lw#F|3}g5A%T?l$Q^g0PWK=! zgyflUHc>p)_hI+wq~DLC!{gpc9}xwv)Fu<^s>28__{v?=ct|5Mx|oFi_aGB8DL^^$ zqfnXBrHV`mn~4eT2e*g?RF z4&%b24%1l}8~8m-rDoYI*On{`xt!0^xdTgwe!#IY+R)Mnha*yKSx@XEeh|f~9%^~LOjZk* zwZ>m_RXo5^)5v0>rj$XC?Ca70IwbTZgIJvlwMUD25Gj4NGyFYqnUA0L`IU!-1eaK$ zedu4wT&lU^67mbp-HSnKzKu<{P2+Vc?Qff9SS#PQ=uMv7?h~_+=$~pI_h4BfD Cq3A~d literal 0 HcmV?d00001 diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-7.2.3-arm64/redis-server b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-7.2.3-arm64/redis-server new file mode 100755 index 0000000000000000000000000000000000000000..15ad151acb127f38b9e7cc55e09a8cf56d5981e6 GIT binary patch literal 816 zcma)4OK#gR5LMb$e2Ur7mReh|9mjDDxVsbxkVT3j2arU{AwY@hP;@ODL66nj6`i3a zwB40}^yd3!9>E_EPoLjiT}8urAN`Ejd;T?|zi`_*XM{0F#=CTx-pEaUmv4%Eyc^;mh+YR-SleaRCTXC*4)pmDfA%qmr}9V!P0bE19$%o_%qn*inleM4*8 zp^ndXRJD}xCg&;lZdJhfS))v-) zLbSMriExu}S^r(1esB|r(=>(3q5^U9kaw+eK%s>AIDcV${%01%!X;3mt)MWP#BD*i zl)lJeG5bVoHrByz2Xh#YNtA1!RK0Is