Nuxt 라우트 규칙 경로 정규화 우회(CVE-2026-114131)란 무엇인가?

Nuxt의 routeRules가 특정 경로를 보호하고 있는데도, 요청 경로에 퍼센트 인코딩된 세그먼트가 들어 있으면 routeRules의 매칭 과정은 건너뛴 채 라우터의 디코딩 과정에서 보호된 페이지에 접근해 appMiddleware를 우회할 수 있습니다.

CVE-2026-114131 취약점 개요

CVE-2026-114131은 Nuxt 프레임워크의 라우트 규칙 처리 과정에서 발생하는 경로 정규화 우회 취약점입니다. 이 취약점은 GitHub_M이 할당했으며, 현재 상태는 PUBLISHED로 기록되어 있습니다.

이 취약점의 CVSS 기본 점수는 6.5(Medium)로 평가되며, 공격 벡터는 네트워크, 공격 복잡도는 낮음, 권한 필요 없음으로 분석됩니다. 공격자가 보호된 경로에 퍼센트 인코딩된 세그먼트를 포함한 직접적인 HTTP 요청을 보내는 것만으로 권한 확인 절차를 우회할 위험이 있습니다.

기술적 분석: 경로 정규화 및 디코딩 불일치

이 취약점의 핵심은 경로 비교 방식의 불일치입니다. Nuxt가 라우트 규칙(routeRules)을 적용할 때 쓰는 경로 비교 방식과, 실제 라우터가 경로를 해석하는 방식이 서로 어긋나 있기 때문입니다.

1. routeRules의 매칭 방식

Nuxt는 routeRules 키를 검사할 때 원본 요청 경로(raw request path)를 그대로 사용합니다. 이 과정에서 퍼센트 인코딩(percent-encoding)된 문자열을 디코딩하지 않은 채 비교합니다.

2. 라우터의 경로 해석 방식

반면 Nuxt 라우터는 경로를 해석하는 단계에서 파라미터를 디코딩합니다. 요청된 URL에 인코딩된 값이 들어 있어도 라우터는 이를 원래 문자로 변환해 처리합니다.

3. 우회 메커니즘의 작동 원리

두 처리 방식의 차이 때문에 다음과 같은 우회 시나리오가 가능해집니다.

  1. 공격자가 보호된 경로의 일부를 퍼센트 인코딩하여 요청합니다.
  2. Nuxt의 routeRules 엔진은 원본 요청 경로와 매칭되는 규칙이 없다고 판단해 appMiddleware 등의 보안 설정을 적용하지 않고 통과시킵니다.
  3. 이후 라우터 단계에서 해당 경로가 디코딩되면서 보호되어야 할 페이지로 연결됩니다.

이 현상은 특히 동적 경로(Dynamic routes)와 catch-all 경로에서 appMiddleware가 우회되는 치명적인 결과를 낳습니다.

영향을 받는 버전 및 범위

이 취약점은 Nuxt 3와 Nuxt 4의 특정 버전 범위에 영향을 미칩니다. 특히 서버 렌더링 과정에서 appMiddleware가 생략될 수 있다는 점이 문제입니다.

영향 범위 및 버전 상세

구분 영향을 받는 버전 범위 수정 버전
Nuxt 3.x 3.11.0부터 3.21.4까지(포함) v3.21.4 이상
Nuxt 4.x 4.4.4 미만의 모든 릴리스 v4.4.4 이상

파급 효과의 확장

이 취약점은 단순한 appMiddleware 우회에 그치지 않고 app-manifest 규칙 전반으로 확장됩니다. 영향을 받는 구체적인 항목은 다음과 같습니다.

  • 리다이렉트 설정 (redirect)
  • 애플리케이션 레이아웃 설정 (appLayout)
  • 서버 사이드 렌더링 설정 (ssr)
  • 사전 렌더링 설정 (prerender)
  • 캐시 및 페이로드 플래그 관련 설정 (cache, isr, swr)

대응 방안 및 패치 적용

Nuxt 개발팀은 라우트 규칙을 원본 경로가 아닌 디코딩된 경로(decoded paths) 기준으로 매칭하도록 수정해 이 문제를 해결했습니다.

패치 적용 방법

  1. 버전 업데이트: 영향을 받는 버전의 사용자는 Nuxt v3.21.4 이상 또는 v4.4.4 이상 버전으로 업데이트하면 됩니다.
  2. 수정 사항 확인: Nuxt v3.21.11 릴리스 노트의 “Match route rules against decoded paths” 항목에서 수정 사항이 적용되었는지 확인할 수 있습니다.
  3. 커밋 참조: 수정 사항과 관련된 구체적인 변경 내용은 커밋 ID 81f86ac5e에 있습니다.

개발자와 보안 담당자는 현재 운영 중인 서비스의 Nuxt 버전을 점검하고, routeRules로 인증 및 권한 제어를 구현한 경우라면 즉시 최신 패치 버전을 적용해 경로 정규화 우회 위험을 제거해야 합니다.

댓글 남기기