본문 바로가기

🚫 Null Pointer 역참조 - 실습 시뮬레이터

CWE-476: NULL Pointer Dereference

KISA 소프트웨어 보안약점 진단가이드(2021) · 코드오류
💡 쉽게 말하면
없는 사람(null)에게 말을 거는 격 — 프로그램이 멈춥니다. 쓰기 전에 "있는지" 먼저 확인합니다.
✅ 학습 진행도
  • ⬜ 진단 시작
  • ⬜ null 역참조 식별
  • ⬜ null 방어 추가
☕ Java 코드 에디터 취약한 코드
UserService.java 💡 역참조 전에 null 검사 또는 Optional을 사용하세요.
// [취약] null 가능 객체를 검사 없이 역참조
User u = repository.findById(id);   // 없으면 null
String name = u.getName().trim();
💡 수정 가이드 (KISA 기준)
1. null 방어

역참조 전 검사 또는 Optional.

User u = repository.findById(id); if (u == null) throw new NotFoundException("사용자 없음"); String name = u.getName().trim(); // 또는: Optional.ofNullable(u).map(User::getName)...
📊 분석 결과 및 설명
🎯 목표

null 가능 값을 검사한 뒤에만 역참조해야 합니다.

⚠️ 현재 취약점

NULL Dereference

검사 없는 역참조로 NPE 및 서비스 중단이 발생합니다.

✅ 학습 진행도
  • ⬜ 진단 시작
  • ⬜ None 접근 식별
  • ⬜ None 가드 추가
🐍 Python 코드 에디터 취약한 코드
user_service.py 💡 None 여부를 검사한 뒤 속성에 접근하세요.
# [취약] None 가능 값을 검사 없이 사용
user = repository.find_by_id(id)   # 없으면 None
name = user.name.strip()
💡 수정 가이드 (KISA 기준)
1. None 가드

접근 전 None 검사.

user = repository.find_by_id(id) if user is None: raise NotFound("사용자 없음") name = user.name.strip()
📊 분석 결과 및 설명
🎯 목표

None 가능 값을 검사한 뒤 속성에 접근합니다.

⚠️ 현재 취약점

None Dereference

검사 없는 접근으로 AttributeError가 발생합니다.

📰 실제 사고사례 & 표준 매핑
Null 포인터 역참조로 애플리케이션이 비정상 종료돼 서비스 거부가 발생한 사례가 있습니다.
🏷️ CWE-476
※ 공개적으로 알려진 사례 기반 교육용 요약 · CWE/OWASP는 공개 표준 분류