Cyber Threat Brief — October 24 2026

⚠️ This report is AI-generated. Always validate findings.

1. CVE-2026-111497 — Brotli decoder out-of-bounds write (Node.js, Bun, Envoy)

TL;DR: CVE-2026-111497 lets malformed Brotli data write past a decoder buffer in Node.js, Bun, and Envoy. Upgrade each runtime to the fixed build in the table, and treat Imperva’s lab run as a proof rather than a customer incident.

What’s New:

  • The Node.js advisory is 21 October, and Imperva’s lab note is 22 October. Both sit outside this window.
  • Bun has not tested code execution, and it still says to treat the bug as remote code execution.
  • Envoy’s advisory, published 23 October, applies only when a Brotli decompressor is configured.
  • A bare Node.js HTTP server does not decode a request body on its own. Express and body-parser are routes into the decoder, not a separate bug.

Actionable Intel

ArtifactTypeATT&CKLog SourceAction
CVE-2026-111497Brotli decoder out-of-bounds writeT1190Runtime version inventoryPatch every process that decompresses untrusted Brotli. The CVE is not in KEV. Imperva’s lab run is not a customer incident.
Node.js 22.23.4Fixed buildT1190Node version inventory / image SBOMOn the 22.x line, install 22.23.4 or later. Check the binary inside the image. A package inventory can miss a bundled runtime.
Node.js 24.22.1Fixed buildT1190Node version inventory / image SBOMOn the 24.x line, install 24.22.1 or later. Imperva’s lab input was rejected on this build.
Node.js 26.12.1Fixed buildT1190Node version inventory / image SBOMOn the 26.x line, install 26.12.1 or later.
Node.js 20.x and olderNo fix on that lineT1190Node version inventoryNode.js says end-of-life lines stay affected. Move 20.x and older to 22.23.4, 24.22.1, or 26.12.1.
Brotli 1.2.1Fixed libraryT1190Dependency inventoryInstall Brotli 1.2.1 or later on the 1.2 line. Bun 1.4.4 bundles this release.
Brotli 1.1.1Fixed libraryT1190Dependency inventoryOn the 1.1 line, install 1.1.1. Bun says 1.1.1 is a fixed release inside the affected 1.0.3–1.2.0 range.
Brotli 1.0.10Fixed libraryT1190Dependency inventoryOn the 1.0 line, install 1.0.10. Bun says 1.0.10 is a fixed release inside that same range.
Bun 1.4.4Fixed buildT1190Bun version inventoryUpgrade Bun from 1.0.21 through 1.4.3 to 1.4.4 or later.
bun build --compileEmbedded runtimeT1190Binary inventoryRebuild every compiled Bun executable with Bun 1.4.4 or later. The old binary stays vulnerable after you upgrade the toolchain.
fetch with Content-Encoding: brResponse decode pathT1190Application source / proxyBun fetch and Node fetch decode Brotli responses. A server the app calls can supply the bytes.
node:zlib Brotli APIsDecode APIT1190Application sourceReview brotliDecompress, brotliDecompressSync, and createBrotliDecompress for untrusted input.
DecompressionStream format brotliDecode APIT1190Application sourceReview Bun DecompressionStream calls that set the format to brotli.
decompress: falsePer-request workaroundT1190Application sourceOn unpatched Bun, pass decompress: false to fetch for untrusted URLs. Bun says this applies only to that request.
Express 5.0.0–5.3.0Request-body routeT1190Package inventoryImperva ran code through Express 5 raw() and json() on Node 24.22.0. Upgrade the Node binary. Express itself is not the patch.
body-parser 2.0.0–2.3.0Request-body routeT1190Package inventoryImperva ran code through body-parser 2 raw() and json() on Node 24.22.0. Upgrade the Node binary.
Envoy v1.40.0Fixed buildT1190Envoy version inventoryOn the current train, install v1.40.0 or later when the Brotli decompressor is configured.
Envoy v1.39.3Fixed buildT1190Envoy version inventoryOn the 1.39 train, install v1.39.3 or later. v1.39.2 is vulnerable when Brotli decompression is configured.
Envoy v1.38.6Fixed buildT1190Envoy version inventoryOn the 1.38 train, install v1.38.6 or later. v1.38.5 is vulnerable when Brotli decompression is configured.
Envoy v1.37.8Fixed buildT1190Envoy version inventoryOn the 1.37 train, install v1.37.8 or later. v1.37.7 is vulnerable when Brotli decompression is configured.
Envoy v1.36.12Fixed buildT1190Envoy version inventoryOn the 1.36 train, install v1.36.12 or later. v1.36.11 is vulnerable when Brotli decompression is configured.

