서버측 Eval 주입 (Eval Injection)
Server-Side Eval Injection
설명
Eval 주입은 사용자 입력값이 eval() 함수에 전달될 때 발생하는 취약점입니다. eval() 함수는 문자열을 코드로 실행하기 때문에, 공격자가 조작된 입력값을 전달할 경우 의도하지 않은 악성 코드를 실행할 수 있습니다. 이는 시스템 명령어 실행, 데이터 유출, 서비스 장애 등으로 이어질 수 있습니다.
잠재적 영향
임의 코드 실행 (임의 코드 실행): 공격자가 서버에서 악성 JavaScript나 시스템 명령어를 실행할 수 있습니다.
정보 유출 (정보 유출): 내부 데이터나 환경 변수가 노출될 수 있습니다.
서비스 장애 (서비스 중단): 악의적인 코드 실행으로 인해 애플리케이션이 다운되거나 오동작할 수 있습니다.
해결 방법
eval() 함수 사용을 최대한 피하고, 대체 함수(ex: JSON.parse, Function 등)도 신중하게 사용합니다.
사용자 입력값은 절대 코드로 실행하지 않습니다.
입력값이 반드시 코드처럼 실행되어야 한다면, 허용된 값 목록(Whitelist)을 사용해 제한합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
app.get("/vuln", function (req, res) {
const userCode = req.query.code;
// 위험: 사용자 입력을 코드로 실행
eval(userCode);
res.send("Done");
});안전한 코드
설명:
취약한 코드: 위험한 코드 예시에서는 req.query.code를 그대로 eval()로 실행하고 있습니다. 이로 인해 공격자가 악의적인 JavaScript 코드를 삽입 및 실행할 수 있어, 시스템 장악이나 데이터 유출이 발생할 수 있습니다.
안전한 코드: 안전한 코드 예시에서는 eval()을 사용하지 않고, 입력값을 JSON으로만 해석하여 코드 실행으로부터 보호합니다. 입력값이 코드로 실행되지 않으므로, 공격자가 악의적인 코드를 실행할 위험이 없습니다.
참조
Last updated