Help us learn about your current experience with the documentation. Take the survey.

服务器端代码注入(Ruby)

Description

目标应用被发现存在代码注入漏洞。恶意攻击者可以注入任意 Ruby 代码在服务器上执行。这可能导致系统完全被攻破,通过访问存储的密钥、注入代码接管账户或执行操作系统命令。

Remediation

切勿将用户输入直接传递给将字符串数据作为代码评估的函数,例如 evalsendpublic_sendinstance_evalclass_eval。向这些方法传递字符串值几乎没有好处,因此最佳建议是用更安全的方式替换当前逻辑,以动态评估包含用户输入的逻辑。如果使用 sendpublic_send,请确保第一个参数是已知的、硬编码的方法/符号,并且来自用户输入。

对于 evalinstance_evalclass_eval,用户输入绝不应直接传递给这些方法。一种替代方法是将函数或方法存储在可以通过键查找的 Hash 中。如果键存在,则可以执行该函数。

def func_to_run
  puts 'hello world'
end

input = 'fn'

function_map = { fn: method(:func_to_run) }

if function_map.key?(input.to_sym)
  function_map[input.to_sym].call
else
  puts 'invalid input'
end

Details

ID 聚合 CWE 类型 风险
94.2 94 活动