Fixed Version compare for issue #179
This commit is contained in:
@@ -3144,6 +3144,7 @@
|
|||||||
<reference>http://blog.sucuri.net/2013/04/update-wp-super-cache-and-w3tc-immediately-remote-code-execution-vulnerability-disclosed.html</reference>
|
<reference>http://blog.sucuri.net/2013/04/update-wp-super-cache-and-w3tc-immediately-remote-code-execution-vulnerability-disclosed.html</reference>
|
||||||
<metasploit>exploits/unix/webapp/php_wordpress_total_cache</metasploit>
|
<metasploit>exploits/unix/webapp/php_wordpress_total_cache</metasploit>
|
||||||
<type>RCE</type>
|
<type>RCE</type>
|
||||||
|
<fixed_in>0.9.2.9</fixed_in>
|
||||||
</vulnerability>
|
</vulnerability>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|
||||||
|
|||||||
@@ -51,6 +51,7 @@
|
|||||||
<xs:element name="reference" type="uritype" maxOccurs="unbounded" minOccurs="1"/>
|
<xs:element name="reference" type="uritype" maxOccurs="unbounded" minOccurs="1"/>
|
||||||
<xs:element name="metasploit" type="stringtype" maxOccurs="unbounded" minOccurs="0"/>
|
<xs:element name="metasploit" type="stringtype" maxOccurs="unbounded" minOccurs="0"/>
|
||||||
<xs:element name="type" type="typetype"/>
|
<xs:element name="type" type="typetype"/>
|
||||||
|
<xs:element name="fixed_in" type="stringtype" minOccurs="0"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
|
|
||||||
|
|||||||
@@ -5,20 +5,22 @@ require 'vulnerability/output'
|
|||||||
class Vulnerability
|
class Vulnerability
|
||||||
include Vulnerability::Output
|
include Vulnerability::Output
|
||||||
|
|
||||||
attr_accessor :title, :references, :type, :metasploit_modules
|
attr_accessor :title, :references, :type, :fixed_in, :metasploit_modules
|
||||||
|
|
||||||
#
|
#
|
||||||
# @param [ String ] title The title of the vulnerability
|
# @param [ String ] title The title of the vulnerability
|
||||||
# @param [ String ] type The type of the vulnerability
|
# @param [ String ] type The type of the vulnerability
|
||||||
# @param [ Array ] references References urls
|
# @param [ Array ] references References urls
|
||||||
# @param [ Array ] metasploit_modules Metasploit modules for the vulnerability
|
# @param [ Array ] metasploit_modules Metasploit modules for the vulnerability
|
||||||
|
# @param [ String ] fixed_in Vuln fixed in Version X
|
||||||
#
|
#
|
||||||
# @return [ Vulnerability ]
|
# @return [ Vulnerability ]
|
||||||
def initialize(title, type, references, metasploit_modules = [])
|
def initialize(title, type, references, metasploit_modules = [], fixed_in)
|
||||||
@title = title
|
@title = title
|
||||||
@type = type
|
@type = type
|
||||||
@references = references
|
@references = references
|
||||||
@metasploit_modules = metasploit_modules
|
@metasploit_modules = metasploit_modules
|
||||||
|
@fixed_in = fixed_in
|
||||||
end
|
end
|
||||||
|
|
||||||
# @param [ Vulnerability ] other
|
# @param [ Vulnerability ] other
|
||||||
@@ -26,7 +28,11 @@ class Vulnerability
|
|||||||
# @return [ Boolean ]
|
# @return [ Boolean ]
|
||||||
# :nocov:
|
# :nocov:
|
||||||
def ==(other)
|
def ==(other)
|
||||||
title == other.title && type == other.type && references == other.references
|
title == other.title &&
|
||||||
|
type == other.type &&
|
||||||
|
references == other.references &&
|
||||||
|
fixed_in == other.fixed_in &&
|
||||||
|
metasploit_modules == other.metasploit_modules
|
||||||
end
|
end
|
||||||
# :nocov:
|
# :nocov:
|
||||||
|
|
||||||
@@ -40,7 +46,8 @@ class Vulnerability
|
|||||||
xml_node.search('title').text,
|
xml_node.search('title').text,
|
||||||
xml_node.search('type').text,
|
xml_node.search('type').text,
|
||||||
xml_node.search('reference').map(&:text),
|
xml_node.search('reference').map(&:text),
|
||||||
xml_node.search('metasploit').map(&:text)
|
xml_node.search('metasploit').map(&:text),
|
||||||
|
xml_node.search('fixed_in').text
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,18 @@ class WpItem
|
|||||||
vulnerabilities = Vulnerabilities.new
|
vulnerabilities = Vulnerabilities.new
|
||||||
|
|
||||||
xml.xpath(vulns_xpath).each do |node|
|
xml.xpath(vulns_xpath).each do |node|
|
||||||
vulnerabilities << Vulnerability.load_from_xml_node(node)
|
vuln = Vulnerability.load_from_xml_node(node)
|
||||||
|
if vuln
|
||||||
|
if version && vuln.fixed_in && !vuln.fixed_in.empty?
|
||||||
|
if VersionCompare::is_newer_or_same?(vuln.fixed_in, version)
|
||||||
|
# "Hooray, fixed"
|
||||||
|
else
|
||||||
|
vulnerabilities << vuln
|
||||||
|
end
|
||||||
|
else
|
||||||
|
vulnerabilities << vuln
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
vulnerabilities
|
vulnerabilities
|
||||||
end
|
end
|
||||||
|
|||||||
7
lib/common/version_compare.rb
Normal file
7
lib/common/version_compare.rb
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# encoding: UTF-8
|
||||||
|
|
||||||
|
class VersionCompare
|
||||||
|
def self.is_newer_or_same?(version1, version2)
|
||||||
|
(version1 == version2) || (Gem::Version.new(version1) < Gem::Version.new(version2))
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user