HD-2024-1408

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

↪cf_200D↩개요

Undici는 네이티브 라이브러리 대신 사용할 수 있는 Node.js용으로 작성된 고성능 HTTP/1.1 클라이언트입니다. Fetch 표준의 일부는 리디렉션 시 쿠키와 같은 금지된 요청 헤더를 대상 사이트에 전달해서는 안 된다고 명시하고 있습니다. 5.26.2 이전 버전의 undici는 이를 수행하지 못했습니다. (노드 16의 경우 이 문제는 --experimental-fetch 플래그를 사용하는 경우에만 해당됩니다.)

이 취약점은 공격자가 서버를 통해 자신이 제어하는 사이트로 리디렉션하는 오픈 리디렉션 익스플로잇과 결합될 수 있습니다. 인증 토큰과 같은 민감한 데이터가 쿠키에 포함되어 있으면 공격자가 제어할 수 있는 대상 사이트가 민감한 데이터를 수신합니다. 

이 문제는 5.26.2 미만의 undici 버전에 영향을 줍니다.

세부 정보

모듈 정보

영향을 받는 패키지: unidici
영향을 받는 버전: >5.26.2
리포지토리: https://github.com/nodejs/undici
게시된 패키지: unici
패키지 관리자: npm

취약점 정보

이 심각도가 낮은 취약점은 5.26.2 미만 버전의 undici에서 발견됩니다. 

undici는 독립적으로 가져올 수 있으며 Node.js 배포의 일부로 포함되어 있습니다. 일반적으로 undici 라이브러리만 업그레이드하기보다는 고정 버전의 라이브러리가 포함된 버전으로 Node.js를 업그레이드하는 것이 가장 좋습니다.

재현 단계

  • 취약한 버전의 undici를 가져오거나 취약한 버전의 undici가 포함된 Node.js 버전의 인스턴스를 설정합니다.
  • 수정 사항에 포함된 이 취약점에 대한 테스트에서 가져온 아래 코드를 사용하세요:
'use strict'
const { test } = require('tap')
const { createServer } = require('http')
const { once } = require('events')
const { fetch } = require('../..')

test('Cross-origin redirects clear forbidden headers', async (t) => {
  t.plan(5)
  const server1 = createServer((req, res) => {
    t.equal(req.headers.cookie, undefined)
    t.equal(req.headers.authorization, undefined)
    res.end('redirected')
  }).listen(0)
  const server2 = createServer((req, res) => {
    t.equal(req.headers.authorization, 'test')
    t.equal(req.headers.cookie, 'ddd=dddd')
    res.writeHead(302, {
      ...req.headers,
      Location: `http://localhost:${server1.address().port}`
    })
    res.end()
  }).listen(0)
  t.teardown(() => {
    server1.close()
    server2.close()
  })
  await Promise.all([
    once(server1, 'listening'),
    once(server2, 'listening')
  ])
  const res = await fetch(`http://localhost:${server2.address().port}`, {
    headers: {
      Authorization: 'test',
      Cookie: 'ddd=dddd'
    }
  })
  const text = await res.text()
  t.equal(text, 'redirected')
})

  • 아래 줄은 특정 헤더가 정의되지 않았다고 주장합니다:
t.equal(req.headers.cookie, undefined)
t.equal(req.headers.authorization, undefined)

  • 취약한 시스템에서는 Server1이 권한 부여 및 쿠키 헤더를 수신하므로 이러한 어설션이 실패합니다.

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

완화

undici는 노드 16에 추가된 인기 라이브러리입니다(기본 HTTP 라이브러리 외에). 실험적 가져오기를 사용하는 모든 사용자는 즉시 업그레이드해야 합니다. 

추가 리소스

취약점 세부 정보
ID
HD-2024-1408
영향을 받는 프로젝트
Node.js
영향을 받는 버전
16.20.2 LTS
게시 날짜
2024년 10월 15일
≈ 수정 날짜
2023년 10월 11일
다음에서 수정되었습니다.
심각도
낮음
카테고리
정보 노출