Skip to content

Commit fbc1a83

Browse files
fix(amazon): save system files for pkgs containing amzn in src (aquasecurity#5951)
Signed-off-by: knqyf263 <[email protected]> Co-authored-by: knqyf263 <[email protected]>
1 parent 260aa28 commit fbc1a83

File tree

2 files changed

+66
-3
lines changed

2 files changed

+66
-3
lines changed

pkg/fanal/analyzer/pkg/rpm/rpm.go

+10-3
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ func (a rpmPkgAnalyzer) listPkgs(db RPMDB) (types.Packages, []string, error) {
133133
// Check if the package is vendor-provided.
134134
// If the package is not provided by vendor, the installed files should not be skipped.
135135
var files []string
136-
if packageProvidedByVendor(pkg.Vendor) {
136+
if packageProvidedByVendor(pkg) {
137137
files, err = pkg.InstalledFileNames()
138138
if err != nil {
139139
return nil, nil, xerrors.Errorf("unable to get installed files: %w", err)
@@ -235,12 +235,19 @@ func splitFileName(filename string) (name, ver, rel string, err error) {
235235
return name, ver, rel, nil
236236
}
237237

238-
func packageProvidedByVendor(pkgVendor string) bool {
238+
func packageProvidedByVendor(pkg *rpmdb.PackageInfo) bool {
239+
if pkg.Vendor == "" {
240+
// Official Amazon packages may not contain `Vendor` field:
241+
// https://github.com/aquasecurity/trivy/issues/5887
242+
return strings.Contains(pkg.Release, "amzn")
243+
}
244+
239245
for _, vendor := range osVendors {
240-
if strings.HasPrefix(pkgVendor, vendor) {
246+
if strings.HasPrefix(pkg.Vendor, vendor) {
241247
return true
242248
}
243249
}
250+
244251
return false
245252
}
246253

pkg/fanal/analyzer/pkg/rpm/rpm_test.go

+56
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,62 @@ func Test_rpmPkgAnalyzer_listPkgs(t *testing.T) {
165165
"/lib64/libm-2.27.so",
166166
},
167167
},
168+
{
169+
name: "Amazon official package without `Vendor` field",
170+
mock: mock{
171+
packages: []*rpmdb.PackageInfo{
172+
{
173+
Name: "curl-minimal",
174+
Version: "8.3.0",
175+
Release: "1.amzn2023.0.2",
176+
Arch: "aarch64",
177+
SourceRpm: "curl-8.3.0-1.amzn2023.0.2.src.rpm",
178+
DirNames: []string{
179+
"/usr/bin/",
180+
"/usr/lib/",
181+
"/usr/lib/.build-id/",
182+
"/usr/lib/.build-id/aa/",
183+
"/usr/share/man/man1/",
184+
},
185+
DirIndexes: []int32{0, 1, 2, 3, 4},
186+
BaseNames: []string{
187+
"curl",
188+
".build-id",
189+
"aa",
190+
"d987ea9bc1c73706d12c7a143ee792117851ff",
191+
"curl.1.gz",
192+
},
193+
Vendor: "",
194+
},
195+
},
196+
},
197+
wantPkgs: types.Packages{
198+
{
199+
200+
Name: "curl-minimal",
201+
Version: "8.3.0",
202+
Release: "1.amzn2023.0.2",
203+
Arch: "aarch64",
204+
SrcName: "curl",
205+
SrcVersion: "8.3.0",
206+
SrcRelease: "1.amzn2023.0.2",
207+
InstalledFiles: []string{
208+
"/usr/bin/curl",
209+
"/usr/lib/.build-id",
210+
"/usr/lib/.build-id/aa",
211+
"/usr/lib/.build-id/aa/d987ea9bc1c73706d12c7a143ee792117851ff",
212+
"/usr/share/man/man1/curl.1.gz",
213+
},
214+
},
215+
},
216+
wantFiles: []string{
217+
"/usr/bin/curl",
218+
"/usr/lib/.build-id",
219+
"/usr/lib/.build-id/aa",
220+
"/usr/lib/.build-id/aa/d987ea9bc1c73706d12c7a143ee792117851ff",
221+
"/usr/share/man/man1/curl.1.gz",
222+
},
223+
},
168224
{
169225
name: "invalid source rpm",
170226
mock: mock{

0 commit comments

Comments
 (0)