Skip to content
This repository was archived by the owner on Jan 18, 2019. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 10 additions & 8 deletions commands/scan.go
Original file line number Diff line number Diff line change
Expand Up @@ -430,15 +430,17 @@ func (p *ScanCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{})
return subcommands.ExitFailure
}

Log.Info("Reporting...")
filtered := scanResults.FilterByCvssOver()
//Log.Info("FILTERED RESULTS: ", filtered)
for _, w := range reports {
if err := w.Write(filtered); err != nil {
Log.Fatalf("Failed to report, err: %s", err)
return subcommands.ExitFailure
/*
Log.Info("Reporting...")
filtered := scanResults.FilterByCvssOver()
//Log.Info("FILTERED RESULTS: ", filtered)
for _, w := range reports {
if err := w.Write(filtered); err != nil {
Log.Fatalf("Failed to report, err: %s", err)
return subcommands.ExitFailure
}
}
}
*/

return subcommands.ExitSuccess
}
65 changes: 65 additions & 0 deletions models/models.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ type ScanHistory struct {

// ScanResults is slice of ScanResult.
type ScanResults []ScanResult
type ScanPackageResults []ScanPackageResult

// Len implement Sort Interface
func (s ScanResults) Len() int {
Expand Down Expand Up @@ -70,6 +71,23 @@ func (s ScanResults) FilterByCvssOver() (filtered ScanResults) {
return
}

type ScanPackageResult struct {
ScannedAt time.Time

ServerName string // TOML Section key
// Hostname string
Family string
Release string

Container Container

Platform Platform

// Fqdn string
// NWLinks []NWLink
Packages []PackageInfoCVE
}

// ScanResult has the result of scanned CVE information.
type ScanResult struct {
gorm.Model `json:"-"`
Expand All @@ -94,6 +112,31 @@ type ScanResult struct {
Optional [][]interface{} `gorm:"-"`
}

func (r ScanResult) ByPackage() ScanPackageResult {
packMap := make(map[PackageInfo][]string)
allCVEs := append(append(r.KnownCves, r.UnknownCves...), r.IgnoredCves...)
for _, cve := range allCVEs {
for _, pack := range cve.Packages {
packMap[pack] = append(packMap[pack], cve.CveDetail.CveID)
}
}
packs := []PackageInfoCVE{}
for pack, cves := range packMap {
packs = append(packs, pack.WithCVEs(cves))
}

return ScanPackageResult{
ScannedAt: r.ScannedAt,
ServerName: r.ServerName,
Family: r.Family,
Release: r.Release,
Container: r.Container,
Platform: r.Platform,
Packages: packs,
}

}

// ServerInfo returns server name one line
func (r ScanResult) ServerInfo() string {
hostinfo := ""
Expand Down Expand Up @@ -285,6 +328,28 @@ type PackageInfo struct {
NewRelease string
}

func (p PackageInfo) WithCVEs(cves []string) PackageInfoCVE {
return PackageInfoCVE{
Name: p.Name,
Version: p.Version,
Release: p.Release,
NewVersion: p.NewVersion,
NewRelease: p.NewRelease,
CVEs: cves,
}
}

type PackageInfoCVE struct {
Name string
Version string
Release string

NewVersion string
NewRelease string

CVEs []string
}

// ToStringCurrentVersion returns package name-version-release
func (p PackageInfo) ToStringCurrentVersion() string {
str := p.Name
Expand Down
12 changes: 4 additions & 8 deletions scan/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@ package scan
import (
"fmt"
"regexp"
"sort"
"strings"
"time"

"github.com/Sirupsen/logrus"
"github.com/future-architect/vuls/config"
"github.com/future-architect/vuls/cveapi"
"github.com/future-architect/vuls/models"
cve "github.com/kotakanbe/go-cve-dictionary/models"
)

type base struct {
Expand Down Expand Up @@ -239,7 +239,7 @@ func (l *base) convertToModel() (models.ScanResult, error) {
for _, icve := range l.getServerInfo().IgnoreCves {
if icve == p.CveDetail.CveID {
ignoredCves = append(ignoredCves, models.CveInfo{
CveDetail: p.CveDetail,
CveDetail: cve.CveDetail{CveID: p.CveID},
Packages: p.Packs,
DistroAdvisories: p.DistroAdvisories,
})
Expand All @@ -254,7 +254,7 @@ func (l *base) convertToModel() (models.ScanResult, error) {
// unscoredCves
if p.CveDetail.CvssScore(config.Conf.Lang) <= 0 {
unscoredCves = append(unscoredCves, models.CveInfo{
CveDetail: p.CveDetail,
CveDetail: cve.CveDetail{CveID: p.CveID},
Packages: p.Packs,
DistroAdvisories: p.DistroAdvisories,
})
Expand All @@ -269,7 +269,7 @@ func (l *base) convertToModel() (models.ScanResult, error) {

// scoredCves
cve := models.CveInfo{
CveDetail: p.CveDetail,
CveDetail: cve.CveDetail{CveID: p.CveID},
Packages: p.Packs,
DistroAdvisories: p.DistroAdvisories,
CpeNames: cpenames,
Expand All @@ -282,10 +282,6 @@ func (l *base) convertToModel() (models.ScanResult, error) {
Name: l.ServerInfo.Container.Name,
}

sort.Sort(scoredCves)
sort.Sort(unscoredCves)
sort.Sort(ignoredCves)

return models.ScanResult{
ServerName: l.ServerInfo.ServerName,
ScannedAt: time.Now(),
Expand Down
13 changes: 6 additions & 7 deletions scan/debian.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ import (

"github.com/future-architect/vuls/cache"
"github.com/future-architect/vuls/config"
"github.com/future-architect/vuls/cveapi"
"github.com/future-architect/vuls/models"
"github.com/future-architect/vuls/util"
cve "github.com/kotakanbe/go-cve-dictionary/models"
)

// inherit OsTypeInterface
Expand Down Expand Up @@ -489,18 +489,17 @@ func (o *debian) scanPackageCveInfos(unsecurePacks []models.PackageInfo) (cvePac
}
o.log.Debugf("%d Cves are found. cves: %v", len(cveIDs), cveIDs)

o.log.Info("Fetching CVE details...")
cveDetails, err := cveapi.CveClient.FetchCveDetails(cveIDs)
if err != nil {
return nil, err
}
o.log.Info("Done")

for _, detail := range cveDetails {
// Range over the IDs, don't worry about going to remote because fuck it
for _, id := range cveIDs {
cvePacksList = append(cvePacksList, CvePacksInfo{
CveID: detail.CveID,
CveDetail: detail,
Packs: cvePackages[detail.CveID],
CveID: id,
CveDetail: cve.CveDetail{},
Packs: cvePackages[id],
// CvssScore: cinfo.CvssScore(conf.Lang),
})
}
Expand Down
4 changes: 2 additions & 2 deletions scan/serverapi.go
Original file line number Diff line number Diff line change
Expand Up @@ -567,13 +567,13 @@ func scanVulnByCpeName() []error {
}

// GetScanResults returns Scan Resutls
func GetScanResults() (results models.ScanResults, err error) {
func GetScanResults() (results models.ScanPackageResults, err error) {
for _, s := range servers {
r, err := s.convertToModel()
if err != nil {
return results, fmt.Errorf("Failed converting to model: %s", err)
}
results = append(results, r)
results = append(results, r.ByPackage())
}
return
}