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과 같은 대중적인 웹 프레임워크에서 발생하는 취약점은 즉시 패치 및 배포가 필수
    • 개발 편의성을 위한 디버그 기능이 공격자의 XSS 벡터로 악용될 수 있음
    • 모든 개발자 및 보안 담당자는 프레임워크 내 디버그 메시지, 로그 출력 코드의 보안성 점검 루틴을 정기화해야 함