본문 바로가기

♾️ 종료되지 않는 반복문·재귀 - 실습 시뮬레이터

CWE-835: Loop with Unreachable Exit Condition

KISA 소프트웨어 보안약점 진단가이드(2021) · 시간 및 상태
💡 쉽게 말하면
멈출 조건이 없는 반복은 끝나지 않는 회전문 — 서버가 멈춰버립니다(DoS). 반드시 종료 조건을 둡니다.
✅ 학습 진행도
  • ⬜ 진단 시작
  • ⬜ 무한 재귀 식별
  • ⬜ 기저 조건 추가
☕ Java 코드 에디터 취약한 코드
Calc.java 💡 재귀에 종료(기저) 조건을 추가하세요.
// [취약] 종료 조건이 없는 재귀 → StackOverflow / DoS
int factorial(int n) {
    return n * factorial(n - 1);
}
💡 수정 가이드 (KISA 기준)
1. 기저 조건

재귀 종료 조건을 가장 먼저 검사합니다.

int factorial(int n) { if (n <= 1) return 1; // 기저 조건 return n * factorial(n - 1); }
📊 분석 결과 및 설명
🎯 목표

반복/재귀에 도달 가능한 종료 조건을 두어 무한 실행을 방지합니다.

⚠️ 현재 취약점

Unbounded Recursion

종료 조건 부재로 자원 고갈 및 DoS가 발생합니다.

✅ 학습 진행도
  • ⬜ 진단 시작
  • ⬜ 무한 루프 식별
  • ⬜ 종료 조건 추가
🐍 Python 코드 에디터 취약한 코드
worker.py 💡 break 또는 횟수/타임아웃 한계를 추가하세요.
# [취약] 종료 조건 없는 while True → 무한 루프(DoS)
def poll(queue):
    while True:
        item = queue.get()
        process(item)
💡 수정 가이드 (KISA 기준)
1. 루프 한계

종료 신호 또는 최대 반복 횟수를 둡니다.

def poll(queue, max_attempts=1000): for _ in range(max_attempts): item = queue.get(timeout=5) if item is None: break process(item)
📊 분석 결과 및 설명
🎯 목표

반복문에 종료 조건이나 상한을 두어 무한 루프를 방지합니다.

⚠️ 현재 취약점

Infinite Loop

탈출 불가능한 루프로 CPU/스레드 자원이 고갈됩니다.

📰 실제 사고사례 & 표준 매핑
제어되지 않는 무한 루프로 CPU가 점유돼 서비스 거부(DoS)가 발생한 사례가 있습니다.
🏷️ CWE-835
※ 공개적으로 알려진 사례 기반 교육용 요약 · CWE/OWASP는 공개 표준 분류