CVE-2026-43910: Appium java-client Allows Network Pivot via Unvalidated directConnect Redirect in AppiumCommandExecutor
Summary
When directConnect(true) is enabled, appium/java-client unconditionally accepts directConnectHost, directConnectPort, and directConnectPath from the server's NEWSESSION response and silently redirects all subsequent session traffic to the attacker-specified endpoint — with no allowlist, no host validation, and no user notification.
Affected Code
- AppiumCommandExecutor.java (line 196–219): setDirectConnect() builds a new URL from server-supplied fields and calls overrideServerUrl(newUrl) without validating host/IP. - DirectConnect.java: getUrl() constructs protocol://host:port/path with no allowlist.
Root Cause
Only the protocol is validated (must equal "https"). The destination host and port are never checked against any allowlist or denylist.
PoC (confirmed)
A rogue server injecting directConnectHost=127.0.0.1:4443 causes the client to silently redirect all post-session commands:
[bootstrap] POST /wd/hub/session [bootstrap] Injecting directConnect -> https://127.0.0.1:4443/wd/hub [redirect-target] HIT #1: GET /wd/hub/session/poc-session-001/source [redirect-target] HIT #2: DELETE /wd/hub/session/poc-session-001
Original source code unmodified — confirmed via git diff HEAD (empty).
Evidence Screenshots
Screenshot 1 — Rogue server capturing redirected traffic:
<img width="887" height="146" alt="1" src="https://github.com/user-attachments/assets/cc28002c-ea20-4ac8-8336-cec632e3c842" />
Screenshot 2 — Java client processing response from attacker host:
<img width="788" height="130" alt="2" src="https://github.com/user-attachments/assets/222cbab0-0d53-45b2-847d-6aa4e3b79370" />
Impact
- Full interception of session traffic - Network pivot to internal hosts (RFC-1918, 169.254.169.254) - Cloud credential theft via IMDS endpoint - Escalates to ~8.1 High in CI/CD environments where directConnect(true) is set in shared base configuration
Suggested Fix
Add allowlist validation before overrideServerUrl() is called, and/or block RFC-1918/loopback/link-local destinations by default.
pocappiumdirectconnect.zip
Other sources
Appium Java Client is the Java language binding for writing Appium tests that conform to the W3C WebDriver protocol. From 8.2.1 until 10.1.1, when directConnect(true) is enabled, AppiumCommandExecutor.setDirectConnect() reads the directConnectHost, directConnectPort, and directConnectPath fields from the server's NEWSESSION response and rebuilds the client's server URL from them, validating only that the protocol is https, with no host allowlist or IP validation; a rogue or compromised server can therefore redirect all subsequent session traffic to an arbitrary destination, enabling full interception of session traffic and a server-side request forgery pivot to internal hosts, including cloud metadata (IMDS) credential theft. This vulnerability is fixed in 10.1.1.
— MITRE
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
maven/io.appium:java-clientto a version that resolves this vulnerability.Fixed in 10.1.1 - Upgrade
Upgrade
appium/java-clientto a version that resolves this vulnerability.Fixed in 10.1.1 - Configuration
If you do not need directConnect(true), disable directConnect so AppiumCommandExecutor.setDirectConnect() does not rebuild the client server URL from server-supplied directConnectHost/directConnectPort/directConnectPath.
Appium Java Client (directConnect) directConnect = false - Compensating control
Implement an allowlist validation for redirect destinations used by AppiumCommandExecutor/DirectConnect before overrideServerUrl() is called; additionally block RFC-1918/loopback/link-local destinations by default so server-supplied directConnectHost values like 127.0.0.1 cannot be used to pivot or capture traffic.
Event History
Frequently Asked Questions
What is the severity of CVE-2026-43910?
The severity of CVE-2026-43910 is high, rated at 8.2 on the CVSS scale.
What type of vulnerability is CVE-2026-43910?
CVE-2026-43910 is a Server-Side Request Forgery (SSRF) vulnerability.
How do I fix CVE-2026-43910?
To fix CVE-2026-43910, ensure that directConnect is not enabled or validate inputs to restrict the acceptance of arbitrary endpoints from the server's NEW_SESSION response.
What could happen if CVE-2026-43910 is exploited?
Exploitation of CVE-2026-43910 could allow an attacker to redirect session traffic to a malicious endpoint without user awareness.
Which software is affected by CVE-2026-43910?
CVE-2026-43910 affects the maven/io.appium:java-client library.