Detection

SourceRuleGap
Splunk ESCUNone — verifiedNo rule names Brotli or CVE-2026-111497.
ElasticPartial — Curl or Wget Spawned via Node.jsLater curl or wget download only; the Brotli body and in-process execution miss.
SigmaNone — verifiedThe decoder does not emit the node:child_process log string.

Detection index: ESCU a3f6523 (2026-10-23) · elastic detection-rules 52ef7a0 (2026-10-24) · SigmaHQ 05d1031 (2026-10-21).

Hunt hint: Read node -v, bun --version, and the Envoy build before you hunt crashes. A decoder error or an unexpected exit during decompression is a lead only when that runtime is still in the vulnerable range. On Bun 1.4.4, invalid Brotli fails with BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH. On Node, look for fetch of Content-Encoding: br and for Express 5 or body-parser 2 inflating request bodies. On Bun, rebuild every bun build --compile binary. On Envoy, confirm whether a Brotli decompressor is configured, then move to the patched build. Imperva’s WAF rules are vendor coverage. They are not in this ESCU, Elastic, or Sigma index.

Sources: Node.js October 2026 security releases · Bun GHSA-663w-cv8g-jj2p · Envoy GHSA-3wvj-j6qm-62mr · Imperva


2. Ruby-Onigmo-2026-10-23 — Regexp compiler fixes for the GitLab CVEs

TL;DR: Ruby shipped Onigmo fixes for the regex bugs behind GitLab’s four CVEs, but only when an app compiles attacker-controlled text. Upgrade the Ruby line in the table, and patch the Ruby that GitLab ships rather than only the host interpreter.

What’s New:

  • Ruby’s post is 23 October at 03:11 UTC, a few hours before this window.
  • Regexp.timeout and a length cap do not stop these bugs, including some short patterns.
  • Ruby has not requested its own CVE identifiers, so track the GitLab IDs.
  • GitLab.com needs no action, and current dedicated internal builds already include the GitLab fix.

Actionable Intel

