Sha256: c859e5f565bea91a0be5d17b38ba3cad1324029e59e1e8bea677b39f228dfda1
Contents?: true
Size: 1.97 KB
Versions: 2
Compression:
Stored size: 1.97 KB
Contents
require 'railroader/checks/base_check' class Railroader::CheckModelSerialize < Railroader::BaseCheck Railroader::Checks.add self @description = "Report uses of serialize in versions vulnerable to CVE-2013-0277" def run_check @upgrade_version = case when version_between?("2.0.0", "2.3.16") "2.3.17" when version_between?("3.0.0", "3.0.99") "3.2.11" else nil end return unless @upgrade_version tracker.models.each do |_name, model| check_for_serialize model end end #High confidence warning on serialized, unprotected attributes. #Medium confidence warning for serialized, protected attributes. def check_for_serialize model if serialized_attrs = model.options[:serialize] attrs = Set.new serialized_attrs.each do |arglist| arglist.each do |arg| attrs << arg if symbol? arg end end if unsafe_attrs = model.attr_accessible attrs.delete_if { |attr| not unsafe_attrs.include? attr.value } elsif protected_attrs = model.attr_protected safe_attrs = Set.new protected_attrs.each do |arglist| arglist.each do |arg| safe_attrs << arg if symbol? arg end end attrs.delete_if { |attr| safe_attrs.include? attr } end if attrs.empty? confidence = :medium else confidence = :high end warn :model => model.name, :warning_type => "Remote Code Execution", :warning_code => :CVE_2013_0277, :message => "Serialized attributes are vulnerable in Rails #{rails_version}, upgrade to #{@upgrade_version} or patch.", :confidence => confidence, :link => "https://groups.google.com/d/topic/rubyonrails-security/KtmwSbEpzrU/discussion", :file => model.file, :line => model.top_line end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
railroader-4.3.5 | lib/railroader/checks/check_model_serialize.rb |
railroader-4.3.4 | lib/railroader/checks/check_model_serialize.rb |