critical

CVE

CVE-2026-123270, CVE-2026-123797, CVE-2026-123800, CVE-2026-123798, CVE-2026-123802, CVE-2026-123803, CVE-2026-123799, CVE-2026-123801, CVE-2026-123804, CVE-2026-63436, CVE-2026-41678, CVE-2026-41676, CVE-2026-42327, CVE-2026-41681, CVE-2026-44662, CVE-2026-45784, CVE-2026-41898, CVE-2026-41677, CVE-2026-124959, CVE-2026-124249, CVE-2026-19552, CVE-2026-84503, CVE-2026-119610, CVE-2026-124683, CVE-2026-118492, CVE-2026-119743

CWE

CWE-306, CWE-94, CWE-287, CWE-22, CWE-787, CWE-125, CWE-88, CWE-297, CWE-407, CWE-200

Affected Surface

  • Go data-streaming service Redpanda Connect (`github.com/redpanda-data/connect`, formerly Benthos) versions `4.39.0` through `4.110.0` in default `streams` mode, and `>= 4.111.0` when started with `--bind-http` without `http.basic_auth` (`CVE-2026-123270`, CVSS 9.8 Critical)
  • Java authentication server SuperTokens Core (`io.supertokens:core`) versions `< 11.3.8`, `< 11.4.8`, `< 12.0.11`, `< 12.1.2`, `< 12.2.1`, and `< 12.3.1` across 8 CVEs and 9 additional GitHub Advisories (`CVE-2026-123800` CVSS 9.9 Critical, `CVE-2026-123798` / `CVE-2026-123802` / `CVE-2026-123803` CVSS 8.1 High, `CVE-2026-123797` CVSS 7.5 High, `CVE-2026-123799` / `CVE-2026-123801` CVSS 7.4 High, `CVE-2026-123804` CVSS 6.8 Medium, plus `GHSA-rg6v-28j6-7rj9`, `GHSA-gwhx-68r6-qm37`, `GHSA-qq3r-g9v7-4853`, and `GHSA-9mv6-rgp8-qc98`)
  • Maven `org.zeroturnaround:zt-zip` versions `< 1.18.0` (`CVE-2026-63436` / `GHSA-52c6-99qm-3hqr`, High `8.2` GHSA / `6.1` NVD) and crates.io `openssl` (`rust-openssl`) versions `< 0.10.80` across 8 RustSec advisories (`RUSTSEC-2026-0463` / `CVE-2026-41678`, `RUSTSEC-2026-0473` / `CVE-2026-41676`, `RUSTSEC-2026-0474` / `CVE-2026-42327`, `RUSTSEC-2026-0475` / `CVE-2026-41681`, `RUSTSEC-2026-0476` / `CVE-2026-44662`, `RUSTSEC-2026-0477` / `CVE-2026-45784`, `RUSTSEC-2026-0478` / `CVE-2026-41898`, and `RUSTSEC-2026-0479` / `CVE-2026-41677`)
  • C++ / Python vector search libraries `nmslib/hnswlib` (through `0.8.0` / `0.10.0-rc.2`, commit `ca42672`) and `spotify/voyager` (through `2.1.0`, commit `72de126`) when calling `loadIndex` on untrusted HNSW index files (`CVE-2026-124959` / `CERT/CC VU#681158`), and CPython `http.cookiejar.CookieJar` (`CVE-2026-124249`, PR `#161570`) and `ssl.get_server_certificate()` (`CVE-2026-19552`, PR `#161507`)
  • Python `ansible-core` `ansible.builtin.git` module (`CVE-2026-84503`), GStreamer `gst-plugins-good` `< 1.28.9` (`CVE-2026-119610` / `GStreamer-SA-2026-0095`, CVSS 8.2 High), npm `langium` `3.2.0` through `4.4.0` (`CVE-2026-124683` / `GHSA-297v-g8mm-qj4h`, CVSS 8.7 High, fixed in `4.4.1`) and `langium-sprotty` `< 4.4.2` (`CVE-2026-118492`), and npm `pdfmake` `< 0.3.14` (`CVE-2026-119743`)

