✏️ Java 코드 에디터
취약한 코드
public void ping(String ip) throws IOException {
// [취약한 코드] 입력값 ip를 검증 없이 명령어에 연결
// 공격자 입력: "8.8.8.8; cat /etc/passwd"
String cmd = "ping -c 3 " + ip;
Runtime.getRuntime().exec(cmd);
}
💡 수정 가이드 (KISA 가이드 기준)
1. 입력값 검증 (Whitelist 방식)
입력값이 허용된 패턴(IP 주소 등)과 일치하는지 정규표현식으로 검사합니다.
if (!ip.matches("^[0-9\\.]+$")) {
throw new IllegalArgumentException("Invalid IP");
}
String cmd = "ping -c 3 " + ip;
Runtime.getRuntime().exec(cmd);
📊 분석 결과 및 설명
🎯 목표
외부 입력값이 운영체제 명령어로 전달될 때, ;, |, & 등의 메타문자를 사용하여 추가 명령어가 실행되는 것을 차단해야 합니다.
⚠️ 현재 취약점
OS Command Injection
입력값을 단순히 문자열 연결로 처리하고 있어 메타문자 주입에 취약합니다.