lib/codesake/dawn/kb/ruby_version_check.rb in codesake-dawn-1.0.6 vs lib/codesake/dawn/kb/ruby_version_check.rb in codesake-dawn-1.1.0.rc1

- old
+ new

@@ -1,39 +1,40 @@ module Codesake module Dawn module Kb module RubyVersionCheck include BasicCheck - # Array of hashes in the {:engine=>"ruby", :version=>"1.9.3", :patchlevel=>"p342"} form attr_accessor :safe_rubies # Hash in the {:engine=>"ruby", :version=>"1.9.3", :patchlevel=>"p342"} form attr_accessor :detected_ruby def vuln? vv_a = [] vv_p = [] vv_e = [] vp = false + ve = false @safe_rubies.each do |ss| vv_e << ss[:engine] vv_a << ss[:version] vv_p << ss[:patchlevel].split("p")[1].to_i end + version_check = Codesake::Dawn::Kb::VersionCheck.new(:safe=>vv_a,:detected=>detected_ruby[:version], :debug=>@debug, :save_major=>true) + vengine = self.is_vulnerable_engine?(detected_ruby[:engine], vv_e) - vv = self.is_vulnerable_version?(detected_ruby[:version], vv_a) - ve = false + vv = version_check.vuln? - ve = self.is_same_version?(detected_ruby[:version], vv_a) + ve = self.is_same_version?(detected_ruby[:version], vv_a) vp = is_vulnerable_patchlevel?(detected_ruby[:version], detected_ruby[:patchlevel]) - debug_me("D:#{self.name}, VENGINE=#{vengine}, VV=#{vv}, VE=#{ve}, VP=#{vp}->#{vv && vengine}, #{(ve && vp && vengine )}") - debug_me("S:#{@safe_rubies}") - debug_me("DD:#{@detected_ruby}") + debug_me("#{__FILE__}@#{__LINE__}: check: #{self.name}, engine is vulnerable?=#{vengine}, version is vulnerable?=#{vv}, is same version?=#{ve}, is_vulnerable_patchlevel?=#{vp}->#{vv && vengine}, #{(ve && vp && vengine )}") + debug_me("#{__FILE__}@#{__LINE__}: safe ruby is: #{@safe_rubies}") + debug_me("#{__FILE__}@#{__LINE__}: detected ruby is: #{@detected_ruby}") if ( vv && vengine) @status = vp if ve @@ -42,17 +43,15 @@ @status = (ve && vp && vengine ) end debug_me("STATUS:#{@status}") self.evidences << "#{@detected_ruby[:engine]} v#{@detected_ruby[:version]}-#{@detected_ruby[:patchlevel]} detected" if @status - return @status # return true if ( vv && vengine ) # return (ve && vp && vengine ) end - def is_vulnerable_engine?(target, fixes = []) fixes.each do |f| return true if f == target end false @@ -67,18 +66,19 @@ end def is_vulnerable_patchlevel?(version, patchlevel) fixes = [] debug_me "is_vulnerable_patchlevel? called with VERSION=#{version} and PLEVEL=#{patchlevel}" - debug_me "SAFE_RUBIES=#{@safe_rubies}" @safe_rubies.each do |ss| fixes << ss[:patchlevel].split("p")[1].to_i if ss[:version] == version end debug_me "FIXES IS EMPTY" if fixes.empty? + debug_me "FIXES LIST IS #{fixes}" unless fixes.empty? return true if fixes.empty? - t = patchlevel.split("p")[1].to_i + t = patchlevel.split("p")[1].to_i if patchlevel.include? 'p' + t = patchlevel.to_i unless patchlevel.include? 'p' fixes.each do |f| debug_me "PATCHLEVEL FIXES = #{f}, PATCHLEVEL TARGET = #{t}" return true if f > t end false