CVE
CVE-2026-68982, CVE-2026-86829, CVE-2026-76185, CVE-2026-82337, CVE-2026-96285, CVE-2026-111421, CVE-2026-111395, CVE-2026-107474, CVE-2026-50204, CVE-2026-113504, CVE-2026-111452, CVE-2026-86468, CVE-2026-101031, CVE-2026-113508, CVE-2026-111453, CVE-2026-111454, CVE-2026-111455, CVE-2026-40913, CVE-2026-123870, CVE-2026-123717, CVE-2026-92683, CVE-2026-82436, CVE-2026-82440, CVE-2026-120761, CVE-2026-123753, CVE-2026-120832, CVE-2026-123766, CVE-2026-123770, CVE-2026-120367, CVE-2026-123779
CWE
CWE-502, CWE-306, CWE-94, CWE-863, CWE-918, CWE-611, CWE-400, CWE-522, CWE-78
Affected Surface
- PyPI `apache-airflow` versions `< 3.4.0` and `apache-airflow-task-sdk` versions `>= 1.2.0, < 1.4.0` (18 CVEs: `CVE-2026-68982`, `CVE-2026-86829`, `CVE-2026-76185`, `CVE-2026-82337`, `CVE-2026-96285`, `CVE-2026-111421`, `CVE-2026-111395`, `CVE-2026-107474`, `CVE-2026-50204`, `CVE-2026-113504`, `CVE-2026-111452`, `CVE-2026-86468`, `CVE-2026-101031`, `CVE-2026-113508`, `CVE-2026-111453`, `CVE-2026-111454`, `CVE-2026-111455`, and `CVE-2026-40913`)
- crates.io `rmcp` (`modelcontextprotocol/rust-sdk`) versions `>= 0.2.0, < 3.9.0` (`RUSTSEC-2026-0457` / `GHSA-5p52-q7pq-9fq2` fixed in `3.7.0`, `RUSTSEC-2026-0461` / `GHSA-4432-vg92-fqh6` fixed in `3.6.0`, and `RUSTSEC-2026-0462` / `GHSA-c9f9-cp8h-jcj5` fixed in `3.9.0`)
- PyPI `otterdog` (`eclipse-csi/otterdog` `< 1.8.0` for `CVE-2026-123717` / `GHSA-886p-g538-rcmp` CVSS 8.8 High in `pass` and `bitwarden` credential providers, and webapp prior to commit `bbc9e3ced366` for `CVE-2026-123870` / `GHSA-32xf-7j44-xq72` CVSS 9.5 Critical) and npm `@neo4j/graphql` versions `>= 7.0.0, < 7.6.7` (`CVE-2026-92683` / `GHSA-58qp-3mmm-5vh8`, CVSS 8.6 High)
- Maven `org.apache.storm:storm-client` and `storm-server` versions `>= 3.0.0, < 3.1.0` (`CVE-2026-82436` Important and `CVE-2026-82440` Moderate, fixed in `3.1.0`) and `org.apache.axis2:*` versions `< 2.0.2` (`CVE-2026-120761`, `CVE-2026-123753`, `CVE-2026-120832`, `CVE-2026-123766`, `CVE-2026-123770`, `CVE-2026-120367`, and `CVE-2026-123779`, fixed in `2.0.2`)
Update, 10 November 2026: On 10 November 2026 (12:17 UTC), the Eclipse Foundation released Eclipse otterdog 1.8.0 on PyPI and published CVE-2026-123717 / GHSA-886p-g538-rcmp (CVSS 8.8 High, fixed in commit e3cc9997026a). In otterdog <= 1.7.1, otterdog/credentials/pass_provider.py and otterdog/credentials/bitwarden_provider.py invoked subprocess.getstatusoutput(f"pass {key} 2>/dev/null") and subprocess.getstatusoutput(f"bw get item {item_id}"), which pass the formatted string directly to /bin/sh -c (otterdog/operations/canonical_diff.py also invoked asyncio.create_subprocess_shell(f"diff --label {name_a} ...")). Any user able to modify an organization configuration could place shell metacharacters or leading - flags inside a pass:<path> or bitwarden:<item>@<field> secret reference to execute arbitrary commands as the operator running otterdog (with full access to the unlocked pass or Bitwarden vault). Version 1.8.0 replaces subprocess.getstatusoutput() and create_subprocess_shell() with an argv-based run_command_sync() helper (subprocess.run([cmd, *args], shell=False)), passes explicit "show" to pass, and rejects keys or item IDs starting with "-".
TL;DR
On 9 November 2026 (05:02 to 11:17 UTC), the Apache Software Foundation, the RustSec Advisory Database, the Eclipse Foundation, and Neo4j published 33 advisories across data pipelines, Model Context Protocol (MCP) SDKs, GraphQL authorization layers, and enterprise Java services:
- Apache Airflow
3.4.0and Task SDK1.4.0patch 18 CVEs (oss-security 2026/11/09/3through09/20):- Unvalidated
ExecuteCallbackworkloads onCeleryExecutorworkers (CVE-2026-68982, Important): Celery workers ranExecuteCallbackdeadline-alert workloads without validating or redeeming the workload JWT with the Execution API, allowing any party with write access to the Celery broker (such as Redis or RabbitMQ) to execute arbitrary Python code on every Celery worker without Airflow credentials. - Scheduler and API server object deserialization (
CVE-2026-86829Important,CVE-2026-82337Moderate,CVE-2026-96285Moderate,CVE-2026-111421Moderate, andCVE-2026-111395Moderate): The Airflow scheduler deserialized task-written XCom values withfull=True(XComDecoder.object_hook) insideNotPreviouslySkippedDepandTriggerRuleDep, letting a DAG author instantiate arbitraryairflow.*classes inside the privileged scheduler process (CVE-2026-86829). Three companion advisories fix incomplete patches for earlier CVEs:DeadlineAlertcallbackandintervalfields (CVE-2026-82337, incomplete fix forCVE-2026-45360),next_kwargsdeserializing nested objects before checkingisinstance(..., dict)(CVE-2026-96285, incomplete fix forCVE-2026-67260), and Task Execution APIset_xcomskipping reserved-key checks (CVE-2026-111421, incomplete fix forCVE-2026-59242). - Multi-team
SecretCachekey collision (CVE-2026-76185, Important) and 11 secret-exposure, CLI, and RBAC flaws: Inapache-airflow-task-sdk1.2.0to1.3.2,SecretCachejoinedprefix, optionalteam_name, andkeywith unescaped_delimiters (f"{prefix}_{team_name}_{key}"), so a teamless task requesting Variable_analytics_DB_PASSWORDcollided with teamanalytics’sDB_PASSWORDsecret. Eleven additional CVEs fix cleartext secrets in audit logs (CVE-2026-50204,CVE-2026-86468), Apprise connectionconfigextras (CVE-2026-107474), camelCase and depth-5 secret-masker bypasses (CVE-2026-111452,CVE-2026-113504), IPv6 zone-ID command injection inexample_dag_decorator(CVE-2026-101031, incomplete fix forCVE-2025-54941), silent logout token revocation failures (CVE-2026-113508), and asset/connection RBAC gaps (CVE-2026-111453to111455,CVE-2026-40913).
- Unvalidated
- Official Rust MCP SDK
rmcp3.6.0/3.7.0/3.9.0(RUSTSEC-2026-0457,RUSTSEC-2026-0461,RUSTSEC-2026-0462):rmcp’s OAuth client validated authorization-server metadata URLs by checking only the URL host string without resolving DNS, failed to strip brackets from IPv6 literals (http://[::1]:6379/), and skippedtoken_endpointandregistration_endpointchecks (RUSTSEC-2026-0457, fixed in3.7.0);StreamableHttpServicecachedServerHandler::get_toolin an unbounded map keyed by untrustedtools/callnames before authentication (RUSTSEC-2026-0461, fixed in3.6.0); and Streamable HTTP clients buffered unbounded response bodies duringinitialize(RUSTSEC-2026-0462, fixed in3.9.0). - Eclipse
otterdog(CVE-2026-123870, CVSS 9.5 Critical) and Neo4j@neo4j/graphql7.6.7(CVE-2026-92683, CVSS 8.6 High): Inotterdog,_log_event()evaluatedeval(EVENT_FILTER[event_type].format(**data))on incoming GitHub webhook payloads while_get_digest()skippedX-Hub-Signatureverification wheneverGITHUB_WEBHOOK_SECRETwas left at itsNonedefault. In@neo4j/graphql7.0.0through7.6.6,filterByValues()returned immediately after evaluating the first condition in a multi-condition@authentication(jwt: ...)filter, ignoring all subsequent role or claim checks. - Apache Storm
3.1.0(CVE-2026-82436,CVE-2026-82440) and Apache Axis2/Java2.0.2(7 CVEs): Storm3.0.0configured Kryo inDefaultStateSerializerwithsetRegistrationRequired(false)andStdInstantiatorStrategy, allowing anyone able to write to a shared Redis state store to execute arbitrary code in worker JVMs (CVE-2026-82436), and treated an unsetnimbus.scheduler.strategy.class.whitelistas “allow any class” (CVE-2026-82440). Axis22.0.2fixes WSDL import XXE inwsdl4j(CVE-2026-120761), unauthenticated SSRF via non-anonymous WS-Addressingwsa:ReplyTo/wsa:FaultToendpoints (CVE-2026-123753) andwsdl:import/xsd:importURLs (CVE-2026-120832), OpenAPI Swagger UIHost-header XSS (CVE-2026-123766), unbounded multipart/JSON request body OOMs (CVE-2026-123770,CVE-2026-120367), and?wsdlforced browsing (CVE-2026-123779).
What to do now: Upgrade apache-airflow to >= 3.4.0 and apache-airflow-task-sdk to >= 1.4.0, rmcp to >= 3.9.0, @neo4j/graphql to >= 7.6.7, Apache Storm (org.apache.storm:*) to 3.1.0, Apache Axis2 (org.apache.axis2:*) to 2.0.2, and deploy Eclipse otterdog with commit bbc9e3ced366 and a non-empty GITHUB_WEBHOOK_SECRET.
Affected packages and components
| Ecosystem | Package / Project | CVE / Advisory | Severity | Affected versions | Fixed version |
|---|---|---|---|---|---|
| PyPI | apache-airflow | CVE-2026-68982, CVE-2026-86829, CVE-2026-82337, CVE-2026-96285, CVE-2026-111421, CVE-2026-111395, CVE-2026-107474, CVE-2026-50204, CVE-2026-113504, CVE-2026-111452, CVE-2026-86468, CVE-2026-101031, CVE-2026-113508, CVE-2026-111453..111455, CVE-2026-40913 | Important (High) / Moderate / Low | < 3.4.0 (96285 and 111455 affect >= 3.3.0, < 3.4.0; 111453 affects 3.3.2) | 3.4.0 |
| PyPI | apache-airflow-task-sdk | CVE-2026-76185 | Important (High) | >= 1.2.0, < 1.4.0 | 1.4.0 (with Airflow 3.4.0) |
| crates.io | rmcp (modelcontextprotocol/rust-sdk) | RUSTSEC-2026-0457 (GHSA-5p52-q7pq-9fq2), RUSTSEC-2026-0461 (GHSA-4432-vg92-fqh6), RUSTSEC-2026-0462 (GHSA-c9f9-cp8h-jcj5) | High (7.5) / Medium | >= 2.0.0, < 3.7.0 (0457); >= 3.0.0, < 3.6.0 (0461); >= 0.2.0, < 3.9.0 (0462) | 3.9.0 (3.7.0 for 0457; 3.6.0 for 0461) |
| PyPI / Python | otterdog (eclipse-csi/otterdog) | CVE-2026-123870 (GHSA-32xf-7j44-xq72) | Critical (9.5) | Prior to commit bbc9e3ced366 | Commit bbc9e3ced366 |
| npm | @neo4j/graphql | CVE-2026-92683 (GHSA-58qp-3mmm-5vh8) | High (8.6) | >= 7.0.0, < 7.6.7 | 7.6.7 |
| Maven | org.apache.storm:storm-client, storm-server | CVE-2026-82436, CVE-2026-82440 | Important (High) / Moderate | >= 3.0.0, < 3.1.0 | 3.1.0 |
| Maven | org.apache.axis2:axis2-kernel, axis2-addressing, axis2-json, axis2-openapi | CVE-2026-120761, CVE-2026-123753, CVE-2026-120832, CVE-2026-123766, CVE-2026-123770, CVE-2026-120367, CVE-2026-123779 | High / Medium | < 2.0.2 | 2.0.2 |
Technical analysis
1. Apache Airflow 3.4.0: CeleryExecutor forged callbacks (CVE-2026-68982), Scheduler XCom deserialization (CVE-2026-86829), and SecretCache collisions (CVE-2026-76185)
In Airflow 3’s Task Execution API architecture, workers do not connect directly to the metadata database; instead, the scheduler mints a scoped JWT for each workload (ExecuteTask or ExecuteCallback). For normal tasks, the worker redeems that workload token at PATCH /execution/task-instances/{ti_id}/run before running user code. However, for ExecuteCallback workloads (used by deadline alerts), supervise_callback() in task-sdk/src/airflow/sdk/execution_time/callback_supervisor.py imported and executed the callback subprocess directly from the broker payload without ever calling the Execution API (CVE-2026-68982). Anyone with network write access to the Celery broker (Redis or RabbitMQ) could enqueue a crafted ExecuteCallback message with a dummy token and execute arbitrary commands on every CeleryExecutor worker. PR #71192 stamps ExecuteCallback tokens with token_scope = "callback" and requires supervise_callback() to exchange the single-use token via PATCH /execution/callbacks/{callback_id}/run (which atomically transitions Callback.state from QUEUED to RUNNING and returns 409 on replay) before starting CallbackSubprocess.
Meanwhile, in the scheduler, NotPreviouslySkippedDep and TriggerRuleDep read skipmixin_key and past_depends_met XCom values by calling ti.xcom_pull(), which invoked XComModel.deserialize_value() (json.loads(value, cls=XComDecoder) with full=True). A task that wrote a pre-serialized {"__classname__": "...", "__version__": 1, "__data__": ...} envelope via the Execution API (XComModel.set(..., serialize=False)) caused the scheduler process itself to import and instantiate the named class during dependency evaluation (CVE-2026-86829). PR #72718 adds XComModel.deserialize_value_primitives() (plain json.loads with no object_hook) and passes full=False across all scheduler dependency checks.
In apache-airflow-task-sdk (CVE-2026-76185, PR #72201), SecretCache constructed its internal dictionary key by string concatenation:
--- a/task-sdk/src/airflow/sdk/execution_time/cache.py
+++ b/task-sdk/src/airflow/sdk/execution_time/cache.py
@@ -45,7 +60,18 @@ class SecretCache:
_VARIABLE_PREFIX = "__v_"
_CONNECTION_PREFIX = "__c_"
- _TEAM_PATTERN = "_{}_"
+
+ @staticmethod
+ def _key(prefix: str, team_name: str | None, key: str) -> _CacheKey:
+ return _CacheKey(prefix, team_name, key)
Because team = f"_{team_name}_" if team_name else "" was concatenated into f"{prefix}{team}{key}", team analytics saving Variable DB_PASSWORD wrote to key "__v__analytics_DB_PASSWORD", which is byte-for-byte identical to a teamless task requesting Variable "_analytics_DB_PASSWORD" or team analytics_DB requesting "PASSWORD". Replacing the string key with _CacheKey(NamedTuple) ((prefix, team_name, key)) makes cache lookups injective.
2. Official Rust MCP SDK rmcp 3.6.0 / 3.7.0 / 3.9.0 (RUSTSEC-2026-0457, RUSTSEC-2026-0461, RUSTSEC-2026-0462)
Three advisories in modelcontextprotocol/rust-sdk (rmcp) harden both the MCP client and server transports:
- OAuth discovery DNS,
[::1], and token-endpoint SSRF (RUSTSEC-2026-0457/GHSA-5p52-q7pq-9fq2, fixed in3.7.0via commitac808abcb40d): When a remote MCP server returned Protected Resource Metadata naming an authorization server,rmcp(>= 2.0.0, < 3.7.0) checked only the literal host string in the metadata URL against private IP ranges and cloud metadata hostnames (metadata.google.internal). It never resolved DNS (so any attacker domain with anArecord pointing to127.0.0.1,10.0.0.1, or169.254.169.254passed), matched onUrl::host_str()which retained square brackets around IPv6 literals (http://[::1]:6379/was not recognized as loopback), and did not checktoken_endpoint,registration_endpoint, or HTTP redirects at all. Commitac808abcb40dadds a customreqwest::dns::Resolveimplementation (crates/rmcp/src/transport/auth/metadata_resolver.rs) that classifies every resolvedSocketAddr(including NAT64 and IPv4-mapped IPv6 addresses) before dialing, derives the allowed address class strictly from the base MCP server URL literal, and validates every redirect and endpoint URL. - Unbounded
ServerHandler::get_toolcache (RUSTSEC-2026-0461/GHSA-4432-vg92-fqh6, fixed in3.6.0via PR#1349) and unbounded client HTTP response buffering (RUSTSEC-2026-0462/GHSA-c9f9-cp8h-jcj5, fixed in3.9.0via commit3e0156c1eaf1): On the server side (3.0.0to3.5.1),StreamableHttpServicecachedget_toollookups in an unbounded process-wide map keyed by the incomingtools/callname during header validation, caching even unknown 4 MiB tool names on requests later rejected with HTTP 400. On the client side (0.2.0to3.8.0), both thereqwestand Unix-socket Streamable HTTP clients buffered non-streamingapplication/jsonand error response bodies in full without a byte cap, allowing a malicious MCP server to OOM-kill the host agent application duringinitializeby streaming infinite whitespace. Version3.9.0addsread_bounded_body()(crates/rmcp/src/transport/common/client_side_http.rs), capping JSON responses at 16 MiB and error bodies at 64 KiB after decompression.
3. Eclipse otterdog webhook eval() (CVE-2026-123870), @neo4j/graphql 7.6.7 (CVE-2026-92683), Apache Storm 3.1.0, and Axis2 2.0.2
- Eclipse
otterdogunauthenticated GitHub webhookeval()RCE (CVE-2026-123870/GHSA-32xf-7j44-xq72, CVSS 9.5 Critical, commitbbc9e3ced366): Inotterdog/webapp/webhook/github_webhook.py,GITHUB_WEBHOOK_SECRETdefaulted toNone, causing_get_digest()to returnNoneand_post_receive()to skipX-Hub-Signatureverification whenever the secret was unset or empty. Immediately afterward,_log_event(event_type, data)interpolated the parsed JSON body into a format string and passed it to Python’seval():
Sending--- a/otterdog/webapp/webhook/github_webhook.py +++ b/otterdog/webapp/webhook/github_webhook.py @@ -150,16 +150,16 @@ def _get_header(key): EVENT_FILTER = { - "workflow_job": "'{action}' == 'queued'", - "workflow_run": "'{action}' == 'completed'", + "workflow_job": lambda data: data.get("action") == "queued", + "workflow_run": lambda data: data.get("action") == "completed", } def _log_event(event_type, data) -> bool: - try: - return eval(EVENT_FILTER[event_type].format(**data)) # noqa: S307 - except KeyError: + event_filter = EVENT_FILTER.get(event_type) + if event_filter is None: return True + return event_filter(data)X-Github-Event: workflow_jobwith{"action": "' or __import__('os').system('...') or '"}executed arbitrary OS commands on the webapp server. - Neo4j
@neo4j/graphql7.6.7multi-condition@authenticationbypass (CVE-2026-92683/GHSA-58qp-3mmm-5vh8, CVSS 8.6 High, commita077f3cdf38c): Inpackages/graphql/src/translate/authorization/utils/filter-by-values.ts,filterByValues()iterated over the key-value entries of ajwtwherefilter, but its generic-operator branch executedreturn filterByValuesOnGenericOperator(...)directly inside theforloop:
On any schema rule with two or more top-level JWT conditions (such as--- a/packages/graphql/src/translate/authorization/utils/filter-by-values.ts +++ b/packages/graphql/src/translate/authorization/utils/filter-by-values.ts @@ -31,12 +31,17 @@ export function filterByValues<T>( const { fieldName, operator } = parseFilterProperty(k); if (!operator) { - return filterByValuesOnGenericOperator({ - fieldName, - receivedValues, - jwtClaims, - value: v as Record<string, any>, - }); + if ( + !filterByValuesOnGenericOperator({ + fieldName, + receivedValues, + jwtClaims, + value: v as Record<string, any>, + }) + ) { + return false; + } + continue; }jwt: { iss: { eq: "https://idp.example.com" }, roles: { includes: "admin" } }), any valid JWT whose first field matched (iss) causedfilterByValuesto returntrueon the first iteration without ever checkingroles. - Apache Storm
3.1.0(CVE-2026-82436,CVE-2026-82440) and Apache Axis2/Java2.0.2(CVE-2026-120761,CVE-2026-123753): In Storm3.0.0,DefaultStateSerializerinitialized Kryo withobj.setRegistrationRequired(false)andStdInstantiatorStrategy(Objenesis), allowing a co-tenant or network attacker who could write to the topology’s Redis state keyspace to plant an arbitrary Java object graph deserialized inside the worker JVM (commit6d36a14d9eenables class registration viaStateClassResolver), while Nimbus allowed topologies to instantiate any no-arg class on the Nimbus classpath (such asorg.apache.storm.testing.InProcessZookeeper) whennimbus.scheduler.strategy.class.whitelistwas unset (commitf6b7be390b). In Axis2< 2.0.2,AxisService.createClientSideAxisService(URL)enabledjavax.wsdl.importDocuments = trueonwsdl4j, whose internalDocumentBuilderFactorylacked XXE protections when parsing<wsdl:import>and<xsd:import>targets (commit1d3457d12399disables remote WSDL imports by default and addsSecureWSDLLocator), andResponseEndpointPolicyallowed non-anonymous WS-Addressingwsa:ReplyToandwsa:FaultToURLs by default (commit1b6856b4d790setsallowNonAnonymousResponseEndpoints = falseby default).
IOCs
- Airflow database and broker indicators:
- Unexpected
ExecuteCallbackmessages enqueued directly into Celery Redis/RabbitMQ queues without a correspondingCallbackrow inCallbackState.QUEUED(CVE-2026-68982). - XCom rows under
skipmixin_keyorpast_depends_metcontaining"__classname__"serialization envelopes (CVE-2026-86829), or Variable/Connection lookups containing leading underscores (_<team>_<key>) in multi-team environments (CVE-2026-76185).
- Unexpected
- Eclipse
otterdogand Axis2 request indicators:- POST requests to the
otterdogGitHub webhook endpoint carryingX-Github-Event: workflow_joborworkflow_runwith quotes or Python expressions inside the JSONactionfield (CVE-2026-123870). - SOAP requests carrying non-anonymous
<wsa:ReplyTo>or<wsa:FaultTo>headers (CVE-2026-123753) or WSDL documents with remote<wsdl:import>/<!DOCTYPE>declarations (CVE-2026-120761,CVE-2026-120832).
- POST requests to the
Detection and remediation
# 1. Check Python environments and lockfiles for apache-airflow, apache-airflow-task-sdk, and otterdog
pip show apache-airflow apache-airflow-task-sdk otterdog 2>/dev/null || true
rg -n '"?(apache-airflow|apache-airflow-task-sdk|otterdog)"?\s*([~=!<>]=|:)' \
requirements*.txt pyproject.toml uv.lock poetry.lock 2>/dev/null
# 2. Check Rust Cargo.lock for rmcp, npm lockfiles for @neo4j/graphql, and Maven/Gradle for Storm and Axis2
rg -n -A 2 'name = "rmcp"' Cargo.lock 2>/dev/null
rg -n '"@neo4j/graphql"' package.json package-lock.json pnpm-lock.yaml yarn.lock 2>/dev/null
rg -n 'org\.apache\.(storm|axis2)' pom.xml build.gradle* 2>/dev/null
- Upgrade Apache Airflow to
>= 3.4.0andapache-airflow-task-sdkto>= 1.4.0: After upgrading, purge pre-upgrade audit-log rows (Log.extra) that recorded cleartext Connection, Variable, or CLI--conn-extrasecrets (CVE-2026-50204,CVE-2026-86468) and rotate any credentials that were readable by low-privileged audit-log viewers or multi-team DAG authors (CVE-2026-76185,CVE-2026-107474). If you cannot upgrade immediately, setsecrets.use_cache = False(forCVE-2026-76185) andload_examples = False(forCVE-2026-101031). - Upgrade
rmcpto>= 3.9.0and@neo4j/graphqlto>= 7.6.7: In@neo4j/graphql, review any@authenticationdirective that combines multiple conditions insidejwt: { ... }to determine whether non-admin token holders accessed protected queries prior to7.6.7. - Upgrade Apache Storm to
3.1.0and Apache Axis2/Java to2.0.2: When upgrading Storm to3.1.0, register any custom state key/value classes intopology.state.kryo.register(CVE-2026-82436). On Axis2 deployments that cannot immediately upgrade to2.0.2, set<parameter name="allowNonAnonymousResponseEndpoints">false</parameter>inaxis2.xml.
Timeline
- 2026-05-06 to 2026-08-29: Upstream fixes land in
eclipse-csi/otterdog(bbc9e3ced366),apache/axis-axis2-java-core(1d3457d12399,1b6856b4d790),apache/storm(6d36a14d9e,f6b7be390b), andapache/airflow(PR #71192,PR #72201). - 2026-10-15 to 2026-11-05: Neo4j commits
a077f3cdf38cand releases@neo4j/graphql@7.6.7;modelcontextprotocol/rust-sdkmerges commitsac808abcb40d(rmcp 3.7.0) and3e0156c1eaf1(rmcp 3.9.0). - 2026-11-06 (
oss-security 2026/11/06/22to06/28): Apache announces the seven Axis2/Java2.0.2advisories onoss-security. - 2026-11-09 (
05:02to11:17 UTC): Apache announces the two Storm3.1.0CVEs and 18 Airflow3.4.0CVEs onoss-security; NVD publishesCVE-2026-123870(otterdog),CVE-2026-92683(@neo4j/graphql), and the Axis2/Airflow/Storm CVEs; and RustSec assignsRUSTSEC-2026-0457,RUSTSEC-2026-0461, andRUSTSEC-2026-0462tormcp.
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
- oss-security (9 November 2026): Apache Airflow 3.4.0 advisories CVE-2026-68982 (PR #71192), CVE-2026-86829 (PR #72718), CVE-2026-76185 (PR #72201), CVE-2026-82337, CVE-2026-96285, and CVE-2026-111421
- RustSec Advisories RUSTSEC-2026-0457 (GHSA-5p52-q7pq-9fq2), RUSTSEC-2026-0461 (GHSA-4432-vg92-fqh6), and RUSTSEC-2026-0462 (GHSA-c9f9-cp8h-jcj5) for rmcp (9 November 2026)
- eclipse-csi/otterdog commit bbc9e3ced366 and GHSA-32xf-7j44-xq72 (CVE-2026-123870: GitHub webhook eval RCE)
- eclipse-csi/otterdog v1.8.0 Advisory GHSA-886p-g538-rcmp and commit e3cc9997026a (10 November 2026, CVE-2026-123717: pass and bitwarden shell command injection)
- neo4j/graphql commit a077f3cdf38c and GHSA-58qp-3mmm-5vh8 (CVE-2026-92683: @authentication JWT where filter bypass)
- oss-security (9 November 2026): Apache Storm 3.1.0 advisories CVE-2026-82436 (commit 6d36a14d9e) and CVE-2026-82440 (commit f6b7be390b)
- Apache Axis2/Java 2.0.2 release notes and commits 1d3457d12399 (CVE-2026-120761) and 1b6856b4d790 (CVE-2026-123753)