Apache XML-RPC

1. 개요

1.1 보고서 작성 목적

Apache XML-RPC에서 발견된 CVE-2019-17570 취약점의 원인과 해결 방안을 분석하고, 실무에서 적용 가능한 안전한 구현 방법을 제공합니다.

1.2 보고서 작성 배경

기존 보안 가이드나 도구는 “패치 없음”으로만 표시되어 개발자에게 구체적인 해결책을 제공하지 못하는 경우가 많습니다. 본 보고서는 보안 담당자가 실용적인 가이드를 직접 제공하여 개발자와의 협업 효율을 높이고자 합니다.

1.3 Apache XML-RPC 개요

Java 기반의 XML-RPC를 구현한 라이브러리로, 현재는 공식적으로 유지보수되지 않고 있습니다.

1.4 CVE-2019-17570 소개

클라이언트가 신뢰할 수 없는 서버 응답을 역직렬화하는 취약점으로, 원격 코드 실행(RCE) 가능성이 있습니다.

2. 취약점 상세 분석

2.1 개요 및 영향

  • CWE-502: 신뢰되지 않은 데이터의 역직렬화
  • 악의적인 서버가 전달한 객체를 클라이언트가 역직렬화하여 임의 코드 실행 가능

2.2 발생 원인

Object exception = map.get("faultCause");
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream((byte[]) exception));
errorCause = (Throwable) ois.readObject(); // 취약한 코드

2.3 PoC 시나리오

조작된 faultCause 객체를 전달하는 서버 → 클라이언트에서 자동 역직렬화 → 코드 실행

3. 패치 분석

3.1 주요 개선점

  • isEnabledForExceptions 플래그를 추가해 조건부 역직렬화
  • SAXParser에서 외부 DTD 로딩 차단

3.2 패치 전후 코드 비교

패치 후:

if (((XmlRpcStreamRequestConfig) cfg).isEnabledForExceptions()) {
    Object exception = map.get("faultCause");
    ...
}

DTD 차단:

spf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);

3.3 직접 패치 예시

4. 배포판별 관리 및 Maven 주의사항

4.1 배포판별 보안 패치

  • Debian, Red Hat, Amazon Linux: 각각 보안 패치 적용 후 관리

4.2 Maven의 한계

  • 공식 저장소에 패치된 버전 없음 → 배포판 패키지 또는 포크 버전 사용 권장

4.3 안전한 대안

<dependency>
  <groupId>com.evolvedbinary.thirdparty.org.apache.xmlrpc</groupId>
  <artifactId>xmlrpc-client</artifactId>
  <version>4.0.0</version>
</dependency>

5. 안전한 구현 예제

XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
config.setServerURL(new URL("http://trusted-server.com/RPC2"));
config.setEnabledForExceptions(false); // 역직렬화 비활성화

// 외부 DTD 비활성화
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
SAXParsers.setSAXParserFactory(spf);

6. 결론 및 권장사항

  • 배포판 보안 패치 사용
  • evolvedbinary 포크 버전 사용
  • 장기적으로는 gRPC, JAX-WS, SOAP 등으로 마이그레이션 고려

이 글은 CVE-2019-17570에 대한 실질적 보안 대응을 위한 분석 보고서입니다. 모든 코드와 패치 정보는 실무 환경에서도 직접 활용할 수 있도록 구성되었습니다.