26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
# File 'lib/cpe.rb', line 26
def vulns
if $intrigue_basedir
nvd_data_directory = "#{$intrigue_basedir}/data/nvd"
else
nvd_data_directory = "#{File.expand_path('data/nvd', File.dirname(__FILE__))}"
end
return [] unless @version
vulns = []
files = [
"#{nvd_data_directory}/nvdcve-1.0-2018.json",
"#{nvd_data_directory}/nvdcve-1.0-2017.json",
"#{nvd_data_directory}/nvdcve-1.0-2016.json",
"#{nvd_data_directory}/nvdcve-1.0-2015.json",
"#{nvd_data_directory}/nvdcve-1.0-2014.json",
"#{nvd_data_directory}/nvdcve-1.0-2013.json",
"#{nvd_data_directory}/nvdcve-1.0-2012.json",
"#{nvd_data_directory}/nvdcve-1.0-2011.json"
]
files.each do |f|
puts "DEBUG Checking file: #{f}"
next unless File.exist? f
json = ::JSON.parse(File.open(f,"r").read)
json["CVE_Items"].each do |v|
cve = v["cve"]
unless cve["affects"] && cve["affects"]["vendor"] && cve["affects"]["vendor"]["vendor_data"]
next
end
vendors = cve["affects"]["vendor"]["vendor_data"].map{|x| x["vendor_name"].downcase }
unless vendors.uniq.include? @vendor.downcase
next
end
cve["affects"]["vendor"]["vendor_data"].each do |vd|
vd["product"]["product_data"].each do |p|
p["version"]["version_data"].each do |vd|
next unless p["product_name"].downcase == @product.downcase
if vd["version_value"] >= @version
cve_id = cve["CVE_data_meta"]["ID"]
if cve["problemtype"] && cve["problemtype"]["problemtype_data"].first
cwe_id = cve["problemtype"]["problemtype_data"].first["description"].first["value"]
end
if v["impact"]
cvss_v2_score = v["impact"]["baseMetricV2"]["cvssV2"]["baseScore"]
cvss_v2_vector = v["impact"]["baseMetricV2"]["cvssV2"]["vectorString"]
if v["impact"]["baseMetricV3"]
cvss_v3_score = v["impact"]["baseMetricV3"]["cvssV3"]["baseScore"]
cvss_v3_vector = v["impact"]["baseMetricV3"]["cvssV3"]["vectorString"]
end
end
vuln = {
cve_id: cve_id,
cwe_id: cwe_id,
cvss_v2: {score: cvss_v2_score, vector: cvss_v2_vector },
cvss_v3: {score: cvss_v3_score, vector: cvss_v3_vector }
}
vulns << vuln
end
end
end
end
end
end
vulns.uniq
end
|