서버 측 코드 삽입 (Python)

설명

대상 응용프로그램은 코드 삽입에 취약하다는 것을 발견했습니다. 악의적인 사용자는 서버에서 실행될 임의의 Python 코드를 삽입할 수 있습니다. 이로 인해 저장된 비밀 정보에 액세스하거나 계정을 탈취하거나 OS 명령을 실행하여 시스템 전체가 손상될 수 있습니다.

문제 해결

사용자 입력을 eval 또는 exec와 같이 문자열 데이터를 코드로 평가하는 함수에 직접 전달하거나 절대로 하면 안됩니다. 이러한 메서드에 문자열 값을 전달하는 것의 혜택은 거의 없으므로, 현재 로직을 사용자 입력으로 동적으로 평가하는 더 안전한 구현으로 대체하는 것이 가장 좋은 권장 사항입니다. 대체 방법 중 하나는 키를 사용하여 조회할 수 있는 해시맵에 함수나 메서드를 저장하는 것입니다. 키가 존재하면 해당 함수를 실행할 수 있습니다.

def func_to_run():
    print('hello world')

function_map = {'fn': func_to_run}

input = 'fn'

if input in function_map:
    function_map[input]()
else:
    print('invalid input')

Details

ID Aggregated CWE 유형 위험
94.3 false 94 활성 높음

링크