Nuxt의 routeRules로 appMiddleware를 특정 경로에 걸어 둔 프로젝트라면, 그 보호가 인코딩 표기가 다른 요청에도 동일하게 적용되는지 확인할 필요가 있습니다. CVE-2026-114131은 라우트 규칙 매칭과 라우팅이 경로를 다루는 기준의 차이로 규칙 매칭만 실패할 수 있는 문제를 다룹니다. 아래에서는 공식 보안 어드바이저리와 릴리스 노트로 확인되는 사실과, 이를 현재 환경의 점검 범위·우선순위로 해석한 부분을 구분해 정리합니다.
개요

CVE Program의 CVE List V5에 등록된 CVE-2026-114131 record (CVE List V5)는 식별자 CVE-2026-114131과 상태 PUBLISHED, 할당자 GitHub_M를 기록하고 있습니다. 경로 비교 방식과 우회 조건에 대한 기술적 설명은 CVE 레코드가 아니라 Nuxt 공식 보안 어드바이저리 GitHub Security Advisory GHSA-6gq8-jgmh-3ffp의 요약에 정리되어 있습니다.
어드바이저리 요약에 따르면 Nuxt는 routeRules 키를 원본 요청 경로(raw request path)와 비교하면서 퍼센트 인코딩(percent-encoding)을 디코딩하지 않았습니다. 반면 라우터는 경로를 해석할 때 파라미터를 디코딩합니다. 이 차이 때문에 퍼센트 인코딩을 포함한 경로로 요청하면 라우팅은 의도한 경로로 진행되는데 라우트 규칙 매칭만 실패할 수 있습니다. 어드바이저리 제목은 이 결과로 동적 경로와 catch-all 경로에서 appMiddleware가 우회될 수 있다고 설명합니다.
제공된 근거가 명시하는 수정 변경은 nuxt v3.21.11 release notes에 담긴 Match route rules against decoded paths 항목입니다. 즉 라우트 규칙을 디코딩된 경로(decoded path) 기준으로 매칭하도록 바꾼 변경이며, 릴리스 노트에는 커밋 81f86ac5e로 표기되어 있습니다.
영향 범위
- 직접적인 영향 대상은
routeRules로appMiddleware를 적용한 동적 경로와 catch-all 경로 구성입니다. 이 범위는 어드바이저리 제목과 요약이 명시한 내용입니다. - 실질적 위험은
appMiddleware를 인증·권한 검사 같은 보호 목적으로 사용 중인 구성에 집중됩니다. 라우트 규칙 매칭이 실패하면 해당 경로가 의도한 통제 없이 처리될 가능성이 있습니다. - 어드바이저리가 설명한 조건은 경로 세그먼트의 퍼센트 인코딩입니다. 보호가 이 라우트 규칙에만 의존하는 경로라면 비교적 단순한 입력으로 조건이 성립할 수 있습니다. 다만 이는 관측된 악용 사례가 아니라 확인된 메커니즘에서 도출된 해석입니다.
- 영향 버전의 전체 범위는 제공된 근거로 특정하지 못합니다. 확인 가능한 내용은 v3.21.11 릴리스에 디코딩된 경로 매칭 변경이 포함되었다는 사실이며, 사용 중인 버전에서 이 변경이 반영되었는지 별도 확인이 필요합니다.
기술적 분석
이 취약점은 입력 값 자체의 검증 실패라기보다 규칙 매칭 계층과 라우팅 계층이 경로를 해석하는 기준의 불일치에서 발생합니다.
routeRules키는 디코딩되지 않은 원본 요청 경로와 비교됩니다.- 라우터는 경로를 해석할 때 퍼센트 인코딩이 풀린 파라미터를 사용합니다.
같은 요청이 규칙 계층에서는 인코딩이 그대로 남은 문자열로 평가되고, 라우팅 계층에서는 디코딩된 값으로 평가됩니다. 규칙 매칭에 실패하면 appMiddleware가 붙지 않은 채 라우팅이 목표 동적·catch-all 경로로 진행되어 보호 계층만 빠진 상태로 처리됩니다. v3.21.11의 변경은 두 계층의 기준을 디코딩된 경로로 맞춘 것입니다.
공개 개념 증명(PoC)이나 실제 악용 사례는 조사 범위에서 확인되지 않았습니다. CISA KEV 등록 여부도 확인되지 않았습니다. 따라서 이 취약점은 악용이 관측된 사건이 아니라 공식 어드바이저리로 메커니즘이 확인된 잠재적 위험으로 다루는 것이 정확합니다. 구체적인 우회 요청 형태가 공개 자료로 확인되지 않았기 때문에, 검증에 필요한 확인 항목은 자체 라우트 구성을 기준으로 만들어야 합니다.
대응 방안
구성 점검
routeRules의appMiddleware가 인증·권한·보호 목적으로 사용되고 있는지 구성을 점검합니다.appMiddleware가 걸린 동적 경로와 catch-all 경로를 정리해, 어떤 경로가 이 라우트 규칙에만 의존하는지 파악합니다.
자체 확인
- 제공된 근거에는 구체적인 우회 요청 형태가 포함되어 있지 않습니다. 따라서 자체 라우트 구성을 기준으로 퍼센트 인코딩 표기를 포함한 경로가
appMiddleware매칭에 걸리는지 확인하는 방식이 필요합니다.
우선순위 해석
appMiddleware가 인증·권한 경계 자체인 서비스는 점검을 앞당기는 것이 합리적입니다. 통제가 이 라우트 규칙에 걸려 있기 때문입니다.- 이미 다른 보호 계층과 겹치는 경로는 상대적으로 즉시 위험도가 낮을 수 있습니다. 다만 매칭 기준이 디코딩된 경로로 바뀌기 전까지는 인코딩 변형에 따른 우회 가능성이 남습니다.
- 확인된 악용 사례와 공개 PoC가 없으므로, 긴급 장애 대응보다는 구성 점검과 수정 변경 적용을 묶어 계획된 패치로 진행할 수 있는지가 판단 기준이 됩니다.
수정 변경 적용
- v3.21.11 릴리스 노트에 명시된 라우트 규칙의 디코딩된 경로 매칭 변경이 사용 중인 버전에서 반영된 상태인지 확인합니다.
- 매칭 기준이 디코딩된 경로로 바뀌었으므로, 인코딩 표기 때문에 규칙이 발동하지 않았던 요청에도 이제 규칙이 적용될 수 있습니다. 변경 적용 후에는 경로 매칭 동작이 기대대로 동작하는지 확인합니다.
검증의 한계
- 확인된 내용은 경로 비교 기준의 불일치와 v3.21.11의 변경까지입니다. 운영 탐지 기준이나 완화 지침은 제공된 근거에 없으므로, 판단과 확인은 자체 환경에서 이루어야 합니다.
확인되지 않은 부분과 한계
- 확보된 CVE 레코드 인용은 식별자·발행 상태·할당자만 뒷받침합니다. 취약점 등급과 영향 버전 전체 목록은 확인하지 못했습니다.
- 공개 PoC, 구체적인 우회 요청 형태, 실제 악용 사례, KEV 등록 여부가 확인되지 않았습니다.
- 독립적인 제3자 분석 자료는 확인되지 않았습니다.
- 따라서 탐지 규칙과 테스트 케이스는 확인된 메커니즘이 아니라 자체 라우트 구성을 기준으로 설계해야 합니다.
참고자료
- CVE-2026-114131 record (CVE List V5)
- Route rules are matched against the raw request path, so a percent-encoded segment can bypass appMiddleware on dynamic and catch-all routes - Summary
- nuxt v4.5.2 release notes
- nuxt v3.21.11 release notes
함께 읽으면 좋은 글
- Wavlink WL-WN530BE1-A 인증 없는 OS 명령 주입(CVE-2026-113802): 대상 범위와 남은 확인 사항
- Storybook Preview Origin 검증 누락(CVE-2026-114125): 개발 미리보기 환경의 코드 주입 노출 점검
- Pillow TIFF 인코더의 메모리 노출과 세그폴트(GHSA-xvh5-g6gv-559v): 이미지 재저장 파이프라인 점검
본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하셨으면 댓글을 통해 의견을 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.
댓글 (0)
댓글을 작성하려면 로그인이 필요합니다.
로그인아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!