-
Notifications
You must be signed in to change notification settings - Fork 30k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
OpenSSL upgrades: March 1st 2016 [1.0.2g, 1.0.1s] #5433
Comments
I will be available at that time frame of the release and can make vulnerability assessments. |
I'll be around as well. |
@nodejs/lts we have a quandary to sort out:
And for @nodejs/ctc, this to consider: this could be the new norm for OpenSSL. I'm going to try and catch up with someone doing a talk on where OpenSSL is heading at collab summit at the end of April to try and understand better what we should expect. But if we're going to see more regular updates with as little lead-time as this and we're left having to assume that Node is impacted, how do we let that interact with our normal release process, particularly for LTS where we are trying to be steady and intentional (witness the long RC process for recent v4's). In a way we've made this difficult for ourselves by being so dogged on statically linking everything together, but that's really not something we can undo without making the install experience very frustrating for non-Linux users, but perhaps we can lean harder in to making it more straightforward for packagers on Linux at least (tbh I don't know what this means and whether there are actual issues to resolve here other than the annoyance that Node requires newer OpenSSL versions than is available on many systems we support). |
@nodejs/security @nodejs/lts here's my proposal:
I'm going to write up a notice to nodejs-sec and nodejs.org that uses the above plan and will post it here for feedback but I'm going to be on a plane for the next 15 hours so would like to have approval or adjustments to the plan and move to a quick notification post based on that and a short review period here. Can I have some +1's on the plan please? Particularly @thealphanerd and @jasnell on he v4 plan, is this acceptable? |
Plane is delayed, here's my proposed text to post to nodejs-sec and nodejs.org. You have ~15 hours to let me know what you think: March OpenSSL updatesThe OpenSSL project announced this week that they will be releasing versions 1.0.2g and 1.0.1s on Tuesday the 1st of March, UTC. The releases will fix "several defects" that are labelled as "high" severity under their security policy, meaning they are:
Node.js v0.10 and v0.12 both use OpenSSL v1.0.1 and Node.js v4 and v5 both use OpenSSL v1.0.2 and releases from nodejs.org and some other distribution sources are statically compiled. Therefore, all active release lines are impacted by this update. At this stage, due to embargo, it is uncertain the exact nature of these defects, nor what impact they will have on Node.js users, if any. As we already had minor, non-security releases scheduled for each of our active release lines during this week and next, we will be adjusting our schedule to adapt to the OpenSSL releases depending on their impact on Node.js users. We will therefore proceed as follows: Within approximately 24 hours of the OpenSSL releases, our crypto team will make an impact assessment for Node.js users of the OpenSSL releases. This information may vary depending for the different active release lines and will be posted here. As part of that impact assessment we will announce our release plans for each of the active release lines to take into account any impact. Please be prepared for the possibility of important updates to Node.js v0.10, v0.12, v4 and v5 soon after Tuesday, the 1st of March. Node.js v0.10 (Maintenance)A release of Node.js v0.10.43 has been proposed for this week, it currently contains fixes for domains and an important fix for a regression in http_parser that was introduced in v0.10.42. Details of the changes included in this release along with instructions on how to download and use a release candidate (v0.10.43-rc.1) can be found in #5404. Node.js v0.10 users are encouraged to test the release candidate build to ensure compatibility with existing deployments. If the OpenSSL 1.0.1s release contains important fixes that impact Node.js v0.10 we will endeavour to ensure that our v0.10.43 release contains the update. Node.js v0.12 (LTS)A release of Node.js v0.12.11 has been proposed for this week, it currently contains fixes for domains, an important fix for a regression in http_parser that was introduced in v0.12.42, and some other minor fixes. Details of the changes included in this release along with instructions on how to download and use a release candidate (v0.12.11-rc.1) can be found in #5403. Node.js v0.12 users are encouraged to test the release candidate build to ensure compatibility with existing deployments. If the OpenSSL 1.0.1s release contains important fixes for Node.js v0.12 we will endevour to ensure that our v0.12.11 release contains the update. Node.js v4 (LTS "Argon")A significant update to Node.js v4 has been proposed for next week, the 8th of March. You can read about what will be included in Node.js v4.4.0 and find release candidates to test against your deployments at #5301. If the OpenSSL 1.0.2g update includes important fixes that impact Node.js v4, we may release a v4.3.2 this week with only the security updates in order to provide a low-risk path for Node.js v4 users. If the OpenSSL 1.0.2g update does not include important fixes that impact Node.js v4, we will continue with our planned v4.4.0 release and also attempt to include the OpenSSL 1.0.2g upgrade. Users of Node.js v4 can then upgrade to v4.4.0 in their own time and allow for proper testing of the changes included. Node.js v5 (Stable)A regular update to Node.js v5 has been proposed for this week. You can read about what will be included in the proposed Node.js v5.7.1 at #5464. We are excluding any semver-minor changes from this release although it has fixes for some regressions If the OpenSSL 1.0.2g release contains important fixes for Node.js v5, we will endevour to ensure that our v5.7.1 release contains the update. Summary
Please monitor the nodejs-sec Google Group for updates, including an impact assessment and updated details on release timing within approximately 24 hours after the OpenSSL release: https://groups.google.com/forum/#!forum/nodejs-sec Contact and future updatesThe current Node.js security policy can be found at https://nodejs.org/en/security/. Please contact [email protected] if you wish to report a vulnerability in Node.js. Subscribe to the low-volume announcement-only nodejs-sec mailing list at https://groups.google.com/forum/#!forum/nodejs-sec to stay up to date on security vulnerabilities and security-related releases of Node.js and the projects maintained in the nodejs GitHub organisation. |
@rvagg LGTM. I was under the impression the v4.4.0 was going to have another week for RC. There are a few more semver minor commits I wanted to try and get in this week, which would give us the next week to hopefully catch any regressions. AFAIK there is nothing super major omg need to launch yesterday that is in v4.4.0, more semver minor stuff that has been staged for quite some time. I'd much rather be patient and get more stuff in... otherwise it could be 2 - 3 months, or potentially never, for the remaining semver minor commits. Monday morning I'll put together an assessment / audit of the remaining stuff to be merged. If the openssl vuln is bad for us we should 100% do a v4.3.2 and push out v4.4.0 soon after. I know there is the concern of release fatigue... but if these kind of updates are coming from openssl there is not much we can really do aside from static linking, which as you mentioned can be a non starter. |
@thealphanerd thanks for the update, good to know 4.4.0 is another week out, I'll adjust wording accordingly: we'll proceed with 4.4.0 next week regardless and the openssl update will either be in that release or a special 4.3.2 this week if there is enough of an impact. |
Updated my text above to clarify a few things including the 4.4.0 schedule. Please review. |
Proposed text LGTM. |
One of the problems being addressed is CVE-2016-0799, I don't know why it's public but there's an interesting writeup at https://guidovranken.wordpress.com/2016/02/27/openssl-cve-2016-0799-heap-corruption-via-bio_printf/ It's all about not properly handling allocation failures during large writes using |
+1 for Rod's proposal. |
Just a heads up, there are other places in node where we use |
The default size limit of receiving certificate from server is 100k bytes with SSL_MAX_CERT_LIST_DEFAULT in https://github.com/nodejs/node/blob/master/deps/openssl/openssl/ssl/ssl_lib.c#L1920. We don't change its size and this is far less than 32bits. I confirmed this limit with connecting the server that has a self signed certs of more than 100k bytes. $ ./node ~/tmp/tls_test/tls_connect.js
connect
{}
error: { Error: write EPROTO 140348587698048:error:1408E098:SSL routines:ssl3_get_message:excessive message size:../deps/openssl/openssl/ssl/s3_both.c:415:
at exports._errnoException (util.js:859:11)
at WriteWrap.afterWrite (net.js:767:14) code: 'EPROTO', errno: 'EPROTO', syscall: 'write' } So I think CVE-2016-0799 does not affect Node. |
Alright, I checked it too. Looks safe indeed. Thank you! |
Three more fixes were already landed in 1.0.2, which seem to be low severity.
|
Proposed impact assessment to post as a follow-up to our announcement. I'll post this in ~8h so please review so I can get this cleaned up for release.
OpenSSL March Releases Impact Assessment for Node.jsOur crypto team (Ben Noordhuis, Shigeki Ohtsu and Fedor Indutny) have performed an analysis of the defects addressed in this week's OpenSSL releases, 1.0.2g and 1.0.1s. The results of this analysis are included below. The overall impact to Node.js users is low, however we will be producing new versions this week for all of our release lines containing the new versions of OpenSSL in order to provide security assurance.
Release announcements for each of these will be made on the Node.js blog. CVE-2016-0800: Disable SSLv2 default build, default negotiation and weak ciphersAssessment:
This vulnerability has been labelled the DROWN Attack and only impacts servers supporting SSLv2:
It is important to note that simply supporting SSLv2 on an HTTPS socket enables this vulnerability, regardless of whether clients are actively using SSLv2. Since Node.js v0.10.29, SSLv2 and SSLv3 have been disabled by default. It has remained possible to enable them with the If you are using the SSLv2 support is being removed Given the additional barriers introduced in OpenSSL 1.0.1s to retaining SSLv2 support and the long list of known SSLv2 vulnerabilities, Node.js v0.10.43 and v0.12.11 will be completely remove SSLv2 support and the CVE-2016-0705: Fix a double-free in DSA codeAssessment: All versions of Node.js are affected, with low severity This defect allows the use of malformed DSA to be used as a potential Denial of Service (DoS) vector or for causing memory corruption. However it is likely to be very difficult to use in practice and is therefore considered low severity for Node.js users. CVE-2016-0798: Disable SRP fake user seed to address a server memory leakAssessment: All versions of Node.js are unaffected The Secure Remote Password (SRP) feature of OpenSSL is not exposed via Node.js, therefore all versions are unaffected by this defect. CVE-2016-0797: Fix BN_hex2bn/BN_dec2bn NULL pointer deref/heap corruptionAssessment: All versions of Node.js may be affected, with low severity This defect can cause memory corruption in certain very rare cases. Additionally, the Combined with the difficulty of exploiting this defect and the likelihood that Node.js is not using APIs that require the internal use of these functions, this defect is considered to have a very low severity for Node.js users. CVE-2016-0799: Fix memory issues in BIO_*printf functionsAssessment: All versions of Node.js are unaffected This defect can serve as a potential Denial of Service (DoS) vector or be used for causing memory corruption. The CVE-2016-0702: Fix side channel attack on modular exponentiationAssessment: All versions of Node.js are affected, with low severity This defect has been labelled the CacheBleed Attack. This defect enables attackers to execute side-channel attacks leading to the potential recovery of entire RSA private keys. It only affects the Intel Sandy Bridge (and possibly older) microarchitecture when using hyper-threading. Newer microarchitectures, including Haswell, are unaffected. Disabling hyper-threading is an option for mitigating against this attack. |
@rvagg I can easily get a 4.3.2 out the door tomorrow. I had tolled the openssl fix into the latest 4.4.0-rc.3. I'll back it out, cut rc.4 and get the proposal out for 4.3.2 before lunch PST |
Both @shigeki and @bnoordhuis are advocating for removing SSLv2 in nodejs/Release#80. I quite like the option of leaving it in but making it so you have to If we go with that then the messaging should be changed to say that 0.10.43 and 0.12.11 are coming out with SSLv2 completely removed—I'd have to come up with some justification for this so it doesn't seem like we're just pulling the rug out because we feel like it. @nodejs/ctc please weigh in on this one. |
Two comments are here.
With #5433 (comment), I can say that Node is not affected by CVE-2016-0799. Otherwise LGTM. |
There is a small typo in:
|
Maybe "If you are using the --enable-ssl2 command-line argument with |
Should we make this bold so people will actually see it? |
Thanks @nyaaao, fixed (same problem in the original announement, it was fixed on the blog but not the mailing list). @shigeki thanks for the update, fantastic info, I've included that now, please review my changes. @evanlucas yes and yes but I'm still looking for feedback on whether we are removing SSLv2 entirely or doing extra work to keep it enabled in this release and moving to something else later or ... I'll make a call on this in a couple of hours but I'd really appreciate more input. Please review nodejs/Release#80. |
@rvagg That's fine. LGTM. |
Just to be clear, SSLv2 is disabled on v0.10-staging and v0.12-staging, even with |
LGTM |
Did the email already go out, or? |
No, it hasn't still trying to find resolution to the outstanding question of SSLv2 then I need to adjust the wording to suit. It looks like we're going with removing SSLv2 entirely from v0.10 and v0.12. Speak now if you object. /cc @mhdawson ^ |
I'm ok with removing SSLv2 entirely. |
proposal for v4.3.2 --> #5526 |
I'm calling it and adding this: SSLv2 support is being removed Given the additional barriers introduced in OpenSSL 1.0.1s to retaining SSLv2 support and the long list of known SSLv2 vulnerabilities, Node.js v0.10.43 and v0.12.11 will be completely remove SSLv2 support and the I also suggest this means that if you supply the argument then it should bork, not fail silently, it's a breaking change but it needs to be explicit. |
OK, this is live now @ http://nodejs.org/en/blog/vulnerability/openssl-march-2016/#_-update-2-mar-2016-_-openssl-impact-assessment, I'll be working on the nodejs-sec post now, it's kind of tedious with Google Groups. @Fishrock123 and @thealphanerd go ahead with v4 and v5, do what you need. Here's an entry for the Notable items you can use:
|
@nodejs/security
https://mta.openssl.org/pipermail/openssl-announce/2016-February/000063.html
Same severity level as the January 28th releases, FYI. Impacting 0.10, 0.12, 4 and 5.
The text was updated successfully, but these errors were encountered: