Kant's IT/Vulnerability
Laravel 프레임워크 디버그 모드 XSS 취약점(CVE-2024-13918) 분석
Kant Jo
2025. 4. 13. 21:27
Laravel Framework Flaw Allows Attackers to Execute Malicious JavaScript
Laravel Framework Flaw Allows Attackers to Execute Malicious JavaScript
A significant vulnerability has been identified in the Laravel framework, specifically affecting versions between 11.9.0 and 11.35.1.
gbhackers.com
- 취약점 개요
- CVE 식별자: CVE-2024-13918
- 영향 받는 버전: Laravel 11.9.0 ~ 11.35.1
- CVSS v3.1 기준 점수: 8.0 (높음)
- 취약점 유형: Reflected XSS (크로스 사이트 스크립팅)
- 취약 위치: 디버그 모드 활성화 시 오류 페이지 내 요청 파라미터 출력 처리
- 공격 조건 및 동작 방식
- APP_DEBUG=true 설정이 활성화된 상태에서 오류 발생 시 Laravel은 내부 예외 페이지를 출력함
- 해당 예외 페이지에 요청 URL 및 본문(request body)이 HTML 인코딩 없이 출력
- 출력 시
{!! !!}
문법을 사용하여 HTML 엔티티 이스케이프 없이 원문 그대로 출력함 - 공격자가
<script>alert(1)</script>
등 XSS 페이로드를 포함한 URL을 전달할 경우, 브라우저에서 해당 자바스크립트 코드가 실행됨
- PoC(입증 절차) 예시
.env
파일에서APP_DEBUG=true
설정- 라우터에 오류 발생 유도 코드 삽입
Route::get('/poc-url', function () { return 0/0; // 오류 발생 유도 });
- 공격 URL:
http://localhost:8000/poc-url?payload=<script>alert(1)</script>
- 접속 시 오류 페이지 내에서 스크립트가 실행되어 브라우저 내 XSS 발생
- 보안 영향 및 위험도
- 공격자는 crafted URL을 통해 사용자에게 피싱성 클릭 유도 가능
- 해당 웹사이트의 도메인 컨텍스트에서 세션 탈취, 사용자 데이터 수집, 악성 스크립트 삽입 가능
- Laravel 디버그 모드가 개발 중 실수로 운영환경에서 활성화된 경우, 위험이 즉시 발생할 수 있음
- 보안 권고
- Laravel 11.36.0 이상으로 업데이트
- 해당 버전에서
{!! !!}
대신 HTML 인코딩 출력으로 수정됨
- 해당 버전에서
- 운영 환경에서는
.env
설정에서 반드시APP_DEBUG=false
로 설정할 것 - WAF(Web Application Firewall)를 통해 입력 파라미터 내 악성 스크립트 탐지 및 차단
- 코드 내
{!! !!}
사용 위치 점검 및{!! e($data) !!}
또는{{ $data }}
로 대체
- Laravel 11.36.0 이상으로 업데이트
- 결론
- Laravel과 같은 대중적인 웹 프레임워크에서 발생하는 취약점은 즉시 패치 및 배포가 필수
- 개발 편의성을 위한 디버그 기능이 공격자의 XSS 벡터로 악용될 수 있음
- 모든 개발자 및 보안 담당자는 프레임워크 내 디버그 메시지, 로그 출력 코드의 보안성 점검 루틴을 정기화해야 함