Kant's IT/Vulnerability

Next.js 프레임워크의 치명적 취약점, 캐시 오염 및 XSS 공격 가능성

Kant Jo 2025. 1. 31. 10:00

Critical Vulnerability in Next.js Framework Exposes Websites to Cache Poisoning and XSS Attacks

 

Critical Vulnerability in Next.js Framework Exposes Websites to Cache Poisoning and XSS Attacks

A new report has put the spotlight on potential security vulnerabilities within the popular open-source framework Next.js.

gbhackers.com

 

  • 취약점 개요
    • Next.js 프레임워크에서 잘못된 캐싱 설정으로 인해 캐시 오염(Cache Poisoning)저장형 XSS(Stored XSS) 공격 가능성 발견
    • 서버 측 캐시 오염(Server-Side Cache Poisoning)을 통해 악성 응답을 캐시에 주입하여 모든 사용자에게 전파 가능
    • 취약점은 CVE-2024-46982로 등록되었으며, Next.js 13.5.1 ~ 14.2.9 버전에서 발생
  • 취약점 상세 내용
    • SSR(Server-Side Rendering)과 SSG(Static Site Generation) 간 캐싱 오류
      • Next.js는 getStaticProps(SSG)getServerSideProps(SSR) 을 통해 정적 및 동적 데이터를 처리
      • 공격자는 특정 헤더(예: x-now-route-matches) 또는 내부 URL 매개변수(__nextDataReq)를 조작하여 SSR 요청을 SSG로 오분류(misclassification) 가능
      • 이로 인해 동적 데이터가 캐시에 저장되어 악의적인 응답을 삽입하는 캐시 오염 공격이 발생
    • 캐시 오염을 통한 서비스 거부(DoS) 공격
      • 캐시 키 설정이 올바르게 적용되지 않으면, 공격자가 JSON 데이터를 HTML 대신 제공하도록 유도하여 서비스 거부(DoS) 상태 초래
      • 예를 들어, https://example.com/https://example.com/?__nextDataReq=1이 동일한 캐시 응답을 제공하면 조작된 응답이 모든 사용자에게 적용
    • 저장형 XSS(Stored XSS) 공격
      • 캐시된 응답에 사용자 입력 값(예: User-Agent 문자열 등)이 반영되면, 이를 활용하여 악성 스크립트를 저장형 XSS로 삽입 가능
      • 공격자는 <img src=x onerror=alert('exploit')> 같은 악성 페이로드를 캐시에 주입하여 모든 사용자의 브라우저에서 실행
      • 전자상거래 사이트, 암호화폐 거래소 등 민감한 서비스에 치명적 영향
  • 보안 권고
    • 영향 받는 버전: Next.js 13.5.1 ~ 14.2.9
    • 영향 받지 않는 버전
      • Next.js 14.3.0 이상
      • Vercel에서 호스팅된 배포 환경
      • Next.js의 새로운 앱 라우터(App Router) 아키텍처 적용 환경
    • 보안 패치 적용 필수
      • Next.js 최신 버전(14.3.0 이상)으로 즉시 업데이트
      • 캐시 설정 점검 및 stale-while-revalidate와 같은 디렉티브 사용 시 주의
      • 캐시 키에 URL 매개변수 및 헤더 포함 여부 확인
  • 결론
    • Next.js는 주간 다운로드 600만 회 이상으로 광범위하게 사용되는 JavaScript 프레임워크로, 이번 취약점의 영향이 클 가능성 높음
    • 정적 및 동적 콘텐츠의 캐싱이 보안 취약점을 유발할 수 있음을 입증한 사례로, 웹 개발 시 캐시 설정에 대한 면밀한 검토 필수
    • Bug Bounty 프로그램을 통한 취약점 발견의 중요성 확인
    • Next.js 사용자는 즉시 패치를 적용하고, 캐시 설정을 강화하여 보안성을 높일 것