Update, 10 November 2026: Late on 9 November (19:16 UTC) and on 10 November 2026 (13:21 UTC), NVD, SuperTokens, and the RustSec Advisory Database published seven additional CVEs (plus nine GitHub Security Advisories) for SuperTokens Core (11.3.8, 11.4.8, 12.0.11, 12.1.2, 12.2.1, and 12.3.1) and seven additional RustSec advisories for the Rust openssl crate (RUSTSEC-2026-0473 through RUSTSEC-2026-0479, requiring openssl >= 0.10.80):

  1. SuperTokens Core 12.0.11 / 12.3.1 (CVE-2026-123800 CVSS 9.9 Critical, CVE-2026-123798 / 123802 / 123803 CVSS 8.1 High, CVE-2026-123799 / 123801 CVSS 7.4 High, CVE-2026-123804 CVSS 6.8 Medium, and GHSA-rg6v-28j6-7rj9 / GHSA-gwhx-68r6-qm37):
    • App-scoped API key escalates to parent connectionUriDomain (CVE-2026-123800, CVSS 9.9 Critical, commit 13c3de170dd4): In Multitenancy.checkPermissionsForCreateOrUpdate(), when targetTenant targeted a connectionUriDomain’s public app and public tenant, the check compared only sourceTenant.getConnectionUriDomain().equals(targetTenant.getConnectionUriDomain()) without verifying that sourceTenant was the CUD’s public app (DEFAULT_APP_ID). An API key scoped to a single child app ((cud, app, public)) could rewrite the parent CUD’s configuration (including api_keys) or omit the target identifier to modify the base tenant ((null, null, null)).
    • SAML signature-wrapping and audience bypasses (CVE-2026-123798, CVE-2026-123802, CVE-2026-123801), cross-tenant WebAuthn lookup (CVE-2026-123803), non-expiring Dashboard sessions (CVE-2026-123799), and CUD refresh auth skip (GHSA-rg6v-28j6-7rj9, CVSS 8.1 High): SAML.verifySamlResponseSignature() called OpenSAML SignatureValidator.validate() without SAMLSignatureProfileValidator (CVE-2026-123798, fixed in 11.3.7 / 11.4.7 / 12.0.10), accepted assertions that failed the audience check (CVE-2026-123802), and did not consume RelayState or enforce InResponseTo (CVE-2026-123801); WebAuthN.signIn() looked up credentials across the entire app without constraining to the requested tenant (CVE-2026-123803); Dashboard.isValidUserSession() never compared DashboardSessionInfo.expiry against current time (CVE-2026-123799); WebserverAPI.assertThatAPIKeyCheckPasses() skipped API-key and IP checks while the CUD list was refreshing (GHSA-rg6v-28j6-7rj9); and --javaagent OpenTelemetry method spans exported database passwords and api_keys in span attributes (GHSA-gwhx-68r6-qm37). Operators should upgrade past 12.0.8 to 12.0.11, 12.1.2, 12.2.1, 12.3.1, 11.4.8, or 11.3.8.
  2. Seven additional openssl crate advisories (RUSTSEC-2026-0473 through RUSTSEC-2026-0479, commit 28d73fc95e): Because RUSTSEC-2026-0474, 0476, and 0477 were fixed in 0.10.79 and 0.10.80, Rust applications should upgrade openssl to >= 0.10.80 (0.10.82 is current on crates.io), rather than stopping at 0.10.78. The seven advisories cover: Deriver::derive / PkeyCtxRef::derive buffer overflow on OpenSSL 1.1.x X25519/X448/HKDF (RUSTSEC-2026-0473 / CVE-2026-41676, < 0.10.78), X509Ref::ocsp_responders returning unvalidated non-UTF-8 &str (RUSTSEC-2026-0474 / CVE-2026-42327, < 0.10.79), MdCtxRef::digest_final stack/heap buffer overflow when the output slice is shorter than EVP_MD_CTX_size (RUSTSEC-2026-0475 / CVE-2026-41681, < 0.10.78), CipherCtxRef::cipher_update / Crypter::update buffer overflow with EVP_aes_*_wrap_pad (RUSTSEC-2026-0476 / CVE-2026-44662, < 0.10.79), CipherCtxRef::cipher_update_inplace 7-byte overrun with AES key-wrap-with-padding (RUSTSEC-2026-0477 / CVE-2026-45784, < 0.10.80), unchecked PSK and DTLS cookie callback return lengths (RUSTSEC-2026-0478 / CVE-2026-41898, < 0.10.78), and *_from_pem_callback out-of-bounds read on oversized password callback lengths (RUSTSEC-2026-0479 / CVE-2026-41677, < 0.10.78).

