☕ Java 코드 에디터
취약한 코드
// [취약] 존재검사(exists) 후 생성(write) 사이 시간차 → TOCTOU
File f = new File("/tmp/session.dat");
if (!f.exists()) {
FileWriter w = new FileWriter(f);
w.write(secret);
w.close();
}
💡 수정 가이드 (KISA 기준)
1. 원자적 파일 생성
존재 확인과 생성을 하나의 원자적 연산으로 수행합니다.
Path p = Paths.get("/tmp/session.dat");
try (var ch = Files.newByteChannel(p,
StandardOpenOption.CREATE_NEW, // 없을 때만 원자적 생성
StandardOpenOption.WRITE)) {
ch.write(ByteBuffer.wrap(secret.getBytes()));
}
📊 분석 결과 및 설명
🎯 목표
파일의 존재 검사와 생성/사용을 원자적으로 처리하여 경쟁조건을 제거해야 합니다.
⚠️ 현재 취약점
TOCTOU Race Condition
검사 후 사용 사이의 시간차를 악용해 심볼릭 링크 공격 등이 가능합니다.