✏️ Java 코드 에디터
취약한 코드
public void printLog(String userInput) {
// [취약한 코드] 외부 입력값을 포맷 문자열로 직접 사용
// userInput에 "%x %x" 등이 포함되면 메모리 정보가 노출될 수 있음
System.out.printf(userInput);
}
💡 수정 가이드
1. 포맷 스트링과 인자 분리
포맷 문자열 위치에는 고정된 형식("%s")을 사용하고, 외부 입력은 인자로 전달합니다.
System.out.printf("%s", userInput);
📊 분석 결과 및 설명
🎯 목표
포맷 문자열을 처리하는 함수 사용 시, 사용자 입력값이 포맷 문자열(Format String)로 해석되지 않도록 해야 합니다.
⚠️ 현재 취약점
Format String Injection
입력값에 포함된 포맷 지정자(%s, %x 등)가 실행되어 메모리 내용을 읽거나 프로그램 동작을 방해할 수 있습니다.