fix(trivy-to-vuls): converts even if null vulnerabilities (#1201)
This commit is contained in:
@@ -22,6 +22,9 @@ func Parse(vulnJSON []byte, scanResult *models.ScanResult) (result *models.ScanR
|
||||
vulnInfos := models.VulnInfos{}
|
||||
uniqueLibraryScannerPaths := map[string]models.LibraryScanner{}
|
||||
for _, trivyResult := range trivyResults {
|
||||
if IsTrivySupportedOS(trivyResult.Type) {
|
||||
overrideServerData(scanResult, &trivyResult)
|
||||
}
|
||||
for _, vuln := range trivyResult.Vulnerabilities {
|
||||
if _, ok := vulnInfos[vuln.VulnerabilityID]; !ok {
|
||||
vulnInfos[vuln.VulnerabilityID] = models.VulnInfo{
|
||||
@@ -89,16 +92,6 @@ func Parse(vulnJSON []byte, scanResult *models.ScanResult) (result *models.ScanR
|
||||
FixState: fixState,
|
||||
FixedIn: vuln.FixedVersion,
|
||||
})
|
||||
|
||||
// overwrite every time if os package
|
||||
scanResult.Family = trivyResult.Type
|
||||
scanResult.ServerName = trivyResult.Target
|
||||
scanResult.Optional = map[string]interface{}{
|
||||
"trivy-target": trivyResult.Target,
|
||||
}
|
||||
scanResult.ScannedAt = time.Now()
|
||||
scanResult.ScannedBy = "trivy"
|
||||
scanResult.ScannedVia = "trivy"
|
||||
} else {
|
||||
// LibraryScanの結果
|
||||
vulnInfo.LibraryFixedIns = append(vulnInfo.LibraryFixedIns, models.LibraryFixedIn{
|
||||
@@ -174,3 +167,14 @@ func IsTrivySupportedOS(family string) bool {
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func overrideServerData(scanResult *models.ScanResult, trivyResult *report.Result) {
|
||||
scanResult.Family = trivyResult.Type
|
||||
scanResult.ServerName = trivyResult.Target
|
||||
scanResult.Optional = map[string]interface{}{
|
||||
"trivy-target": trivyResult.Target,
|
||||
}
|
||||
scanResult.ScannedAt = time.Now()
|
||||
scanResult.ScannedBy = "trivy"
|
||||
scanResult.ScannedVia = "trivy"
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
|
||||
"github.com/aquasecurity/trivy/pkg/types"
|
||||
"github.com/d4l3k/messagediff"
|
||||
|
||||
"github.com/future-architect/vuls/models"
|
||||
)
|
||||
|
||||
@@ -3205,6 +3206,33 @@ func TestParse(t *testing.T) {
|
||||
Optional: map[string]interface{}{"trivy-target": "knqyf263/vuln-image:1.2.3 (alpine 3.7.1)"},
|
||||
},
|
||||
},
|
||||
"found-no-vulns": {
|
||||
vulnJSON: []byte(`[
|
||||
{
|
||||
"Target": "no-vuln-image:v1 (debian 9.13)",
|
||||
"Type": "debian",
|
||||
"Vulnerabilities": null
|
||||
}
|
||||
]
|
||||
`),
|
||||
scanResult: &models.ScanResult{
|
||||
JSONVersion: 1,
|
||||
ServerUUID: "uuid",
|
||||
ScannedCves: models.VulnInfos{},
|
||||
},
|
||||
expected: &models.ScanResult{
|
||||
JSONVersion: 1,
|
||||
ServerUUID: "uuid",
|
||||
ServerName: "no-vuln-image:v1 (debian 9.13)",
|
||||
Family: "debian",
|
||||
ScannedBy: "trivy",
|
||||
ScannedVia: "trivy",
|
||||
ScannedCves: models.VulnInfos{},
|
||||
Packages: models.Packages{},
|
||||
LibraryScanners: models.LibraryScanners{},
|
||||
Optional: map[string]interface{}{"trivy-target": "no-vuln-image:v1 (debian 9.13)"},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for testcase, v := range cases {
|
||||
|
||||
Reference in New Issue
Block a user