ArtifactTypeATT&CKLog SourceAction
CVE-2026-89078Onigmo double freeT1190Ruby version inventoryTrack this GitLab CVE until Ruby is on a release that contains change #13332. Ruby 4.0.0 and later on the 4.0 line include it. 3.4 and 3.3 need 3.4.12 and 3.3.13.
CVE-2026-93577Onigmo integer overflowT1190Ruby version inventoryOn Ruby 4.0, change #19020 arrives in 4.0.8. On 3.4 and 3.3, install 3.4.12 or 3.3.13.
CVE-2026-97229Onigmo integer overflowT1190Ruby version inventorySame Ruby change as CVE-2026-93577 (#19020). GitLab’s own fix for this CVE is still the GitLab build, not a system Ruby upgrade.
CVE-2026-110264Onigmo ID overflowT1190Ruby version inventoryChange #16801 is in Ruby 4.0.9, 3.4.12, and 3.3.13. Ruby 4.0.8 does not contain it.
Ruby 4.0.9Fixed buildT1190Ruby version inventoryInstall 4.0.9 or later. This is the first 4.0 release that contains all four fixes.
Ruby 4.0.8Incomplete buildT1190Ruby version inventory4.0.8 still needs the CVE-2026-110264 fix. Move to 4.0.9 or later.
Ruby 3.4.12Fixed buildT1190Ruby version inventoryOn the 3.4 line, install 3.4.12 or later.
Ruby 3.3.13Fixed buildT1190Ruby version inventoryOn the 3.3 line, install 3.3.13 or later. Ruby calls this an exception during security maintenance.
Ruby 3.2 and earlierNot in the fix tableT1190Ruby version inventoryThe advisory’s table lists 4.0, 3.4, and 3.3 only. Move older apps to 3.3.13, 3.4.12, or 4.0.9, or stop compiling untrusted patterns.
Regexp.newUntrusted compileT1190Application sourceFind Regexp.new whose argument can come from a user, a CI file, or an API body. Upgrade, or stop compiling that string.
Regexp.compileUntrusted compileT1190Application sourceFind Regexp.compile with the same untrusted input. Ruby treats it as a compile path for this bug.
Regexp.unionUntrusted compileT1190Application sourceFind Regexp.union when any argument is attacker-controlled.
/#{input}/Regexp interpolationT1190Application sourceFind regexp literals that interpolate a variable. A developer-written literal with no interpolation is outside this bug.
GitLab bundled RubySeparate fixT1190GitLab package inventoryUpgrade self-managed GitLab to the fixed build for its branch. A host Ruby upgrade does not patch the Ruby GitLab ships.

Detection

SourceRuleGap
Splunk ESCUNone — verifiedA regexp compile does not match ruby -e with exec and sudo.
ElasticPartial — Suspicious Command Execution via Web ServerOnly a ruby web-server parent spawning a shell; in-process Onigmo corruption misses.
SigmaNone — verifiedA regexp compile does not match a Ruby reverse-shell command line.

Detection index: ESCU a3f6523 (2026-10-23) · elastic detection-rules 52ef7a0 (2026-10-24) · SigmaHQ 05d1031 (2026-10-21).

Hunt hint: Inventory Ruby with ruby -v on app hosts, CI runners, and container images. Anything below 4.0.9, 3.4.12, or 3.3.13 that passes request or CI text to Regexp.new, Regexp.compile, Regexp.union, or /#{input}/ is the exposure. A worker crash during regexp compile is the host symptom. GitLab’s own rules (org_mode_render_error_burst, onigmo_native_worker_crash) read GitLab’s puma_stderr.log and do not cover a generic Ruby app. Dedicated tenants on 19.3.5-internal0 or 19.4.2-internal0 or later are covered. Self-managed GitLab still needs 19.5.1, 19.4.3, 19.3.6, 19.2.9, 19.1.9, 19.0.10, or 18.11.13. Do not send a crafted pattern at a production process to prove the bug.

Sources: Ruby regexp fixes · GitLab 19.5.1 release · Original GitLab brief


Status Updates

  • CVE-2026-114625 (VeloCloud Orchestrator): CISA added this CVE to KEV on 2026-10-23. The due date is 2026-10-26. CISA and the KEV catalog are the second origin for exploitation. Yesterday’s brief treated Arista as the only organization reporting it. Fixed builds are unchanged: 5.2.3.18, 6.1.3.10, and 6.4.2.12. Block 74.82.197.86 and 38.54.50.151. Original brief.
  • CVE-2026-110447 (Collabora Online built-in CODE server): CISA added this CVE to KEV on 2026-10-23. The due date is 2026-10-26. CISA. Update richdocumentscode to 26.4.303 or remove it with occ app:remove richdocumentscode. Disabling the app leaves proxy.php reachable. Nextcloud 29 and older must upgrade Nextcloud or remove the app. Standalone Collabora Online is not affected. No new file hash or IP beyond the 15 October brief. Original brief.
  • eMudhra-CVE-2026-111943 (Okta and Auth0): Okta, dated 23 October, is removing trust in emSign ECC Root CA – G3 and the eight intermediates across Okta and Auth0. Okta reports no evidence of exploitation. Sign-in to Okta and Auth0 is unaffected. Check outbound hooks you control (Okta Inline Hook, Event Hook, Auth0 Action, Custom Database, Federated Connection) with openssl s_client -showcerts -connect <your-host>:443 and look for emSign. Replace that certificate. Yesterday.
  • eMudhra-CVE-2026-111943 (Chrome root): Chrome is removing emSign ECC Root CA – G3 from the Chrome Root Store. The removal is expected Tuesday morning 27 October 2026 PDT, and sooner on Canary and Beta. Okta says Mozilla has already removed that root. Site owners with a certificate that chains to this root need a certificate from another hierarchy. This is the root, separate from yesterday’s eight intermediate SPKI hashes.
  • eMudhra-CVE-2026-111943 (Cisco): cisco-sa-emudhra-info-ScS22A1r, version 1.0 Interim, first published 2026 October 23 16:00 GMT. PSIRT is not aware of malicious use. Duo Cloud needs no customer action. Upgrade Duo Access Gateway to 3.2.0, Duo Agentic Authorization Connector to 1.0.1, and Duo Network Gateway to 3.4.1. Application-hosting Agent 5.2.2 was targeted for 23 October. Ultra Cloud Core SMI 2026.04.1 is targeted for November 2026. FMC has the TechZone article “Configure FMC TLS Policy to Block Known eMudhra Certificate Issuers.” A long product list is still under investigation.
  • PHP2Shell-CVE-2026-109618 / CVE-2026-109619: Mirai mass scans are attempts, not a confirmed compromise. SecurityWeek, The Hacker News, and CyberWire restate Sophos, Arctic Wolf, and Hunt.io on unsuccessful Potassium attempts. Unit 42 is a separate single-origin signal for one European government case (password hashes, MFA secrets, an NTLM-relay tunnel, a Domain Admin attempt, and ==SHELLUSER== / ==PASSWD== batches) and is not in KEV. Google Cloud says Google Cloud itself is not vulnerable. That post is customer guidance, not a compromise report. The 21 October builds still miss CVE-2026-115560 when an app sets session.serialize_handler to php with ini_set() before session_start(). Original brief. Yesterday.
  • LiteLLM-1.107.0-2026-10: LiteLLM’s attack-chain post, published 23 October, is the timeline for the leaked master key and the Berri-AI release fork. Microsoft has the cook.py, sitecustomize.py, and cook.pth digests that were not in the 22 October brief. Wheel digests and /tmp/.pc_once_72129118c59f5636c0bb stay in that brief. Microsoft on X. Original brief.
  • CVE-2026-110264 and CVE-2026-97229 (GitLab): Upstream Ruby now ships the Onigmo fixes in section 2. GitLab’s fixed builds are unchanged. Exploitation of either CVE is still unconfirmed, and neither is in KEV. Original CVE-2026-110264 brief. Original CVE-2026-97229 brief.
  • Plex2Shell-CVE-2026-96652: CVE-2026-96654 and CVE-2026-96656 were KEV due 2026-10-23 and are now overdue. CVE-2026-96652 and CVE-2026-96655 are due 2026-11-03. Fixed build remains 1.43.3.10861. Original brief.
  • SiteGuard-CVE-2026-106931: KEV added 2026-10-20, not yet briefed. KEV due 2026-10-23 is now overdue. Fixed in Ver8.00 Update5 (Apache, Nginx, IIS) and Ver7.00 Update6 (FreeBSD). KEV catalog · EG Secure.
  • KEV deadlines already passed, no new fix or IOC: CVE-2026-102764 (BeyondTrust, due 2026-10-19, brief); CVE-2025-61624 (FortiOS, due 2026-10-19, brief); CVE-2026-21589 (Atlassian, due 2026-10-18, brief); CVE-2026-0257 (PAN-OS GlobalProtect, due 2026-06-01, brief).
  • Retired from watch: CVE-2026-105134 (last update 2026-10-16), CVE-2026-76519 (last update 2026-10-15), CVE-2026-0322 (last update 2026-10-16). Each KEV due date of 2026-10-17 is now seven days past, and there is no new fix, IOC set, or exploitation report. Ahsay · Cisco Secure Email Gateway · PAN-OS.
  • Watching (no change): TimeSmuggler-NetScaler-2026-10 (10-23); ConnectWise-CloudBackup-SkyKick-2026-10 (10-22, original 10-17); CVE-2026-105192 (10-22); Siemens-Software-Center-CVE-2026-110936 (10-21, KEV due 2026-11-03, fixed 4.0.9.8); CVE-2026-102255 (10-15); CVE-2026-85097 (10-09); CVE-2026-107406 (10-09); GhostAction-2026-10 (10-10); CVE-2026-82077 (10-11); CyberXero-2026-10 (10-12); Danfoss-AKSM-FROMAGEGATE-2026-10 (10-13); UNC7017-AOMEI-2026-10 (10-17); Candiru-AdFection-DiscoverTech-2026-10 (10-18); InfinityCore-2026-10 (10-18); UpdraftCentral-2026-10 (10-19); OVHcloud-CLI-2026-10 (10-20); RankMath-SEO-Pro-3.0.123 (10-20).