Skip to content

Commit 1de3595

Browse files
authored
feat(nvd): improve ranges to include metadata in db_specific of CPE used to extract it (#5103)
This PR introduces various updates for handling NVD and CVE databases, specifically related to the location of range metadata in database_specific, and parsing and cache improvements. **Range & Affected Parsing (NVD & CVE5)**: - Fix logic for nested unresolved ranges and duplicate unresolved ranges. - Handle edge cases where `introduced` version equals `lessThanOrEqual` (meaning it’s a specific version, not a range). - Address how unresolved signatures are handled during processing. - Extracted and moved `MergeRangesAndCreateAffected` logic to a common package for reuse. - Introduced a new `RangeWithMetadata` struct to hold unresolved ranges and where they were extracted from, so they can be put in the database_specific. - Created a new function for explicitly building Git osvschema ranges, so they always have the type value attached. - unresolved ranges are grouped by CPE for easier understanding and use. **CVE5 Interoperability**: - Changed CVE5 logic to also use `RangeWithMetadata` to be consistent across records. **References & Links**: - Implemented caching for canonicalizing links to improve processing performance and avoid 429s.
1 parent 9f1260e commit 1de3595

40 files changed

Lines changed: 12046 additions & 537 deletions

vulnfeeds/cmd/combine-to-osv/main.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -320,9 +320,7 @@ func pickAffectedInformation(cve5Affected []*osvschema.Affected, nvdAffected []*
320320
}
321321

322322
if c5Intro != "" || c5Fixed != "" {
323-
newRange := conversion.BuildVersionRange(c5Intro, "", c5Fixed)
324-
newRange.Repo = repo
325-
newRange.Type = osvschema.Range_GIT // Preserve the repo
323+
newRange := conversion.BuildGitVersionRange(c5Intro, "", c5Fixed, repo)
326324
newAffectedRanges = append(newAffectedRanges, newRange)
327325
} else {
328326
newAffectedRanges = cveRanges

vulnfeeds/cmd/converters/cve/nvd-cve-osv/main.go

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,21 +32,6 @@ var (
3232
cpuProfile = flag.String("cpuprofile", "", "Path to write cpu profile to file (default = no output)")
3333
)
3434

35-
func loadCPEDictionary(productToRepo *c.VPRepoCache, f string) error {
36-
data, err := os.ReadFile(f)
37-
if err != nil {
38-
return err
39-
}
40-
41-
var tempMap c.VendorProductToRepoMap
42-
if err := json.Unmarshal(data, &tempMap); err != nil {
43-
return err
44-
}
45-
productToRepo.Initialize(tempMap)
46-
47-
return nil
48-
}
49-
5035
func main() {
5136
flag.Parse()
5237
if !slices.Contains([]string{"OSV", "PackageInfo"}, *outFormat) {
@@ -82,7 +67,7 @@ func main() {
8267

8368
vpRepoCache := c.NewVPRepoCache()
8469
if *parsedCPEDictionary != "" {
85-
err = loadCPEDictionary(vpRepoCache, *parsedCPEDictionary)
70+
err = c.LoadCPEDictionary(vpRepoCache, *parsedCPEDictionary)
8671
if err != nil {
8772
logger.Fatal("Failed to load parsed CPE dictionary", slog.Any("err", err))
8873
}

0 commit comments

Comments
 (0)