Class: Brakeman::CheckSend
- Inherits:
-
BaseCheck
- Object
- BaseCheck
- Brakeman::CheckSend
- Defined in:
- lib/brakeman/checks/check_send.rb
Overview
Checks if user supplied data is passed to send
Instance Method Summary collapse
-
#get_send(exp) ⇒ Object
Recursively check call chain for send call.
- #process_result(result) ⇒ Object
- #run_check ⇒ Object
Instance Method Details
#get_send(exp) ⇒ Object
Recursively check call chain for send call
38 39 40 41 42 43 44 45 46 |
# File 'lib/brakeman/checks/check_send.rb', line 38 def get_send exp if call? exp if @send_methods.include? exp.method return exp else get_send exp.target end end end |
#process_result(result) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/brakeman/checks/check_send.rb', line 19 def process_result result return unless original? result send_call = get_send result[:call] process_call_args send_call process send_call.target if input = has_immediate_user_input?(send_call.first_arg) warn :result => result, :warning_type => "Dangerous Send", :warning_code => :dangerous_send, :message => "User controlled method execution", :user_input => input, :confidence => :high, :cwe_id => [77] end end |
#run_check ⇒ Object
9 10 11 12 13 14 15 16 17 |
# File 'lib/brakeman/checks/check_send.rb', line 9 def run_check @send_methods = [:send, :try, :__send__, :public_send] Brakeman.debug("Finding instances of #send") calls = tracker.find_call :methods => @send_methods, :nested => true calls.each do |call| process_result call end end |