From 605391114ccb0685ea236951c12261003cefe5dc Mon Sep 17 00:00:00 2001 From: witchcraze <67056980+witchcraze@users.noreply.github.com> Date: Wed, 6 May 2026 23:54:20 +0900 Subject: [PATCH] add ingress-nginx classifier (#4857) Signed-off-by: witchcraze --- syft/pkg/cataloger/binary/capabilities.yaml | 10 ++ .../binary/classifier_cataloger_test.go | 99 ++++++++++++++++++ syft/pkg/cataloger/binary/classifiers.go | 23 ++++ .../linux-amd64/nginx-ingress-controller | Bin 0 -> 369 bytes .../linux-amd64/nginx-ingress-controller | Bin 0 -> 919 bytes .../linux-amd64/nginx-ingress-controller | Bin 0 -> 369 bytes .../linux-amd64/nginx-ingress-controller | Bin 0 -> 369 bytes .../linux-amd64/nginx-ingress-controller | Bin 0 -> 369 bytes .../linux-amd64/nginx-ingress-controller | Bin 0 -> 369 bytes .../linux-amd64/nginx-ingress-controller | Bin 0 -> 369 bytes .../linux-amd64/nginx-ingress-controller | Bin 0 -> 369 bytes .../linux-amd64/nginx-ingress-controller | Bin 0 -> 369 bytes .../pkg/cataloger/binary/testdata/config.yaml | 71 +++++++++++++ 13 files changed, 203 insertions(+) create mode 100644 syft/pkg/cataloger/binary/testdata/classifiers/snippets/nginx-ingress-controller/0.33.0/linux-amd64/nginx-ingress-controller create mode 100644 syft/pkg/cataloger/binary/testdata/classifiers/snippets/nginx-ingress-controller/0.34.0/linux-amd64/nginx-ingress-controller create mode 100644 syft/pkg/cataloger/binary/testdata/classifiers/snippets/nginx-ingress-controller/1.0.0-alpha.2/linux-amd64/nginx-ingress-controller create mode 100644 syft/pkg/cataloger/binary/testdata/classifiers/snippets/nginx-ingress-controller/1.11.8/linux-amd64/nginx-ingress-controller create mode 100644 syft/pkg/cataloger/binary/testdata/classifiers/snippets/nginx-ingress-controller/1.12.0-beta.0/linux-amd64/nginx-ingress-controller create mode 100644 syft/pkg/cataloger/binary/testdata/classifiers/snippets/nginx-ingress-controller/1.15.1/linux-amd64/nginx-ingress-controller create mode 100644 syft/pkg/cataloger/binary/testdata/classifiers/snippets/nginx-ingress-controller/1.2.0-beta.1/linux-amd64/nginx-ingress-controller create mode 100644 syft/pkg/cataloger/binary/testdata/classifiers/snippets/nginx-ingress-controller/1.7.1/linux-amd64/nginx-ingress-controller create mode 100644 syft/pkg/cataloger/binary/testdata/classifiers/snippets/nginx-ingress-controller/1.9.6/linux-amd64/nginx-ingress-controller diff --git a/syft/pkg/cataloger/binary/capabilities.yaml b/syft/pkg/cataloger/binary/capabilities.yaml index baebe2c93..b64362108 100644 --- a/syft/pkg/cataloger/binary/capabilities.yaml +++ b/syft/pkg/cataloger/binary/capabilities.yaml @@ -684,6 +684,16 @@ catalogers: cpes: - cpe:2.3:a:mongodb:mongodb:*:*:*:*:*:*:*:* type: BinaryPkg + - method: glob + criteria: + - '**/nginx-ingress-controller' + packages: + - class: ingress-nginx-binary + name: nginx-ingress-controller + purl: pkg:generic/nginx-ingress-controller + cpes: + - cpe:2.3:a:kubernetes:ingress-nginx:*:*:*:*:*:*:*:* + 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 05b25121a..d66cd393e 100644 --- a/syft/pkg/cataloger/binary/classifier_cataloger_test.go +++ b/syft/pkg/cataloger/binary/classifier_cataloger_test.go @@ -2227,6 +2227,105 @@ func Test_Cataloger_PositiveCases(t *testing.T) { Metadata: metadata("envoy-binary"), }, }, + { + logicalFixture: "nginx-ingress-controller/1.15.1/linux-amd64", + expected: pkg.Package{ + Name: "nginx-ingress-controller", + Version: "1.15.1", + Type: "binary", + PURL: "pkg:generic/nginx-ingress-controller@1.15.1", + Locations: locations("nginx-ingress-controller"), + Metadata: metadata("ingress-nginx-binary"), + }, + }, + { + logicalFixture: "nginx-ingress-controller/1.11.8/linux-amd64", + expected: pkg.Package{ + Name: "nginx-ingress-controller", + Version: "1.11.8", + Type: "binary", + PURL: "pkg:generic/nginx-ingress-controller@1.11.8", + Locations: locations("nginx-ingress-controller"), + Metadata: metadata("ingress-nginx-binary"), + }, + }, + { + logicalFixture: "nginx-ingress-controller/1.9.6/linux-amd64", + expected: pkg.Package{ + Name: "nginx-ingress-controller", + Version: "1.9.6", + Type: "binary", + PURL: "pkg:generic/nginx-ingress-controller@1.9.6", + Locations: locations("nginx-ingress-controller"), + Metadata: metadata("ingress-nginx-binary"), + }, + }, + { + logicalFixture: "nginx-ingress-controller/1.7.1/linux-amd64", + expected: pkg.Package{ + Name: "nginx-ingress-controller", + Version: "1.7.1", + Type: "binary", + PURL: "pkg:generic/nginx-ingress-controller@1.7.1", + Locations: locations("nginx-ingress-controller"), + Metadata: metadata("ingress-nginx-binary"), + }, + }, + { + logicalFixture: "nginx-ingress-controller/1.12.0-beta.0/linux-amd64", + expected: pkg.Package{ + Name: "nginx-ingress-controller", + Version: "1.12.0-beta.0", + Type: "binary", + PURL: "pkg:generic/nginx-ingress-controller@1.12.0-beta.0", + Locations: locations("nginx-ingress-controller"), + Metadata: metadata("ingress-nginx-binary"), + }, + }, + { + logicalFixture: "nginx-ingress-controller/1.2.0-beta.1/linux-amd64", + expected: pkg.Package{ + Name: "nginx-ingress-controller", + Version: "1.2.0-beta.1", + Type: "binary", + PURL: "pkg:generic/nginx-ingress-controller@1.2.0-beta.1", + Locations: locations("nginx-ingress-controller"), + Metadata: metadata("ingress-nginx-binary"), + }, + }, + { + logicalFixture: "nginx-ingress-controller/1.0.0-alpha.2/linux-amd64", + expected: pkg.Package{ + Name: "nginx-ingress-controller", + Version: "1.0.0-alpha.2", + Type: "binary", + PURL: "pkg:generic/nginx-ingress-controller@1.0.0-alpha.2", + Locations: locations("nginx-ingress-controller"), + Metadata: metadata("ingress-nginx-binary"), + }, + }, + { + logicalFixture: "nginx-ingress-controller/0.34.0/linux-amd64", + expected: pkg.Package{ + Name: "nginx-ingress-controller", + Version: "0.34.0", + Type: "binary", + PURL: "pkg:generic/nginx-ingress-controller@0.34.0", + Locations: locations("nginx-ingress-controller"), + Metadata: metadata("ingress-nginx-binary"), + }, + }, + { + logicalFixture: "nginx-ingress-controller/0.33.0/linux-amd64", + expected: pkg.Package{ + Name: "nginx-ingress-controller", + Version: "0.33.0", + Type: "binary", + PURL: "pkg:generic/nginx-ingress-controller@0.33.0", + Locations: locations("nginx-ingress-controller"), + Metadata: metadata("ingress-nginx-binary"), + }, + }, } for _, test := range tests { diff --git a/syft/pkg/cataloger/binary/classifiers.go b/syft/pkg/cataloger/binary/classifiers.go index 955a7bacd..56ae02545 100644 --- a/syft/pkg/cataloger/binary/classifiers.go +++ b/syft/pkg/cataloger/binary/classifiers.go @@ -911,6 +911,29 @@ func DefaultClassifiers() []binutils.Classifier { PURL: mustPURL("pkg:generic/mongodb@version"), CPEs: singleCPE("cpe:2.3:a:mongodb:mongodb:*:*:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource), }, + { + Class: "ingress-nginx-binary", + FileGlob: "**/nginx-ingress-controller", + EvidenceMatcher: binutils.MatchAny( + // [NUL][NUL]v1.15.1[NUL][NUL]@e[ETX][NUL][NUL][NUL][NUL]go1.26.1[NUL][NUL][NUL] + // �v1.15.1[NUL][NUL]�z[ETX][NUL][NUL][NUL][NUL]go1.24.4[NUL][NUL][NUL] + m.FileContentsVersionMatcher(`v(?P[0-9]+\.[0-9]+\.[0-9]+)\x00+.{0,50}go[0-9]+\.[0-9]+(\-(alpha|beta)\.[0-9])?\.[0-9]+\x00+`), + // �Lv1.9.6[NUL][NUL]$a�c[SOH][NUL][NUL][NUL] + // [NUL][NUL]v0.34.0[NUL]......�$a�...[NUL] + m.FileContentsVersionMatcher(`v(?P[0-9]+\.[0-9]+\.[0-9]+(\-(alpha|beta)\.[0-9])?)\x00+.{0,800}\$a.{0,10}\x00+`), + // [NUL][NUL]v1.7.1[NUL][NUL][NUL]...S=v[0-9]+\.[0-9]+\.[0-9]+(\-(alpha|beta)\.[0-9])?)\x00+.{0,100}S=v[0-9]+\.[0-9]+\.[0-9]+(\-(alpha|beta)\.[0-9])?)\x00+`), + // [NUL][NUL]v1.2.0-beta.1[NUL][NUL] + // [NUL][NUL]v1.0.0-alpha.2[NUL][NUL] + m.FileContentsVersionMatcher(`\x00+v(?P[0-9]+\.[0-9]+\.[0-9]+\-(alpha|beta)\.[0-9])\x00+`), + ), + Package: "nginx-ingress-controller", + PURL: mustPURL("pkg:generic/nginx-ingress-controller@version"), + CPEs: singleCPE("cpe:2.3:a:kubernetes:ingress-nginx:*:*:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource), + }, } return append(classifiers, defaultJavaClassifiers()...) diff --git a/syft/pkg/cataloger/binary/testdata/classifiers/snippets/nginx-ingress-controller/0.33.0/linux-amd64/nginx-ingress-controller b/syft/pkg/cataloger/binary/testdata/classifiers/snippets/nginx-ingress-controller/0.33.0/linux-amd64/nginx-ingress-controller new file mode 100644 index 0000000000000000000000000000000000000000..b0565bcc48c436d9270e6dd26a28700dd44f93b4 GIT binary patch literal 369 zcmYk1y-EW?6ouDzDhnTAAa%n0&(4yc(n=8W1oOLDS!Y9b(L`HY!AD4IBWZjEAHW9? zY%D|(ZEO^ctbrW3aL@hVa8K07K7%nY;=EhLeCF%AYpdAIsvEIu_HZZ^jc%xX7TBLD*mvx7HKQgB9Fq6;yD-q)ub)0@VsTnQ|*lDwSlO zdaF6H(i!eRC`!KxlbAE_uw;TDr~7b4Tdp} zBmkXG2bx9W;s2YksbE;Qs!rh=fn-bHKS}a8s7GlJwP0t9C&}){_1k6He|njJ96gK& pC;bI~Q_q9;z8YS>-Y!4yR>QCB_xl5LI6B|E*?&B{7`6Or^b0@BXuALa literal 0 HcmV?d00001 diff --git a/syft/pkg/cataloger/binary/testdata/classifiers/snippets/nginx-ingress-controller/0.34.0/linux-amd64/nginx-ingress-controller b/syft/pkg/cataloger/binary/testdata/classifiers/snippets/nginx-ingress-controller/0.34.0/linux-amd64/nginx-ingress-controller new file mode 100644 index 0000000000000000000000000000000000000000..de7a3c6415f9ab572d9950f45397d1801fc9ba59 GIT binary patch literal 919 zcmeH^J5B>J5QY~@HwX!k=qx2|BCpr$$F>}Rf)k8i$x4ei%C2}^i8FA36i{#jPQVqw zPMjtZN=v~=GvCboBg^&#xOWW>i#9yX+OSx=VVIddjO)JZ+#2=X4{mHQWt=IcIO<$j zjLQadLC_G|)yj=`OQ1Dxu(MQDf>5b|P|)5ROI00P(imrD#Y)L*2C@`{5hlS~WgrqP zagiGNwsZT#N@XnsWfZ)qsRt#sRbUMeNtq};<+P zKWQ|R>{BRdTGr`pUZ>?IbltpaQ@?4OCTvI>V;B08qT-w>hNKB;*{@1kAdoKA>viZK zRu+XUDT{(hZ6l%*sGPCf83mxUaRR|v2Ma)Sy4r> z%rh_1iBK7BS!JA*47iepvEY^Wj7!TI0tXeVC?xmRpeg_%5R&IPb?<$kBW~u3Q1|g-v@z>2jDf3U;zmU zHkJxM>+FnDRu^S`Ju2&BPHj7~P2J6#s-k(=IM-5_GNC|l6meKl zU3Alw0rIe|%h`;&lWB%3PMOS&0S$>kkvXLeQVv38j;yv5)K;JbB@lAMW$wjHNn3?ib^3RXIzjj#AaMplnX|N z*j`)Jvw2GMxlMJgD8VA1z_ooDYY_8OYfyBZ5e=r0Ex=fLK}i@ z7k!J)FoVj+1U4VJZ+sGai83FUBVwCKQ3(i1YD&uM)>2KsX* z9eaw?SN$!WB9cvLdY%iB7fC1F@SKaBE$T4ZoPB#~9vvR+?~&b|?XAs?^|e_x`-_r# b`L|~ur)L+*dpQ1lP5l0Na-H}odw%-@kz!cP literal 0 HcmV?d00001 diff --git a/syft/pkg/cataloger/binary/testdata/classifiers/snippets/nginx-ingress-controller/1.15.1/linux-amd64/nginx-ingress-controller b/syft/pkg/cataloger/binary/testdata/classifiers/snippets/nginx-ingress-controller/1.15.1/linux-amd64/nginx-ingress-controller new file mode 100644 index 0000000000000000000000000000000000000000..ad0c253f6ef69c1d072e07332f3b62f73b1382db GIT binary patch literal 369 zcmZXPIZnht5Jf!S>v0K8Ypgm1{2z*cbr3n7NGg&`WKUSj%)ga(zCa0pCkS zp#z03wd#Ng0$CzVnvJ&EYv^)P3KX$JPpGW2T{IY+cadTUB2P14%>rodhLn@hu_H8@ zZBsXMFc!UHoe6{2&RJ5Ra|}v{l%hj~*bStG*lxFS_^2!|XUe+B+`d}gWTV8U;kM<& rxw+s~@6BHA2Clf*ZFl9LHk%f|^L?v#Kk+~R*YB!7YtMN6{JQxDQOHmT literal 0 HcmV?d00001 diff --git a/syft/pkg/cataloger/binary/testdata/classifiers/snippets/nginx-ingress-controller/1.7.1/linux-amd64/nginx-ingress-controller b/syft/pkg/cataloger/binary/testdata/classifiers/snippets/nginx-ingress-controller/1.7.1/linux-amd64/nginx-ingress-controller new file mode 100644 index 0000000000000000000000000000000000000000..e3176db5b352dd5cbb4330a20876719026d491d6 GIT binary patch literal 369 zcmX|6xlY4C5M5eVln7C*lnyD;9^S)Nj)EEq3Go45?`&dZ)=_MQL^SyUTI#gv((ns3 zbbJ5>1qFvV8X8crl)yCan9_OWh5wlHXK5AJV=<3F&4m`HL2n@|VZJ&%bV#-R8mG^Ml;&CG3RkFL>{J@o{%(j(WdU CuWX3` literal 0 HcmV?d00001 diff --git a/syft/pkg/cataloger/binary/testdata/classifiers/snippets/nginx-ingress-controller/1.9.6/linux-amd64/nginx-ingress-controller b/syft/pkg/cataloger/binary/testdata/classifiers/snippets/nginx-ingress-controller/1.9.6/linux-amd64/nginx-ingress-controller new file mode 100644 index 0000000000000000000000000000000000000000..1ce8eb722807e42a812caed23bedf089f292e1f5 GIT binary patch literal 369 zcmXv}yGjE=6dl_wto(q1*e1+-Gbq-Z30{3&z_VDzCh)jByfB0WXCv6_>f! zUP_;|v2I``W~5=v<;u&7LxRcCG0#vqt(ikBK`CjuG=gg(tiW_L1eRP{1>jYd^?E&8 zUPPe(Hfd}rrmxyFnpW8kA=g)HDW#aN$D=Jm?siZ4zzz%{o9?|zJ2Fp5L{|0w3;B9@ m{dil<7P!4x;CZy{enxazkmG+|($n_u{rBfyc`&-%c>Dvp?QEI= literal 0 HcmV?d00001 diff --git a/syft/pkg/cataloger/binary/testdata/config.yaml b/syft/pkg/cataloger/binary/testdata/config.yaml index ad63dfea6..e215088d1 100644 --- a/syft/pkg/cataloger/binary/testdata/config.yaml +++ b/syft/pkg/cataloger/binary/testdata/config.yaml @@ -1381,3 +1381,74 @@ from-images: platform: linux/amd64 paths: - /usr/local/bin/envoy + + - version: 1.15.1 + images: + - ref: registry.k8s.io/ingress-nginx/controller:v1.15.1@sha256:594ceea76b01c592858f803f9ff4d2cb40542cae2060410b2c95f75907d659e1 + platform: linux/amd64 + paths: + - /nginx-ingress-controller + + - version: 1.11.8 + images: + - ref: registry.k8s.io/ingress-nginx/controller:v1.11.8@sha256:695d79381ee6af00c7f5c9fd434f50851d7d32838ad5b2c507e416cf2084fc79 + platform: linux/amd64 + paths: + - /nginx-ingress-controller + + - version: 1.9.6 + images: + - ref: registry.k8s.io/ingress-nginx/controller:v1.9.6@sha256:1405cc613bd95b2c6edd8b2a152510ae91c7e62aea4698500d23b2145960ab9c + platform: linux/amd64 + paths: + - /nginx-ingress-controller + + - version: 1.8.4 + images: + - ref: registry.k8s.io/ingress-nginx/controller:v1.8.4@sha256:8d8ddf32b83ca3e74bd5f66369fa60d85353e18ff55fa7691b321aa4716f5ba9 + platform: linux/amd64 + paths: + - /nginx-ingress-controller + + - version: 1.7.1 + images: + - ref: registry.k8s.io/ingress-nginx/controller:v1.7.1@sha256:7244b95ea47bddcb8267c1e625fb163fc183ef55448855e3ac52a7b260a60407 + platform: linux/amd64 + paths: + - /nginx-ingress-controller + + - version: 1.12.0-beta.0 + images: + - ref: registry.k8s.io/ingress-nginx/controller:v1.12.0-beta.0@sha256:9724476b928967173d501040631b23ba07f47073999e80e34b120e8db5f234d5 + platform: linux/amd64 + paths: + - /nginx-ingress-controller + + - version: 1.2.0-beta.1 + images: + - ref: k8s.gcr.io/ingress-nginx/controller:v1.2.0-beta.1@sha256:7059739637c30865f74cae403fffa55c2cb6d9779cd15654480dd0e4f850d536 + platform: linux/amd64 + paths: + - /nginx-ingress-controller + + - version: 1.0.0-alpha.2 + images: + - ref: k8s.gcr.io/ingress-nginx/controller:v1.0.0-alpha.2@sha256:04a0ad3a1279c2a58898e789eed767eafa138ee1e5b9b23a988c6e8485cf958d + platform: linux/amd64 + paths: + - /nginx-ingress-controller + + - version: 0.34.0 + images: + - ref: k8s.gcr.io/ingress-nginx/controller:v0.34.0@sha256:5e0dcdc3ddb076f9ad988c624b8c459b53235ace26b9b18c192dedd3a038173c + platform: linux/amd64 + paths: + - /nginx-ingress-controller + + - version: 0.33.0 + images: + - ref: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.33.0@sha256:ad8a1e9e44b4deb6ded8d677e9f0014178294e579d0710a48bca1e05838f2473 + platform: linux/amd64 + paths: + - /nginx-ingress-controller +