🇰🇷 한글 설명
Nuxt UI 4.8.1 이전 버전에서 UForm이 생성하는 form 요소에 method와 action 속성이 없어, JavaScript 하이드레이션 전 제출 시 브라우저가 GET 방식으로 자격 증명 필드를 URL 쿼리스트링에 노출할 수 있습니다. 이로 인해 비밀번호 등이 브라우저 기록, 프록시·CDN·WAF 로그, Referer 헤더를 통해 유출될 수 있습니다. 4.8.1 버전에서 수정되었습니다.
💡 쉬운 설명
웹페이지가 완전히 로드되기 전에 로그인 양식을 제출하면, 비밀번호가 주소창 주소에 그대로 붙어서 기록에 남을 수 있습니다. 이 기록이 서버 로그나 다른 곳에 저장되어 비밀번호가 노출될 위험이 있습니다.
🇺🇸 원문 (English)
Nuxt UI is an intuitive Vue UI library powered by Reka UI and Tailwind CSS. Prior to 4.8.1, the server-rendered form element produced by UForm in src/runtime/components/Form.vue omits the method and action attributes and relies solely on the hydrated @submit.prevent handler to stop native submission. UAuthForm composes UForm and can render named credential fields, including an input with type password, inside the same markup. If a user submits before Vue hydration completes, or when the client bundle is blocked or unavailable, the browser performs its default GET submission and serializes the named fields into the current URL query string. The credentials can then appear in the address bar, browser history, reverse-proxy, CDN, or WAF request logs, and Referer headers sent with same-origin subresource requests. This issue is fixed in version 4.8.1.
📍 영향받는 시스템
Nuxt UI 4.8.1 미만 버전을 사용하는 Nuxt 기반 웹 애플리케이션 (UForm, UAuthForm 사용 시)
⚔️ 공격 벡터
하이드레이션 전 또는 클라이언트 번들이 차단된 상태에서 사용자가 로그인 폼을 제출하면 자격 증명이 URL 쿼리에 노출되어 로그·기록·Referer를 통해 수집됨
🛡️ 대응 방법
Nuxt UI를 4.8.1 이상으로 업그레이드 (npm install @nuxt/ui@^4.8.1)
🔧 검증 코드
출력된 버전이 4.8.1 미만이면 취약하며, 4.8.1 이상이면 수정된 버전입니다 (설치되지 않았으면 해당 없음).
npm ls @nuxt/ui 2>/dev/null || grep -E '"@nuxt/ui"' package.json 2>/dev/null