diff --git a/CVE-2018-12122.patch b/CVE-2018-12122.patch new file mode 100644 index 0000000000000000000000000000000000000000..fa95bd236358267257a5414c91b6bee3080c1327 --- /dev/null +++ b/CVE-2018-12122.patch @@ -0,0 +1,208 @@ +From ee618a7ab239c98d945c723a4e225bc409151736 Mon Sep 17 00:00:00 2001 +From: Matteo Collina +Date: Thu, 23 Aug 2018 16:46:07 +0200 +Subject: [PATCH] http,https: protect against slow headers attack + +CVE-2018-12122 + +An attacker can send a char/s within headers and exahust the resources +(file descriptors) of a system even with a tight max header length +protection. This PR destroys a socket if it has not received the headers +in 40s. + +PR-URL: https://github.com/nodejs-private/node-private/pull/144 +Reviewed-By: Sam Roberts +Reviewed-By: Ben Noordhuis +Reviewed-By: James M Snell +--- + doc/api/http.md | 20 ++++++++ + doc/api/https.md | 7 +++ + lib/_http_server.js | 22 ++++++++- + lib/https.js | 1 + + lib/internal/http.js | 27 +++++++--- + test/async-hooks/test-graph.http.js | 2 +- + test/parallel/test-http-slow-headers.js | 50 +++++++++++++++++++ + test/parallel/test-https-slow-headers.js | 63 ++++++++++++++++++++++++ + 8 files changed, 182 insertions(+), 10 deletions(-) + create mode 100644 test/parallel/test-http-slow-headers.js + create mode 100644 test/parallel/test-https-slow-headers.js + +diff --git a/doc/api/http.md b/doc/api/http.md +index 1c6b5717e004..13373debb404 100644 +--- a/doc/api/http.md ++++ b/doc/api/http.md +@@ -958,6 +958,26 @@ added: v0.7.0 + + Limits maximum incoming headers count. If set to 0, no limit will be applied. + ++### server.headersTimeout ++ ++ ++* {number} **Default:** `40000` ++ ++Limit the amount of time the parser will wait to receive the complete HTTP ++headers. ++ ++In case of inactivity, the rules defined in [server.timeout][] apply. However, ++that inactivity based timeout would still allow the connection to be kept open ++if the headers are being sent very slowly (by default, up to a byte per 2 ++minutes). In order to prevent this, whenever header data arrives an additional ++check is made that more than `server.headersTimeout` milliseconds has not ++passed since the connection was established. If the check fails, a `'timeout'` ++event is emitted on the server object, and (by default) the socket is destroyed. ++See [server.timeout][] for more information on how timeout behaviour can be ++customised. ++ + ### server.setTimeout([msecs][, callback]) +