Eval 주입 (Eval Injection)

Eval Injection

설명

Eval 주입(Eval Injection)은 사용자가 입력한 값을 JavaScript의 eval(), new Function(), setTimeout(), setInterval() 등 동적으로 코드를 실행하는 함수에 삽입할 때 발생하는 취약점입니다. 공격자는 악의적인 JavaScript 코드를 삽입하여 크로스 사이트 스크립팅(XSS) 공격과 같은 피해를 유발할 수 있습니다.

잠재적 영향

  • 악성 스크립트 실행 (악성 코드 실행): 공격자가 악성 JavaScript 코드를 실행하여 사용자의 정보 탈취, 세션 하이재킹, 백도어 설치 등이 가능합니다.

  • 데이터 유출 (데이터 노출): 악성 스크립트를 통해 사용자의 민감한 데이터가 외부로 전송될 수 있습니다.

해결 방법

  • eval, new Function, setTimeout/setInterval(문자열 코드 실행) 등 동적 코드 실행 함수 사용을 최대한 피하십시오.

  • 꼭 필요한 경우, 사용자 입력을 철저히 검증하고 허용되는 값만 처리하세요.

  • 사용자 입력으로 코드가 직접 실행되는 구조 자체를 피하고, 안전한 비즈니스 로직만을 사용하세요.

취약한 코드 및 안전한 코드 예시

취약한 코드

// 비취약 예시
eval('alert("hi")'); // 직접 코드, 입력 없음
// 취약 예시
const param = new URLSearchParams(window.location.search).get('cmd');
eval(param); // 사용자가 cmd에 악성 코드를 삽입할 수 있음

안전한 코드

설명:

  • 취약한 코드: 사용자 입력을 검증 없이 eval에 전달하면 공격자가 악의적인 코드를 삽입하여 실행할 수 있어 매우 위험합니다.

  • 안전한 코드: 허용된 명령어만 실행하도록 제한하여, 사용자가 임의로 코드를 삽입하여 실행할 수 없게 만듭니다. 동적 실행 함수(eval 등)은 사용하지 않습니다.

참조

Last updated