HD-2024-1407

HTTP 요청 밀수
영향
Node.js
4.21.3 LTS
in
Node.js
Node.js NES
느낌표 아이콘
패치 사용 가능
이 취약점은 HeroDevs에서 제공하는 네버엔딩 지원(NES) 버전에서 수정되었습니다.

↪cf_200D↩개요

여러 버전의 Node.js에 있는 http 모듈의 llhttp 구문 분석기는 CRLF 시퀀스를 엄격하게 사용하여 HTTP 요청을 구분하지 않으므로 HTTP 요청 스머징(HRS)이 발생할 수 있습니다. 

HTTP 요청 스머핑은 HTTP 서버가 요청을 올바르게 처리하는 것을 방해합니다. 이 익스플로잇의 가능한 영향으로는 시스템에 대한 무단 액세스 허용, 공격자의 데이터(데이터베이스, 사용자 계정 및 기타 기록) 수정, 세션 하이재킹, 정보 유출, 캐시 포이즈닝 및 서비스 거부 등이 있습니다.

이 문제는 16.0.0부터 16.20.1까지, 18.0.0부터 18.16.1까지, 20.0.0부터 20.3.1까지 다음 버전의 Node.js에 영향을 줍니다(단, 제외).

 

세부 정보

모듈 정보

영향을 받는 패키지: llhttp

영향을 받는 Node.js 버전: 14 LTS

리포지토리: https://github.com/nodejs/node

게시된 패키지: 노드

패키지 관리자: npm

취약점 정보

이 심각도가 높은 취약점은 여러 버전의 llhttp 라이브러리에서 발견됩니다. RFC7230 섹션 3에서는 각 헤더 필드를 구분할 때 CRLF 시퀀스만 사용해야 한다고 명시하고 있지만, 취약한 버전의 라이브러리에서는 LF 없이 CR 문자만 사용하여 HTTP 헤더 필드를 구분할 수 있습니다. 

이 라이브러리는 Node.js와 함께 번들로 제공되므로 v16, v18 및 v20 브랜치에 있는 많은 버전의 Node.js가 영향을 받습니다.

해결 방법은 없습니다.

재현 단계

  • 서버에 취약한 버전의 Node를 설치합니다.
  • r\n(CRLF)을 사용하는 대신 헤더 필드를 끝낼 때 \r(CR)만 사용하는 HTTP 요청을 작성합니다. 아래 예시에서는 첫 번째 요청이 \r로만 끝나기 때문에 두 번째 요청이 스밍(웹 서버의 특정 계층에 숨겨지거나 잘못 해석됨)될 가능성이 있습니다. 두 번째 요청은 \r\n으로 올바르게 종료되므로 올바르게 형성됩니다.
POST / HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length:  11\r
쿠키: 세션=abc123\r
\r
data=payload1
POST /secret HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 11
\r\n
data=payload2

해결 방법은 사용할 수 없습니다.

완화

모든 사용자는 이 취약점이 없는 Node 버전으로 업그레이드해야 합니다.

추가 리소스

취약점 세부 정보
ID
HD-2024-1407
영향을 받는 프로젝트
Node.js
영향을 받는 버전
4.21.3 LTS
게시 날짜
2024년 10월 16일
≈ 수정 날짜
2024년 6월 30일
다음에서 수정되었습니다.
심각도
높음
카테고리
HTTP 요청 밀수