서버 측 코드 삽입 (NodeJS)

설명

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

복구

사용자 입력을 직접 eval, setTimeout, 또는 setInterval과 같이 문자열 데이터를 코드로 평가하는 함수에 전달해서는 안 됩니다. 이러한 메서드에 문자열 값을 전달하는 건 거의 이익이 없으며, 따라서 현재 로직을 사용자 입력을 동적으로 평가하는 보다 안전한 방식으로 대체하는 것이 가장 좋은 권장 사항입니다. 대안 중 하나는 키를 사용하여 조회할 수 있는 Map에 함수나 메서드를 저장하는 것입니다. 키가 존재하는 경우 함수를 실행할 수 있습니다.

const function_map = new Map();

function_map.set('fn', function() {
    console.log('hello world');
})

const input = 'fn2';

const fn = function_map.get(input)

if (fn) {
    fn();
} else {
    console.log('유효하지 않은 입력');
}

Details

ID Aggregated CWE Type Risk
94.4 false 94 Active high

링크