mirror of
https://github.com/nodejs/node.git
synced 2025-05-03 13:28:42 +00:00

This commit add a configuration options named unknownProtocolTimeout which can be specified to set a value for the timeout in milliseconds that a server should wait when an unknowProtocol is sent to it. When this happens a timer will be started and the if the socket has not been destroyed during that time the timer callback will destoy it. Refs: https://hackerone.com/reports/1043360 CVE-ID: CVE-2021-22883 PR-URL: https://github.com/nodejs-private/node-private/pull/246 Reviewed-By: Beth Griggs <bgriggs@redhat.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Michael Dawson <midawson@redhat.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de>
34 lines
802 B
JavaScript
34 lines
802 B
JavaScript
'use strict';
|
|
const common = require('../common');
|
|
const fixtures = require('../common/fixtures');
|
|
|
|
// This test verifies that when a server receives an unknownProtocol it will
|
|
// not leave the socket open if the client does not close it.
|
|
|
|
if (!common.hasCrypto)
|
|
common.skip('missing crypto');
|
|
|
|
const h2 = require('http2');
|
|
const tls = require('tls');
|
|
|
|
const server = h2.createSecureServer({
|
|
key: fixtures.readKey('rsa_private.pem'),
|
|
cert: fixtures.readKey('rsa_cert.crt'),
|
|
unknownProtocolTimeout: 500,
|
|
allowHalfOpen: true
|
|
});
|
|
|
|
server.on('connection', (socket) => {
|
|
socket.on('close', common.mustCall(() => {
|
|
server.close();
|
|
}));
|
|
});
|
|
|
|
server.listen(0, function() {
|
|
tls.connect({
|
|
port: server.address().port,
|
|
rejectUnauthorized: false,
|
|
ALPNProtocols: ['bogus']
|
|
});
|
|
});
|