SummaryUpdates are now available for all active Node.js release lines. These include fixes for the vulnerabilities identified in the initial announcement (below). They also include upgrades of Node.js 6 and 8 to OpenSSL 1.0.2q, and upgrades of Node.js 10 and 11 to OpenSSL 1.1.0j.
We recommend that all Node.js users upgrade to a version listed below as soon as possible.
Downloads & release detailsDownloads are available for the following versions. Details of code changes can also be found on each release page.
Debugger port 5858 listens on any interface by default (CVE-2018-12120)Categorization: Unprotected Primary Channel (CWE-419)All versions of Node.js 6 are vulnerable and the severity is HIGH. When the debugger is enabled with `node --debug` or `node debug`, it listens to port 5858 on all interfaces by default. This may allow remote computers to attach to the debug port and evaluate arbitrary JavaScript. The default interface is now localhost. It has always been possible to start the debugger on a specific interface, such as `node --debug=localhost`. The debugger was removed in Node.js 8 and replaced with the inspector, so no versions from 8 and later are vulnerable.
Reported and fixed by
Ben Noordhuis.
Impact:- All versions of Node.js 6 (LTS "Boron") are vulnerable
- All versions of Node.js 8 (LTS "Carbon") are NOT vulnerable
- All versions of Node.js 10 (LTS "Dubnium") are NOT vulnerable
- All versions of Node.js 11 (Current) are NOT vulnerable
Denial of Service with large HTTP headers (CVE-2018-12121)Categorization: Uncontrolled Resource Consumption / Denial of Service (CWE-400)All versions of 6 and later are vulnerable and the severity is HIGH. By using a combination of many requests with maximum sized headers (almost 80 KB per connection), and carefully timed completion of the headers, it is possible to cause the HTTP server to abort from heap allocation failure. Attack potential is mitigated by the use of a load balancer or other proxy layer.
The total size of HTTP headers received by Node.js now must not exceed 8192 bytes.
Reported by
Trevor Norris, fixed by
Matteo Collina.
Impact:- All versions of Node.js 6 (LTS "Boron") are vulnerable
- All versions of Node.js 8 (LTS "Carbon") are vulnerable
- All versions of Node.js 10 (LTS "Dubnium") are vulnerable
- All versions of Node.js 11 (Current) are vulnerable
"Slowloris" HTTP Denial of Service (CVE-2018-12122)Categorization: Uncontrolled Resource Consumption / Denial of Service (CWE-400)All versions of Node.js 6 and later are vulnerable and the severity is LOW. An attacker can cause a Denial of Service (DoS) by sending headers very slowly keeping HTTP or HTTPS connections and associated resources alive for a long period of time. Attack potential is mitigated by the use of a load balancer or other proxy layer.
A timeout of 40 seconds now applies to servers receiving HTTP headers. This value can be adjusted with `server.headersTimeout`. Where headers are not completely received within this period, the socket is destroyed on the next received chunk. In conjunction with `server.setTimeout()`, this aids in protecting against excessive resource retention and possible Denial of Service.
Reported by Jan Maybach (
liebdich.com), fixed by
Matteo Collina.
Impact:- All versions of Node.js 6 (LTS "Boron") are vulnerable
- All versions of Node.js 8 (LTS "Carbon") are vulnerable
- All versions of Node.js 10 (LTS "Dubnium") are vulnerable
- All versions of Node.js 11 (Current) are vulnerable
Hostname spoofing in URL parser for javascript protocol (CVE-2018-12123)Categorization: Misinterpretation of Input (CWE-115) All versions of Node.js 6 and later are vulnerable and the severity is LOW. If a Node.js application is using `url.parse()` to determine the URL hostname, that hostname can be spoofed by using a mixed case "javascript:" (e.g. "javAscript:") protocol (other protocols are not affected). If security decisions are made about the URL based on the hostname, they may be incorrect.
Reported by
Martin Bajanik (
Kentico), fixed by
Matteo Collina.
Impact:- All versions of Node.js 6 (LTS "Boron") are vulnerable
- All versions of Node.js 8 (LTS "Carbon") are vulnerable
- All versions of Node.js 10 (LTS "Dubnium") are vulnerable
- All versions of Node.js 11 (Current) are vulnerable
HTTP request splitting (CVE-2018-12116)Categorization: Misinterpretation of Input (CWE-115)Node.js 6 and 8 are vulnerable and the severity is MEDIUM. If Node.js can be convinced to use unsanitized user-provided Unicode data for the `path` option of an HTTP request, then data can be provided which will trigger a second, unexpected, and user-defined HTTP request to made to the same server.
Reported as security concern for Node.js 6 and 8 by
Arkadiy Tetelman (
Lob), fixed by backporting a change by
Benno Fünfstück applied to Node.js 10 and later.
Impact:- All versions of Node.js 6 (LTS "Boron") are vulnerable
- All versions of Node.js 8 (LTS "Carbon") are vulnerable
- All versions of Node.js 10 (LTS "Dubnium") are NOT vulnerable
- All versions of Node.js 11 (Current) are NOT vulnerable
OpenSSL Timing vulnerability in ECDSA signature generation (CVE-2018-0735)Severity: LOWThe OpenSSL ECDSA signature algorithm has been shown to be vulnerable to a timing side-channel attack. An attacker could use variations in the signing algorithm to recover the private key.
Impact:- All versions of Node.js 6 (LTS "Boron") are NOT vulnerable
- All versions of Node.js 8 (LTS "Carbon") are NOT vulnerable
- All versions of Node.js 10 (LTS "Dubnium") are vulnerable
- All versions of Node.js 11 (Current) are vulnerable
OpenSSL Timing vulnerability in DSA signature generation (CVE-2018-0734)Severity: LOWThe OpenSSL DSA signature algorithm has been shown to be vulnerable to a timing side-channel attack. An attacker could use variations in the signing algorithm to recover the private key.
Impact:- All versions of Node.js 6 (LTS "Boron") are vulnerable
- All versions of Node.js 8 (LTS "Carbon") are vulnerable
- All versions of Node.js 10 (LTS "Dubnium") are vulnerable
- All versions of Node.js 11 (Current) are vulnerable
OpenSSL Microarchitecture timing vulnerability in ECC scalar multiplication (CVE-2018-5407)Severity: LOWOpenSSL ECC scalar multiplication, used in e.g. ECDSA and ECDH, has been shown to be vulnerable to a microarchitecture timing side-channel attack. An attacker with sufficient access to mount local timing attacks during ECDSA signature generation could recover the private key.
Impact:- All versions of Node.js 6 (LTS "Boron") are vulnerable
- All versions of Node.js 8 (LTS "Carbon") are vulnerable
- All versions of Node.js 10 (LTS "Dubnium") up to 10.8.0 are vulnerable
- All versions of Node.js 10 (LTS "Dubnium") from 10.9.0 are NOT** vulnerable
- All versions of Node.js 11 (Current) are NOT vulnerable
AcknowledgementsMatteo Collina for a significant amount of work fixing vulnerabilities.
Sam Roberts for the OpenSSL upgrades, other code contributions and assisting in the preparation of these releases.
Ben Noordhuis, Fedor Indutny and Benno Fünfstück for code contributions.
Trevor Norris, Jan Maybach, Martin Bajanik, Arkadiy Tetelman for reporting vulnerabilities via the appropriate channels (see below).