본문 바로가기

♻️ 해제된 자원 사용 (Use-After-Free) - 실습 시뮬레이터

CWE-416: Use After Free / Use of Released Resource

KISA 소프트웨어 보안약점 진단가이드(2021) · 코드오류
💡 쉽게 말하면
이미 버린 영수증을 다시 쓰려는 격 — 닫은 자원을 또 쓰면 오류가 납니다. 닫기 전에 다 쓰고, 사용 범위를 한정합니다.
✅ 학습 진행도
  • ⬜ 진단 시작
  • ⬜ 해제 후 사용 식별
  • ⬜ 사용 범위 한정
☕ Java 코드 에디터 취약한 코드
Reader.java 💡 close 후 자원을 다시 사용하지 말고 사용 범위를 try 안으로 옮기세요.
// [취약] close 후 스트림을 다시 사용
BufferedReader r = new BufferedReader(new FileReader(path));
String first = r.readLine();
r.close();
String second = r.readLine();   // 닫힌 자원 사용 → IOException
💡 수정 가이드 (KISA 기준)
1. 사용 범위 한정

모든 읽기를 try 블록 안에서 수행.

try (BufferedReader r = new BufferedReader(new FileReader(path))) { String first = r.readLine(); String second = r.readLine(); // 닫히기 전에 모두 사용 }
📊 분석 결과 및 설명
🎯 목표

해제된 자원을 다시 사용하지 않도록 사용 범위를 관리합니다.

⚠️ 현재 취약점

Use After Free/Close

해제된 자원 접근으로 예외/정의되지 않은 동작이 발생합니다.

✅ 학습 진행도
  • ⬜ 진단 시작
  • ⬜ 해제 후 사용 식별
  • ⬜ with 범위 한정
🐍 Python 코드 에디터 취약한 코드
reader.py 💡 close 후 파일을 다시 쓰지 말고 with 블록 안에서 사용하세요.
# [취약] close 후 파일 객체를 다시 사용
f = open(path)
first = f.readline()
f.close()
second = f.readline()   # ValueError: I/O operation on closed file
💡 수정 가이드 (KISA 기준)
1. with 범위

읽기를 with 블록 안에서 수행.

with open(path) as f: first = f.readline() second = f.readline() # 닫히기 전에 모두 사용
📊 분석 결과 및 설명
🎯 목표

닫힌 파일/자원을 재사용하지 않습니다.

⚠️ 현재 취약점

Use After Close

닫힌 자원 사용으로 예외가 발생합니다.

📰 실제 사고사례 & 표준 매핑
해제 후 사용 취약점은 브라우저·OS 원격코드실행의 단골 원인으로 다수 CVE가 보고됐습니다.
🏷️ CWE-416
※ 공개적으로 알려진 사례 기반 교육용 요약 · CWE/OWASP는 공개 표준 분류