서버 측 코드 삽입 (루비)

설명

대상 애플리케이션은 코드 삽입에 취약한 것으로 발견되었습니다. 악의적인 사용자는 서버에서 실행되는 임의의 루비 코드를 삽입할 수 있습니다. 이로 인해 저장된 비밀을 액세스하거나 계정을 탈취하거나 OS 명령을 실행하여 시스템 전체를 손상시킬 수 있습니다.

조치 방안

eval, send, public_send, instance_eval 또는 class_eval과 같은 문자열 데이터를 코드로 평가하는 함수에 사용자 입력을 직접 전달해서는 안 됩니다. 이러한 메서드에 문자열 값을 전달하는 것에 대부분의 경우 이득이 거의 없으므로 현재 논리를 사용자 입력과 안전하게 동적으로 평가하는 구현으로 교체하는 것이 가장 좋은 권장 사항입니다. sendpublic_send를 사용하는 경우 첫 번째 인수가 알려진 하드코딩된 메서드/심볼이어야 하며 사용자 입력에서 오면 안 됩니다.

eval, instance_evalclass_eval에 대해 사용자 입력은 이러한 메서드에 직접 전송되어서는 안 됩니다. 대안으로는 해시에 함수나 메서드를 저장하고 키를 사용하여 찾을 수 있는 것이 있습니다. 키가 존재하는 경우 해당 함수를 실행할 수 있습니다.

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 Aggregated CWE Type Risk
94.2 false 94 Active high

링크