Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Step:15-SP2
nodejs10.26739
CVE-2021-22939.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File CVE-2021-22939.patch of Package nodejs10.26739
From 1780bbc3291357f7c3370892eb311fc7a62afe8d Mon Sep 17 00:00:00 2001 From: Matteo Collina <hello@matteocollina.com> Date: Wed, 4 Aug 2021 18:40:00 +0200 Subject: [PATCH] tls: validate "rejectUnauthorized: undefined" Incomplete validation of rejectUnauthorized parameter (Low) If the Node.js https API was used incorrectly and "undefined" was passed in for the "rejectUnauthorized" parameter, no error was returned and connections to servers with an expired certificate would have been accepted. CVE-ID: CVE-2021-22939 Refs: https://nvd.nist.gov/vuln/detail/CVE-2021-22939 Refs: https://hackerone.com/reports/1278254 PR-URL: https://github.com/nodejs-private/node-private/pull/276 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Akshay K <iit.akshay@gmail.com> Reviewed-By: Robert Nagy <ronagy@icloud.com> Reviewed-By: Richard Lau <rlau@redhat.com> --- lib/_tls_wrap.js | 17 ++++++++++++++++- test/parallel/test-tls-client-reject.js | 13 +++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) Index: node-v10.24.1/lib/_tls_wrap.js =================================================================== --- node-v10.24.1.orig/lib/_tls_wrap.js +++ node-v10.24.1/lib/_tls_wrap.js @@ -1102,7 +1102,15 @@ function onConnectSecure() { this.authorized = false; this.authorizationError = verifyError.code || verifyError.message; - if (options.rejectUnauthorized) { + // rejectUnauthorized property can be explicitly defined as `undefined` + // causing the assignment to default value (`true`) fail. Before assigning + // it to the tlssock connection options, explicitly check if it is false + // and update rejectUnauthorized property. The property gets used by + // TLSSocket connection handler to allow or reject connection if + // unauthorized. + // This check is potentially redundant, however it is better to keep it + // in case the option object gets modified somewhere. + if (options.rejectUnauthorized !== false) { this.destroy(verifyError); return; } else { @@ -1170,6 +1178,13 @@ exports.connect = function connect(...ar requestOCSP: options.requestOCSP }); + // rejectUnauthorized property can be explicitly defined as `undefined` + // causing the assignment to default value (`true`) fail. Before assigning + // it to the tlssock connection options, explicitly check if it is false + // and update rejectUnauthorized property. The property gets used by TLSSocket + // connection handler to allow or reject connection if unauthorized + options.rejectUnauthorized = options.rejectUnauthorized !== false; + tlssock[kConnectOptions] = options; if (cb) Index: node-v10.24.1/test/parallel/test-tls-client-reject.js =================================================================== --- node-v10.24.1.orig/test/parallel/test-tls-client-reject.js +++ node-v10.24.1/test/parallel/test-tls-client-reject.js @@ -67,6 +67,19 @@ function rejectUnauthorized() { socket.write('ng'); } +function rejectUnauthorizedUndefined() { + console.log('reject unauthorized undefined'); + const socket = tls.connect(server.address().port, { + servername: 'localhost', + rejectUnauthorized: undefined + }, common.mustNotCall()); + socket.on('data', common.mustNotCall()); + socket.on('error', common.mustCall(function(err) { + authorized(); + })); + socket.end('ng'); +} + function authorized() { const socket = tls.connect(server.address().port, { ca: [fixtures.readSync('test_cert.pem')],
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor