🔍 CVE-2021-22939

5.3
CVSS Score
MEDIUM
2021-08-16
2026-06-17 03:38
✅ 완료

🇰🇷 한글 설명

Node.js의 https API 사용 시 'rejectUnauthorized' 매개변수에 'undefined'가 전달될 경우, 오류가 발생하지 않고 만료된 인증서를 사용하는 서버와의 연결이 허용되는 취약점입니다. 이는 보안 설정이 의도치 않게 무력화될 수 있음을 의미합니다.

💡 쉬운 설명

인터넷 연결 시 보안 인증서가 유효한지 확인해야 하는데, 설정 실수로 인해 가짜나 만료된 인증서를 사용해도 경고 없이 연결되는 문제입니다. 이로 인해 해커가 중간에서 통신 내용을 훔쳐볼 위험이 있습니다.

🇺🇸 원문 (English)

If the Node.js https API was used incorrectly and "undefined" was in passed for the "rejectUnauthorized" parameter, no error was returned and connections to servers with an expired certificate would have been accepted.

📍 영향받는 시스템

Node.js (rejectUnauthorized 매개변수에 undefined를 전달하는 코드를 사용하는 모든 버전)

⚔️ 공격 벡터

잘못된 설정(undefined 값 전달)을 이용한 중간자 공격(Man-in-the-Middle)

🛡️ 대응 방법

rejectUnauthorized 매개변수에 명확하게 true 또는 false 값을 전달하도록 코드를 수정하고 Node.js를 최신 버전으로 업데이트하십시오.

🔧 검증 코드

명령어 실행 결과 Status가 200 등으로 출력되면 취약한 상태이며, Error가 발생해야 정상적인 보안 동작입니다.

Shell / Script
node -e 'const https = require("https"); const options = { hostname: "expired.badssl.com", port: 443, path: "/", method: "GET", rejectUnauthorized: undefined }; https.request(options, (res) => { console.log("Status: " + res.statusCode); }).on("error", (e) => { console.log("Error: " + e.message); });'

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N

💻 영향받는 소프트웨어

Node.js