Repository navigation
[simplex]: patch Node2Shell (CVE-2026-111497) - #1440
Merged
Merged
Conversation
… fix, 0.18.4 CVE-2026-111497 (Node2Shell) is an out-of-bounds write in Node's Brotli decoder. fetch() decodes Brotli responses, so a malicious or compromised RPC, orderbook, indexer or bundler endpoint could run code in the solver. - Docker builder and runtime stages move to node:24.22.1 / 24.22.1-slim. - The desktop app stages Node 24.22.1 (same release signing key), and its release and test workflows expect it. - engines.node is ^22.23.4 || ^24.22.1 || >=26.12.1, the first patched release on each line. - simplex and simplex-desktop 0.18.3 -> 0.18.4.
Wizdave97
approved these changes
Oct 24, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
CVE-2026-111497 (Node2Shell) is an out-of-bounds write in Node's Brotli decoder. It can lead to code execution.
Simplex decodes Brotli through
fetch(), which decompressesContent-Encoding: brresponses on its own. So a malicious or compromised RPC, orderbook, indexer or bundler endpoint could run code in the solver.Remote access is not a way in. The embedded SSH server only negotiates
zlib@openssh.com, andUiServerreads request bodies as raw bytes. The exposure is the runtime: Docker and desktop both shipped Node 24.19.0.What changes
node:24.22.1andnode:24.22.1-slim.stage-node.mjsalready pins. The release workflow packages on 24.22.1, and the staging check expectsv24.22.1.engines.node: now^22.23.4 || ^24.22.1 || >=26.12.1, the first patched release on each line. Node 23 and 25 are end of life and never got the fix, so they leave the range.enginesstays advisory (noengine-strict), so an older Node gets a warning, not a failed install.sdk/packages/simplex/docs/ai/changelog/2026-10-23-node-runtime-node2shell-fix.md.Electron has no patched release yet. The packaged solver runs on the staged Node, not Electron's.
Validation
stage-node.mjs --target linux-x64downloaded 24.22.1 and verified the signature and checksum. The staged binary reportsv24.22.1.stage-node.test.tsandpackage-release.test.tspass (26 tests).verify-versions.mjspasses.After merge
Tag
simplex-v0.18.4on the merge commit. The SDK is unchanged, so it needs no tag.