CVE-2024-9506

리도스 취약점
영향
Vue
>=2.0.0 <3.0.0
in
Vue 2
항목을 찾을 수 없습니다.
느낌표 아이콘
패치 사용 가능
이 취약점은 HeroDevs에서 제공하는 네버엔딩 지원(NES) 버전에서 수정되었습니다.

개요

Vue는 세분화된 반응성을 갖춘 웹 애플리케이션을 개발하기 위한 HTML, CSS 및 JS 프레임워크입니다.

Vue 2 컴파일러에서 리도스 취약점(CVE-2024-9506)이 발견되었습니다. 

OWASP에 따르면 정규식 서비스 거부(ReDoS)는 대부분의 정규식 구현이 입력 크기에 따라 매우 느리게 작동하는 극단적인 상황에 도달할 수 있다는 점을 악용하는 서비스 거부 공격입니다. 공격자는 정규식(Regex)을 사용하는 프로그램을 이러한 극단적인 상황에 처하게 한 다음 매우 오랜 시간 동안 멈추게 할 수 있습니다.

세부 정보

모듈 정보

취약점 정보 

이 심각도가 낮은 취약점은 여러 Vue 패키지 내의 html-parser.ts 파일에서 발견됩니다:

  • 컴파일러-sfc
  • 서버-렌더러
  • 템플릿 컴파일러
  • 뷰 템플릿 컴파일러
  • 뷰-서버-렌더러

html-parser.ts에 있는 Vue의 parseHTML() 함수는 다음과 같은 경우 리도스 공격에 취약합니다: 

  1. The template string contains a <script>, <style>, or <textarea> without a matching closing tag 

Within the parseHTML() function there is a regular expression (regex) to check for proper closing tags for the three tags listed above. However, due to an improperly written regex, when you pass in something like <script>some very very long text</not-script> it will trigger a ReDoS.

재현 단계

Within Vue 2 client-side application code, create a new Vue instance with a template string that includes a <script> node tag that has a different closing tag (in this case </textarea>).

new Vue({
  el: '#app',
  template: '
<div> 
   Hello, world!
   <script>${'<'.repeat(1000000)}</textarea>
</div>'
});

  • 위의 JavaScript를 로드하는 index.html 파일을 설정한 다음 마운트()를 사용하여 새로 생성된 Vue 인스턴스를 마운트합니다.
<!DOCTYPE html>
<html>
<head>
  <title>My first Vue app</title>
</head>
<body>
  <div id="app">
    Loading..
  </div>
</body>
</html>

  • 브라우저에서 Vue 애플리케이션을 방문합니다.
http://localhost:3000

  • 브라우저에서 ReDoS 취약점이 페이지가 템플릿을 구문 분석하고 Vue 애플리케이션을 마운트하는 데 걸리는 시간을 어떻게 증가시킬 수 있는지 관찰합니다. 이것은 ReDoS 취약점을 보여줍니다. 

개념 증명

위와 유사한 코드가 포함된 전체 복제본은 여기에서 확인할 수 있습니다:
Vue2 HTML 태그 불일치 ReDoS

↪cf_200D↩크레딧

  • K(파인더)

완화

Vue 2는 수명이 종료되었으며 이 문제를 해결하기 위한 업데이트가 제공되지 않습니다.

영향을 받는 구성 요소의 사용자는 다음 완화 방법 중 하나를 적용해야 합니다:

  • 최신 버전의 Vue로 마이그레이션합니다.
  • 히어로데브즈와 같은 상용 지원 파트너를 활용하여 EOL 이후 보안 지원을 받으세요.
취약점 세부 정보
ID
CVE-2024-9506
영향을 받는 프로젝트
Vue
영향을 받는 버전
>=2.0.0 <3.0.0
게시 날짜
2024년 10월 14일
≈ 수정 날짜
2024년 7월 25일
다음에서 수정되었습니다.
심각도
낮음
카테고리
리도스 취약점