CVE-2026-43910: Appium java-client Allows Network Pivot via Unvalidated directConnect Redirect in AppiumCommandExecutor

Published Jul 28, 2026
·
Updated

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

2 affected componentsFixes available
maven/io.appium:java-client>=8.2.1<=10.1.0
10.1.1
appium java-client>=8.2.1<10.1.1

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade maven/io.appium:java-client to a version that resolves this vulnerability.

    Fixed in 10.1.1
  2. Upgrade

    Upgrade appium/java-client to a version that resolves this vulnerability.

    Fixed in 10.1.1
  3. 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
  4. 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

Jul 28, 2026
Advisory Published
via GitHub·02:26 PM
Data Sourced
via GitHub·02:26 PM
DescriptionSeverityWeaknessAffected Software
CVE Published
via MITRE·03:38 PM
Data Sourced
via MITRE·03:38 PM
DescriptionSeverityWeakness
Data Sourced
via NVD·04:18 PM
RemedyDescriptionSeverityWeaknessAffected Software

Frequently Asked Questions

1

What is the severity of CVE-2026-43910?

The severity of CVE-2026-43910 is high, rated at 8.2 on the CVSS scale.

2

What type of vulnerability is CVE-2026-43910?

CVE-2026-43910 is a Server-Side Request Forgery (SSRF) vulnerability.

3

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.

4

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.

5

Which software is affected by CVE-2026-43910?

CVE-2026-43910 affects the maven/io.appium:java-client library.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203