Sha256: 258727b211d7564242d4100e3b4cce906dbaeb1405ae21357458052f26a924a8
Contents?: true
Size: 1.62 KB
Versions: 3
Compression:
Stored size: 1.62 KB
Contents
require 'brakeman/checks/base_check' class Brakeman::CheckSymbolDoS < Brakeman::BaseCheck Brakeman::Checks.add_optional self UNSAFE_METHODS = [:to_sym, :literal_to_sym, :intern, :symbolize_keys, :symbolize_keys!] @description = "Checks for symbol denial of service" def run_check return if rails_version and rails_version > "5.0.0" tracker.find_call(:methods => UNSAFE_METHODS, :nested => true).each do |result| check_unsafe_symbol_creation(result) end end def check_unsafe_symbol_creation result return unless original? result call = result[:call] if result[:method] == :literal_to_sym args = call.select { |e| sexp? e } else args = [call.target] end if input = args.map{ |arg| has_immediate_user_input?(arg) }.compact.first confidence = CONFIDENCE[:high] elsif input = args.map{ |arg| include_user_input?(arg) }.compact.first confidence = CONFIDENCE[:med] end if confidence return if safe_parameter? input.match message = "Symbol conversion from unsafe string (#{friendly_type_of input})" warn :result => result, :warning_type => "Denial of Service", :warning_code => :unsafe_symbol_creation, :message => message, :user_input => input, :confidence => confidence end end def safe_parameter? input if call? input if node_type? input.target, :params input.method == :[] and symbol? input.first_arg and [:controller, :action].include? input.first_arg.value else safe_parameter? input.target end else false end end end
Version data entries
3 entries across 3 versions & 3 rubygems
Version | Path |
---|---|
brakeman-min-3.3.3 | lib/brakeman/checks/check_symbol_dos.rb |
brakeman-lib-3.3.3 | lib/brakeman/checks/check_symbol_dos.rb |
brakeman-3.3.3 | lib/brakeman/checks/check_symbol_dos.rb |