CVE-2024-9266

URL 리디렉션/오픈 리디렉션
영향
Express
>=3.4.5 <4.0.0
in
Express
항목을 찾을 수 없습니다.
느낌표 아이콘
패치 사용 가능
이 취약점은 HeroDevs에서 제공하는 네버엔딩 지원(NES) 버전에서 수정되었습니다.

개요

Express는 웹 및 모바일 애플리케이션을 위한 강력한 기능 세트를 제공하는 최소한의 유연한 Node.js 웹 애플리케이션 프레임워크입니다.

Express 3 응답 개체 내에서 오픈 리디렉션 취약점(CVE-2024-9266)이 확인되었습니다. 

OWASP에 따르면 URL 리디렉션이라고도 하는 오픈 리디렉션은 애플리케이션이 악의적일 수 있는 외부 URL로 연결되는 링크를 지정하는 사용자 제어 입력을 허용할 때 존재하는 입력 유효성 검사 결함입니다. 이러한 종류의 취약점은 피싱 공격을 수행하거나 피해자를 감염 페이지로 리디렉션하는 데 사용될 수 있습니다.

이는 3.4.5 이상 4.0.0 미만의 Express 버전에 영향을 미칩니다.

세부 정보

모듈 정보

취약점 정보

이 중간 심각도 취약점은 Express 패키지의 response.js에서 발견됩니다.  

응답 객체에서 Express의 위치() 메서드가 오픈 리디렉션에 취약한 경우:

  1. 요청 경로는 이중 슬래시(//)로 시작됩니다
    그리고
  2. 리디렉션을 위한 상대 경로는 ./로 시작하며 사용자가 제어하는 입력
  3. 위치 헤더는 해당 사용자 제어 입력으로 설정됩니다.

location() 메서드는 경로 //를 추출하고./를 평가하여 /로 반환하는 resolve( ) 메서드를 사용하여 상대 URL에 추가하므로 위치 리디렉션의 결과 URL은 '///example.com'과 같은 것이 됩니다. 이는 대부분의 브라우저에서 유효한 스킴 상대 특수 URL인 `//example.com`과 동등한 것으로 평가되며 헤더에 '위치' 로 전송됩니다: ///example.com' 으로 전송되며 사용자를 공격자의 사이트로 리디렉션할 수 있습니다.

재현 단계

  • Express 애플리케이션 코드에서 URL 쿼리 매개변수를 통해 제공된 위치로 사용자를 리디렉션하는 경로를 만듭니다. 
app.get(['/'], function (req, res) { 
  const pageId = req.query.pageId;
  if (pageId && pageId[0] == '.') { 
    res.status(301).location(pageId); 
  }
  res.send('OK'); 
});

  • 브라우저에서 다음과 같은 쿼리를 사용하여 Express 애플리케이션 경로를 방문합니다:
http://localhost:3000//?pageId=./example.com

  • 브라우저는 https://example.com 으로 리디렉션되어야 합니다. Chrome 개발자 도구로 브라우저의 헤더 세부 정보를 검사하여 결과를 확인할 수도 있습니다.

개념 증명

위와 유사한 코드가 포함된 전체 복제본은 여기에서 확인할 수 있습니다:
Express 3.x 오픈 리디렉션 복제본

크레딧

  • 마베즈 마센코(파인더)

완화

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

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

  • 최신 버전의 Express로 마이그레이션
  • 자체 패치 적용
  • 히어로데브즈와 같은 상용 지원 파트너를 활용하여 EOL 이후 보안 지원을 받으세요.

취약점 세부 정보
ID
CVE-2024-9266
영향을 받는 프로젝트
Express
영향을 받는 버전
>=3.4.5 <4.0.0
게시 날짜
2024년 10월 3일
≈ 수정 날짜
2024년 8월 23일
다음에서 수정되었습니다.
심각도
Medium
카테고리
URL 리디렉션/오픈 리디렉션