🇰🇷 한글 설명
Appium Java Client는 W3C WebDriver 프로토콜을 따르는 Appium 테스트 작성을 위한 Java 바인딩입니다. 8.2.1부터 10.1.1 이전 버전에서 directConnect(true)가 활성화된 경우, 서버의 NEW_SESSION 응답에 포함된 directConnectHost, directConnectPort, directConnectPath 값으로 클라이언트의 서버 URL을 재구성하며, 프로토콜이 https인지만 검증하고 호스트 허용 목록이나 IP 검증이 없어 악의적이거나 침해된 서버가 모든 세션 트래픽을 임의의 목적지로 우회시킬 수 있습니다.
💡 쉬운 설명
Appium 테스트 도구가 서버 응답을 믿고 통신 주소를 바꾸는 문제입니다. 공격자가 서버를 장악하면 테스트 데이터를 가로채거나 내부 서버, 클라우드 메타데이터 자격증명까지 탈취할 수 있습니다.
🇺🇸 원문 (English)
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 NEW_SESSION 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.
📍 영향받는 시스템
Appium Java Client 8.2.1 이상 10.1.1 미만 (directConnect(true) 사용 시)
⚔️ 공격 벡터
악의적이거나 침해된 Appium 서버가 NEW_SESSION 응답의 directConnect 값을 조작하여 클라이언트 트래픽을 공격자 또는 내부 호스트(IMDS 포함)로 유도
🛡️ 대응 방법
Appium Java Client를 10.1.1 이상으로 업그레이드하고, 신뢰할 수 없는 서버에 directConnect 기능을 사용하지 않도록 설정
🔧 검증 코드
결과에서 appium java-client 버전이 10.1.1 미만(8.2.1~10.1.0 범위)으로 표시되면 취약하므로 10.1.1 이상으로 업그레이드가 필요하며, 결과가 없다면 해당 프로젝트에서 사용하지 않는 것입니다.
grep -rE 'java-client|appium' pom.xml build.gradle 2>/dev/null | grep -E 'version|10\.1\.1|8\.2|9\.'