2019-05-12 23:56:12 -05:00
|
|
|
class CveReport
|
2019-06-12 01:20:44 -05:00
|
|
|
attr_accessor :filename, :file
|
|
|
|
# 1st way:
|
|
|
|
# expects a hash with the following key:values # {:filename => "nvdcve-1.0-2002.json.gz",
|
|
|
|
# :json => {"CVE_data_type"=>"CVE",
|
|
|
|
# "CVE_Items"= etc...etc...etc...}
|
|
|
|
# 2nd way:
|
|
|
|
# a json gz compressed file of cve metadata downloaded from nvd
|
|
|
|
# TO ADD: 1st way.
|
2019-05-12 23:56:12 -05:00
|
|
|
|
2019-06-12 01:20:44 -05:00
|
|
|
def initialize(filename)
|
|
|
|
@filename = filename
|
|
|
|
@file = from_file
|
|
|
|
end
|
|
|
|
|
|
|
|
def cve_ids
|
2019-05-12 23:56:12 -05:00
|
|
|
# return a list of cve data from the given filename in an array.
|
2019-06-12 01:20:44 -05:00
|
|
|
file["CVE_Items"].map do |item|
|
|
|
|
item["cve"]["CVE_data_meta"]["ID"]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def cve_id?(cve_id)
|
|
|
|
cve_ids.include?(cve_id)
|
|
|
|
end
|
|
|
|
|
|
|
|
def cve(cve_id)
|
|
|
|
find(cve_id)
|
|
|
|
end
|
|
|
|
|
|
|
|
def cves
|
|
|
|
file["CVE_Items"].map do |cve|
|
|
|
|
cve
|
|
|
|
end
|
2019-05-12 23:56:12 -05:00
|
|
|
end
|
|
|
|
|
2019-06-12 01:20:44 -05:00
|
|
|
def from_file
|
|
|
|
Zlib::GzipReader.open(filename) do |gz|
|
|
|
|
JSON.parse(gz.read)
|
|
|
|
end
|
2019-05-12 23:56:12 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def find(cve_id)
|
2019-06-12 21:54:14 -05:00
|
|
|
result = cves.select do |cve|
|
2019-06-12 01:20:44 -05:00
|
|
|
cve["cve"]["CVE_data_meta"]["ID"] == cve_id
|
|
|
|
end
|
2019-06-12 21:54:14 -05:00
|
|
|
if result.count == 1
|
|
|
|
result.first
|
|
|
|
else
|
|
|
|
"Could not find valid CVE for: #{cve}"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def description(cve_id)
|
|
|
|
cve = find(cve_id)
|
|
|
|
cve['cve']['description']['description_data'].first['value']
|
|
|
|
end
|
|
|
|
|
|
|
|
def description_hash(cve_id)
|
|
|
|
description_value = description(cve_id)
|
|
|
|
{ :cve_id => cve_id, :description => description_value }
|
|
|
|
end
|
|
|
|
|
|
|
|
def reference_data(cve_id)
|
|
|
|
cve = find(cve_id)
|
|
|
|
cve['cve']['references']['reference_data']
|
2019-05-11 17:33:04 -05:00
|
|
|
end
|
2019-07-22 01:49:12 -05:00
|
|
|
end
|