✏️ Java 코드 에디터
취약한 코드
import java.io.File;
import java.io.IOException;
public class ConfigFileMaker {
public void createConfigFile() {
File file = new File("/app/config/db.properties");
try {
if (file.exists()) {
file.delete();
}
if (file.createNewFile()) {
System.out.println("설정 파일 생성 완료");
// [취약점] 모든 사용자에게 읽기/쓰기/실행 권한 부여 (World Writable/Readable)
// true, false -> false는 ownerOnly를 의미. false면 모든 사용자 대상임.
file.setExecutable(true, false);
file.setReadable(true, false);
file.setWritable(true, false);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
💡 수정 가이드
1. 실행 권한 제거
설정 파일은 실행될 필요가 없습니다.
file.setExecutable(false);
2. 읽기 권한 강화 (소유자만)
두 번째 인자를 true로 설정하여 소유자만 읽도록 제한합니다.
file.setReadable(true, true);
3. 쓰기 권한 강화 (소유자만)
다른 사용자가 파일을 변조하지 못하도록 합니다.
file.setWritable(true, true);
📊 분석 결과 및 설명
🎯 목표
설정 파일(db.properties)은 데이터베이스 접속 정보 등 민감한 정보를 담고 있습니다. 이 파일이 소유자(Owner) 외에는 읽거나 쓸 수 없도록 권한을 수정하세요.
⚠️ 현재 취약점
World Writable / Readable
현재 코드는 setReadable(true, false)를 사용하고 있습니다. 두 번째 인자가 false이면 모든 사용자(Anyone)에게 권한이 부여됩니다. 이는 공격자가 설정 파일을 읽어 비밀번호를 탈취하거나, 악성 설정을 주입할 수 있게 합니다.