보안 취약점 분석에서 "sink point"(또는 간단히 sink)는 외부 입력이 최종적으로 사용되거나 실행되는 지점을 말합니다. 이 지점에서 악의적인 입력이 실제로 시스템에 영향을 주는 동작을 유발할 수 있습니다.
exec()
, eval()
, query()
, 파일 입출력 등)
String cmd = request.getParameter("cmd");
Runtime.getRuntime().exec(cmd);
request.getParameter("cmd")
← 외부 입력Runtime.getRuntime().exec(...)
← 시스템 명령 실행만약 cmd
파라미터에 "rm -rf /"
같은 악성 명령이 들어가면, 진짜 실행될 수 있기 때문에 취약점(RCE) 이 발생.
Sink 유형 | 설명 |
---|---|
Command Execution | Runtime.exec() , ProcessBuilder.start() 등 |
SQL Query Execution | Statement.executeQuery() 등 |
Script Evaluation | MVEL.eval() , JavaScriptEngine.eval() 등 |
File Access | FileInputStream , FileWriter |
Reflection | Class.forName() , Method.invoke() |
Deserialization | ObjectInputStream.readObject() |
취약점은 단순히 입력이 있다고 생기지 않음.
→ "위험한 동작으로 이어지는지", 즉 Sink가 존재하는지가 중요함.