서버 측 코드 인젝션 (루비)
설명
대상 응용 프로그램은 코드 인젝션에 취약하게 발견되었습니다. 악의적인 사용자는 서버에서 실행되는 임의의 루비 코드를 삽입할 수 있습니다. 이로 인해 저장된 비밀 및 계정 탈취에 이르는 코드 삽입 또는 OS 명령 실행으로 전체 시스템이 침해될 수 있습니다.
수정 방안
사용자 입력을 직접 문자열 데이터로 평가하는 함수에 전달하지 마십시오. (예: eval
, send
, public_send
, instance_eval
, class_eval
) 이러한 메서드에 문자열 값을 전달하는 것에 대부분의 이점이 없으며, 사용자 입력과 동적으로 평가되는 로직을 더 안전한 방식으로 대체하는 것이 가장 좋은 권장 사항입니다. send
또는 public_send
를 사용하는 경우 첫 번째 인수가 알려진 하드코딩된 메서드/심볼이어야 하며, 사용자 입력에서 오지 않아야 합니다.
eval
, instance_eval
, 그리고 class_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 |