서버 측 코드 주입 (루비)

설명

대상 애플리케이션에서 코드 주입에 취약한 것으로 발견되었습니다. 악의적인 행위자는 서버에서 실행될 임의의 Ruby 코드를 주입할 수 있습니다. 이는 저장된 비밀에 접근하거나, 계정을 장악하기 위해 코드를 주입하거나, OS 명령을 실행함으로써 전체 시스템이 손상될 수 있습니다.

수정 방법

사용자의 입력을 eval, send, public_send, instance_eval 또는 class_eval과 같은 코드를 문자열 데이터로 평가하는 함수에 직접 전달하지 마십시오. 이러한 메서드에 문자열 값을 전달하는 것은 거의 이점이 없으며, 현재의 로직을 사용자 입력으로 동적으로 평가하는 로직의 더 안전한 구현으로 교체하는 것이 최선의 권장 사항입니다. send 또는 public_send를 사용할 경우, 첫 번째 인수는 알려진 하드코딩된 메서드/심볼이어야 하며 사용자 입력에서 나오지 않아야 합니다.

eval, instance_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

세부정보

ID 집계된 CWE 유형 위험
94.2 false 94 Active high

링크