TL;DR

On 9 November 2026 (13:17 to 18:50 UTC), CERT/CC, NVD, the GitHub Advisory Database, the RustSec Advisory Database, and the Python Security Response Team published 12 advisories affecting streaming data pipelines, authentication servers, AI vector indexes, and core Java, Rust, Python, and JavaScript libraries:

  1. Redpanda Connect (redpanda-data/connect, formerly Benthos) unauthenticated streams-mode RCE (CVE-2026-123270, CVSS 9.8 Critical, public PoC): Across 100 consecutive releases from v4.39.0 through v4.110.0 (which embed redpanda-data/benthos <= v4.80.0), starting Redpanda Connect in streams mode (redpanda-connect streams) binds the management HTTP API to 0.0.0.0:4195 with http.basic_auth.enabled defaulting to false and no authentication check on /streams/{id}. Any client able to reach TCP port 4195 can POST /streams/<id> with a YAML pipeline using the command, subprocess, ffi, or sql_raw processors to execute arbitrary OS commands as the service account, and can pair input.http_server with output.sync_response to read command output directly in the HTTP response body. Starting in v4.111.0 (Benthos v4.81.0), stream CRUD endpoints are disabled by default unless --bind-http is passed.
  2. SuperTokens Core < 11.3.6 / < 11.4.6 / < 12.0.8 ghost-tenant API-key bypass (CVE-2026-123797 / GHSA-q7mc-f2jm-r4gr, CVSS 7.5 High): In src/main/java/io/supertokens/webserver/WebserverAPI.java, checkIPAccess() and assertThatAPIKeyCheckPasses() looked up api_keys using the request’s raw tenant ID (new TenantIdentifier(getConnectionUriDomain(req), getAppId(req), getTenantId(req))). When an unauthenticated caller sent a nonexistent tenant path segment (such as /ghosttenant/recipe/role) alongside an older supported cdi-version header (< 5.0), Config.getConfig() threw TenantOrAppNotFoundException, which the auth checks caught and ignored before falling through to app-level handlers that created or listed roles against the app’s public storage without verifying an API key.
  3. Maven org.zeroturnaround:zt-zip < 1.18.0 fluent-API Zip Slip (CVE-2026-63436 / GHSA-52c6-99qm-3hqr, GHSA High 8.2) and ansible-core ansible.builtin.git argument injection (CVE-2026-84503): While ZipUtil.unpack() validated entry paths with checkDestinationFileForTraversal(), the fluent Zips.get(zip).unpack().destination(outputDir).process() API in src/main/java/org/zeroturnaround/zip/Zips.java wrote new File(destination, entryName) straight to disk without calling the traversal guard. Separately, ansible.builtin.git invoked git (ls-remote, clone, fetch) with the repository URL as a positional argument without a -- separator (CVE-2026-84503), allowing a repository URL starting with - (such as --upload-pack=...) to inject git flags and execute arbitrary commands.
  4. Rust openssl crate < 0.10.78 aes::unwrap_key() inverted bounds check (RUSTSEC-2026-0463 / GHSA-8c75-8mhr-p7r9 / CVE-2026-41678, CVSS 8.1 High) and nmslib/hnswlib & spotify/voyager loadIndex() heap overflow (CVE-2026-124959 / CERT/CC VU#681158): In openssl 0.10.24 through 0.10.77, the safe public wrapper openssl::aes::unwrap_key() asserted out.len() + 8 <= in_.len() instead of out.len() + 8 >= in_.len(), rejecting buffers that were large enough and overflowing out by in_.len() - 8 - out.len() bytes whenever a smaller slice was passed. In nmslib/hnswlib and Spotify’s voyager, HierarchicalNSW::loadIndex() allocated its level-0 heap buffer using the file header’s max_elements_ capacity and then bulk-read cur_element_count * size_data_per_element_ bytes into that buffer without checking cur_element_count <= max_elements_.
  5. CPython http.cookiejar (CVE-2026-124249) and ssl.get_server_certificate() (CVE-2026-19552), GStreamer 1.28.9 (CVE-2026-119610, CVSS 8.2 High), Eclipse Langium 4.4.1 / 4.4.2 (CVE-2026-124683, CVSS 8.7 High), and pdfmake 0.3.14 (CVE-2026-119743): CPython PR #161570 stops http.cookiejar.CookieJar from deleting another domain’s cookies when an unrelated host returns an expired Set-Cookie header with a forged Domain= attribute, and PR #161507 sets check_hostname=True in ssl.get_server_certificate(addr, ca_certs=...). GStreamer gst-plugins-good 1.28.9 fixes a 64 KiB heap over-read in H.264 RTP MTAP16/MTAP24 depayloading, Eclipse Langium 4.4.1 and 4.4.2 fix quadratic DEDENT line counting in IndentationAwareTokenBuilder and unescaped hover HTML in langium-sprotty, and pdfmake 0.3.14 isolates downloaded URL resources per document by default.

What to do now: Upgrade Redpanda Connect to >= 4.111.0 (and enable http.basic_auth plus bind http.address to 127.0.0.1 if --bind-http is used), SuperTokens Core to 11.3.6, 11.4.6, or 12.0.8, org.zeroturnaround:zt-zip to >= 1.18.0, Rust openssl to >= 0.10.78, GStreamer gst-plugins-good to >= 1.28.9, langium / langium-sprotty to >= 4.4.2, and pdfmake to >= 0.3.14. Do not load untrusted .hnsw / .voyager index files in hnswlib or voyager without pre-validating cur_element_count <= max_elements_ in the binary header.

Affected packages and components

EcosystemPackage / ProjectCVE / AdvisorySeverityAffected versionsFixed / safe version
Go / BinaryRedpanda Connect (github.com/redpanda-data/connect, redpanda-data/benthos)CVE-2026-123270Critical (9.8)4.39.0 to 4.110.0 (default streams mode); >= 4.111.0 when --bind-http is enabled without http.basic_auth4.111.0 (4.117.0 latest; omit --bind-http or require http.basic_auth)
Java / DockerSuperTokens Core (io.supertokens:core)CVE-2026-123797 (GHSA-q7mc-f2jm-r4gr)High (7.5)< 11.3.6, 11.4.0..11.4.5, 12.0.0..12.0.711.3.6, 11.4.6, 12.0.8 (commit 1bad648d7b77)
Mavenorg.zeroturnaround:zt-zipCVE-2026-63436 (GHSA-52c6-99qm-3hqr)High (8.2 GHSA / 6.1 NVD)< 1.18.01.18.0 (commit 59a76ad576b0)
crates.ioopenssl (rust-openssl/rust-openssl)RUSTSEC-2026-0463 (GHSA-8c75-8mhr-p7r9, CVE-2026-41678)High (8.1)>= 0.10.24, < 0.10.780.10.78 (commit 718d07ff8ff7)
C++ / PyPIhnswlib (nmslib/hnswlib), voyager (spotify/voyager)CVE-2026-124959 (CERT/CC VU#681158)High (Heap OOB Write)hnswlib <= 0.8.0 / 0.10.0-rc.2 (ca42672); voyager <= 2.1.0 (72de126)Validate header cur_element_count <= max_elements_ before loadIndex
Python (CPython)http.cookiejar.CookieJar, ssl.get_server_certificateCVE-2026-124249, CVE-2026-19552Medium (6.3) / LowCPython branches prior to PRs #161570 (8eb3d2c1c41c) and #161507 (8dde46eaa6ba)CPython commits 8eb3d2c1c41c and 8dde46eaa6ba
PyPI / Linuxansible-core (ansible.builtin.git)CVE-2026-84503Medium (6.7)ansible-core versions passing repo URLs to git without --Reject leading - in repository URLs / vendor errata
C / LinuxGStreamer gst-plugins-good (rtph264depay)CVE-2026-119610 (GStreamer-SA-2026-0095)High (8.2)< 1.28.91.28.9
npmlangium, langium-sprotty (eclipse-langium/langium)CVE-2026-124683 (GHSA-297v-g8mm-qj4h), CVE-2026-118492High (8.7) / Low (2.0)langium 3.2.0..4.4.0; langium-sprotty >= 3.0.0, < 4.4.24.4.1 (CVE-2026-124683), 4.4.2 (CVE-2026-118492)
npmpdfmake (bpampuch/pdfmake)CVE-2026-119743Medium (6.3)< 0.3.140.3.14 (commit 73aaed7a9069)

Technical analysis

1. Redpanda Connect streams-mode unauthenticated RCE (CVE-2026-123270)

Coordinated through CERT/CC by Adrian Pastor (@pagvac), CVE-2026-123270 affects Redpanda Connect (formerly Benthos, github.com/redpanda-data/connect), the Go data-streaming binary, and is distinct from CVE-2026-82266 in the C++ Redpanda broker Admin API on port 9644.

When Redpanda Connect 4.39.0 through 4.110.0 (embedding redpanda-data/benthos <= v4.80.0) starts in multi-stream mode (redpanda-connect streams), two defaults combine:

  1. Unauthenticated listener on 0.0.0.0:4195: In internal/stream/manager/api.go (lines 41-64) and internal/httpserver/basic_auth.go (line 47), the HTTP server binds 0.0.0.0:4195 with http.basic_auth.enabled set to false and registers /streams and /streams/{id} without an authentication middleware.
  2. Code-executing processors in user-submitted YAML pipelines: Because stream definitions posted to POST /streams/{id} have access to the same processor catalog as local config files (including command, subprocess, ffi, and sql_raw with unsafe_dynamic_query), an unauthenticated caller can register a stream that pairs input.http_server with output.sync_response to run arbitrary shell commands and return stdout directly in the HTTP response body:
# POST http://<target>:4195/streams/inband (Content-Type: application/x-yaml)
input:
  http_server:
    path: /trigger
pipeline:
  processors:
    - command:
        name: sh
        args_mapping: 'root = [ "-c", "id" ]'
output:
  sync_response: {}

Once POST /streams/inband returns HTTP 200, sending POST http://<target>:4195/inband/trigger executes sh -c id under the Redpanda Connect service account and returns uid=1000(user) gid=1000(user) groups=1000(user) in the 200 OK response body. Starting in Redpanda Connect v4.111.0 (which upgrades the embedded Benthos core from v4.80.0 to v4.81.0), the /streams CRUD endpoints are no longer registered unless the operator passes --bind-http. However, --bind-http still does not enable authentication on its own, so any >= 4.111.0 deployment using --bind-http must also enable http.basic_auth and bind http.address to a loopback or private management interface.

2. SuperTokens Core 12.0.8 ghost-tenant API-key bypass (CVE-2026-123797 / GHSA-q7mc-f2jm-r4gr)

In SuperTokens Core prior to 11.3.6, 11.4.6, and 12.0.8, WebserverAPI.checkIPAccess() and assertThatAPIKeyCheckPasses() in src/main/java/io/supertokens/webserver/WebserverAPI.java looked up the configured api_keys using the tenant identifier parsed from the request URL path. If an unauthenticated caller placed a nonexistent tenant segment in the URL (for example, PUT /ghosttenant/recipe/role or GET /ghosttenant/recipe/roles), Config.getConfig() threw TenantOrAppNotFoundException, which the API-key check caught and ignored so that tenant-lookup errors could be handled later by the route handler.

However, app-scoped endpoints such as UserRoles operate on the application’s public storage (appIdentifier.getAsPublicTenantIdentifier()) rather than the request’s tenant storage, and the guard forcing those routes to run on the public tenant was only enforced when the request’s cdi-version header was >= 5.0. By sending an older supported cdi-version header (such as cdi-version: 4.0) to /ghosttenant/recipe/role, an unauthenticated caller bypassed assertThatAPIKeyCheckPasses() and created or enumerated roles in the target app. Commit 1bad648d7b77 fixes WebserverAPI.java to resolve api_keys from the app’s public tenant (tenantId = null) and adds supertokens_min_cdi_version (SUPERTOKENS_MIN_CDI_VERSION) so operators can reject legacy CDI headers outright:

--- a/src/main/java/io/supertokens/webserver/WebserverAPI.java
+++ b/src/main/java/io/supertokens/webserver/WebserverAPI.java
@@ -205,9 +206,14 @@ private void assertThatAPIKeyCheckPasses(HttpServletRequest req) throws ServletE
         try {
             String apiKey = getApiKeyFromRequest(req);
 
-            // first we try the normal API key
+            // Resolve the API keys from the app's public tenant rather than the raw request
+            // tenant. api_keys is @NotConflictingInApp (identical across an app's tenants), so
+            // for a real tenant this is equivalent, but it also resolves for an unknown tenant
+            // segment (e.g. /ghosttenant/...) under a real app
             String[] keys = Config.getConfig(
-                    new TenantIdentifier(getConnectionUriDomain(req), getAppId(req), getTenantId(req)),
+                    new TenantIdentifier(getConnectionUriDomain(req), getAppId(req), null),
                     this.main).getAPIKeys();

3. zt-zip 1.18.0 fluent-API Zip Slip (CVE-2026-63436) and Rust openssl 0.10.78 aes::unwrap_key() OOB write (RUSTSEC-2026-0463)

In org.zeroturnaround:zt-zip < 1.18.0 (CVE-2026-63436 / GHSA-52c6-99qm-3hqr), ZipUtil.unpack() called checkDestinationFileForTraversal() to reject ../ entries with MaliciousZipException. However, the fluent API Zips.get(zip).unpack().destination(outputDir).process() had a separate callback (Zips.UnpackingCallback.process() in src/main/java/org/zeroturnaround/zip/Zips.java) that constructed new File(destination, entryName) directly without calling checkDestinationFileForTraversal(). Commit 59a76ad576b0 makes ZipUtil.checkDestinationFileForTraversal() package-private and calls it in Zips.java before both the directory forceMkdir branch and the file/transformer write branches:

--- a/src/main/java/org/zeroturnaround/zip/Zips.java
+++ b/src/main/java/org/zeroturnaround/zip/Zips.java
@@ -678,7 +678,7 @@ public void process(InputStream in, ZipEntry zipEntry) throws IOException {
       }
       visitedNames.add(entryName);
 
-      File file = new File(destination, entryName);
+      File file = ZipUtil.checkDestinationFileForTraversal(destination, entryName, new File(destination, entryName));
       if (zipEntry.isDirectory()) {
         FileUtils.forceMkdir(file);
         return;

In the Rust openssl crate (>= 0.10.24, < 0.10.78, RUSTSEC-2026-0463 / GHSA-8c75-8mhr-p7r9 / CVE-2026-41678), the safe public function openssl::aes::unwrap_key() in openssl/src/aes.rs checked that the caller’s mutable output slice out was large enough to hold the unwrapped key (in_.len() - 8 bytes) before calling OpenSSL’s AES_unwrap_key(), but the inequality in the assert! macro was inverted (commit 718d07ff8ff7):

--- a/openssl/src/aes.rs
+++ b/openssl/src/aes.rs
@@ -243,7 +243,7 @@ pub fn unwrap_key(
     in_: &[u8],
 ) -> Result<usize, KeyError> {
     unsafe {
-        assert!(out.len() + 8 <= in_.len());
+        assert!(out.len() + 8 >= in_.len());
 
         let written = ffi::AES_unwrap_key(
             &key.0 as *const _ as *mut _,

Because assert!(out.len() + 8 <= in_.len()) panicked whenever out.len() exceeded in_.len() - 8 and succeeded whenever out was smaller than in_.len() - 8, any caller that passed a short out buffer (or let untrusted input control the ciphertext/output lengths) triggered an out-of-bounds write of in_.len() - 8 - out.len() bytes from safe Rust code.

4. hnswlib and Spotify voyager loadIndex() heap overflow (CVE-2026-124959), CPython (CVE-2026-124249, CVE-2026-19552), and pdfmake 0.3.14 (CVE-2026-119743)

  1. nmslib/hnswlib and spotify/voyager HNSW header capacity/count mismatch (CVE-2026-124959 / CERT/CC VU#681158): In both hnswlib/hnswalg.h (HierarchicalNSW::loadIndex / loadIndexNoExceptions) and Spotify’s voyager (cpp/src/hnswalg.h), the binary index header stores both max_elements_ (the capacity M) and cur_element_count (the stored element count C), along with size_data_per_element_ (the byte stride S). When load_index() is called with the default max_elements_i = 0, loadIndex sets max_elements = max_elements_, allocates data_level0_memory_ = (char *)malloc(max_elements * size_data_per_element_), and immediately executes input.read(data_level0_memory_, cur_element_count * size_data_per_element_) (followed by linkLists_ and element_levels_ loops up to cur_element_count). Because neither loader checks cur_element_count <= max_elements_, a crafted index header with max_elements_ = 2 and cur_element_count = 512 (S = 128) allocates a 256-byte heap buffer and writes 65,536 bytes into it (+65,280 bytes out of bounds) while passing all file-size and EOF checks.
  2. CPython http.cookiejar cross-domain cookie deletion (CVE-2026-124249, PR #161570) and ssl.get_server_certificate() missing hostname check (CVE-2026-19552, PR #161507): In Lib/http/cookiejar.py, _cookie_from_cookie_tuple() checked elif expires <= self._now: and called self.clear(domain, path, name) using the raw Domain and Path attributes from the Set-Cookie header before constructing the Cookie object or consulting self._policy.set_ok(cookie, request). A response from http://attacker.test/ carrying Set-Cookie: session=x; Domain=.victim.test; Path=/; Max-Age=0 could therefore wipe victim.test session cookies from a shared CookieJar. In Lib/ssl.py, ssl.get_server_certificate(addr, ca_certs=...) called _create_stdlib_context(ssl_version, cert_reqs=cert_reqs, cafile=ca_certs) without check_hostname=ca_certs is not None, verifying the CA chain while accepting a certificate issued for any domain.
  3. pdfmake 0.3.14 cross-document virtual file system cache bleed (CVE-2026-119743, commit 73aaed7a9069), GStreamer 1.28.9 (CVE-2026-119610), and Eclipse Langium 4.4.1 / 4.4.2 (CVE-2026-124683, CVE-2026-118492): Prior to pdfmake 0.3.14, URLResolver wrote every downloaded image, font, or attachment into a process-wide singleton this.virtualfs keyed only by URL string (if (this.fs.existsSync(url)) return;), ignoring request headers (such as Authorization: Bearer ...) and bypassing setUrlAccessPolicy() on subsequent cache hits across unrelated documents. Version 0.3.14 creates an isolated new VirtualFileSystem(this.sharedVirtualfs) per document and sets urlResourceCaching = false by default.

IOCs

  • Redpanda Connect (CVE-2026-123270) network and host indicators:
    • Unauthenticated GET /streams returning HTTP 200 on TCP port 4195, or POST /streams/<id> requests containing command:, subprocess:, ffi:, or sql_raw: (unsafe_dynamic_query: true) processor blocks.
    • Unexpected child processes (sh, bash, curl, python3) spawned by the redpanda-connect or rpk process.
  • SuperTokens Core (CVE-2026-123797) request indicators:
    • HTTP requests to /<unknown-tenant>/recipe/role, /<unknown-tenant>/recipe/roles, or other app-level management routes carrying a legacy cdi-version header (< 5.0) without a valid api-key header.

Detection and remediation

# 1. Check Redpanda Connect version and whether port 4195 exposes unauthenticated /streams
redpanda-connect --version 2>/dev/null || rpk connect --version 2>/dev/null || true
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:4195/streams 2>/dev/null || true

# 2. Check Maven, Cargo, Python, and npm lockfiles for zt-zip, openssl, hnswlib, voyager, langium, and pdfmake
rg -n 'zt-zip|supertokens|"openssl"|hnswlib|voyager|langium|pdfmake' \
  pom.xml build.gradle* Cargo.lock requirements*.txt pyproject.toml uv.lock poetry.lock package.json package-lock.json pnpm-lock.yaml yarn.lock 2>/dev/null

# 3. Audit Ansible playbooks and roles for ansible.builtin.git tasks with variable repo URLs
rg -n -C 3 'ansible\.builtin\.git|\bgit:' playbooks/ roles/ 2>/dev/null || true
  1. Upgrade Redpanda Connect to >= 4.111.0 (4.117.0 latest) and lock down port 4195: On >= 4.111.0, do not pass --bind-http unless the streams CRUD API is required; if --bind-http is used (or on < 4.111.0 before upgrading), set http.address: 127.0.0.1:4195 and enable http.basic_auth.enabled: true with a strong password hash.
  2. Upgrade SuperTokens Core to 11.3.6, 11.4.6, or 12.0.8: Set supertokens_min_cdi_version (SUPERTOKENS_MIN_CDI_VERSION: "5.5") if all connected backend SDKs support CDI 5.5, and audit the roles and role_permissions tables for unauthorized entries.
  3. Upgrade zt-zip to >= 1.18.0, Rust openssl to >= 0.10.78, langium / langium-sprotty to >= 4.4.2, pdfmake to >= 0.3.14, and GStreamer gst-plugins-good to >= 1.28.9: In Python services using hnswlib or voyager, never call load_index() on user-uploaded or untrusted index files without verifying that the header’s cur_element_count does not exceed max_elements_. In Ansible playbooks using ansible.builtin.git, validate that external repository URLs match ^(https?|ssh|git):// and never begin with -.

Timeline

  • 2026-09-18 to 2026-09-25: Benthos v4.81.0 (2026-09-18) and Redpanda Connect v4.111.0 (2026-09-25) gate the streams-mode HTTP CRUD routes behind --bind-http.
  • 2026-11-03 (18:18 UTC): NVD publishes CVE-2026-63436 for org.zeroturnaround:zt-zip 1.18.0 (commit 59a76ad576b0).
  • 2026-11-06 to 2026-11-07: GStreamer publishes SA-2026-0095 (gst-plugins-good 1.28.9); CPython merges PR #161507 (CVE-2026-19552, 8dde46eaa6ba) and PR #161570 (CVE-2026-124249, 8eb3d2c1c41c).
  • 2026-11-09 (13:17 to 15:17 UTC): NVD and oss-security publish CVE-2026-119610 (GStreamer), CVE-2026-119743 (pdfmake 0.3.14), CVE-2026-124249 and CVE-2026-19552 (CPython), and CVE-2026-124959 / CERT/CC VU#681158 (hnswlib and Spotify voyager).
  • 2026-11-09 (16:05 to 18:50 UTC): RustSec assigns RUSTSEC-2026-0463 (GHSA-8c75-8mhr-p7r9 / CVE-2026-41678) to the openssl crate (16:13 UTC); NVD and CERT/CC publish CVE-2026-124683 (langium 4.4.1), CVE-2026-123270 (Redpanda Connect), CVE-2026-123797 (GHSA-q7mc-f2jm-r4gr, SuperTokens Core 12.0.8), and CVE-2026-84503 (ansible-core); and GitHub publishes the reviewed advisory GHSA-52c6-99qm-3hqr (CVE-2026-63436) for zt-zip 1.18.0 (18:47 UTC).

From research to remediation

Check whether this pattern exists in your codebase

Turn this research into a remediation workflow. Scan dependencies and package manifests for similar supply-chain risk, then prioritize fixes with reachability context.

References