↪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 라이브러리 외에). 실험적 가져오기를 사용하는 모든 사용자는 즉시 업그레이드해야 합니다.
추가 리소스
- NIST 항목
https://nvd.nist.gov/vuln/detail/CVE-2023-45143 - https://github.com/advisories/GHSA-wqq4-5wpv-mx2g
저희가 지원하는 오픈 소스 소프트웨어에서 새로운 취약점이 수정될 때마다 알림을 받으세요.