Yak Shaving

just me

A little Ruby

with 2 comments

I wrote a little ruby a while back to interpret the data from National Vulnerability Database

require 'net/http'
require 'rexml/document'

include REXML

#url = 'http://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-recent.xml'

# get the XML data as a string
#xml_data = Net::HTTP.get_response(URI.parse(url)).body

# for download
#doc = REXML::Document.new(xml_data)

file = File.open("recent.xml")

doc = Document.new(file)

doc.elements.each('nvd/entry') do |entry|
	print entry.elements["vuln:cve-id"].text
	print " ==> "
	if entry.elements["vuln:cwe"]
		puts entry.elements["vuln:cwe"].attributes['id']
	else
		puts ""
	end
end

Written by channam

February 24th, 2009 at 3:01 pm

Posted in Uncategorized

2 Responses to 'A little Ruby'

Subscribe to comments with RSS or TrackBack to 'A little Ruby'.

  1. Thanks. Was looking for this. Added a few more details

    To go through the product list
    if elem.elements["vuln:vulnerable-software-list"]
    elem.elements.each(“vuln:vulnerable-software-list/vuln:product”) { |prod|
    puts prod.text
    }
    else
    puts “no product detail”
    end
    And to get the CVSS details
    if elem.elements["vuln:cvss/cvss:base_metrics"]
    puts elem.elements["vuln:cvss/cvss:base_metrics/cvss:score"].text
    puts elem.elements["vuln:cvss/cvss:base_metrics/cvss:access-vector"].text
    puts elem.elements["vuln:cvss/cvss:base_metrics/cvss:access-complexity"].text
    puts elem.elements["vuln:cvss/cvss:base_metrics/cvss:authentication"].text
    puts elem.elements["vuln:cvss/cvss:base_metrics/cvss:confidentiality-impact"].text
    puts elem.elements["vuln:cvss/cvss:base_metrics/cvss:integrity-impact"].text
    puts elem.elements["vuln:cvss/cvss:base_metrics/cvss:availability-impact"].text
    else
    puts “no cvss”
    end

    Salil

    3 Mar 11 at 5:44 am

  2. Wow, thanks I had no idea anyone would find this useful. Thanks for the contribution.

    channam

    3 Jun 11 at 11:48 pm

Leave a Reply