XMLDecoder를 이용한 불안전한 역직렬화 (Insecure Deserialization using XMLDecoder)

Deserialization of Untrusted Data

설명

java.beans.XMLDecoder를 사용하여 XML 데이터를 객체로 역직렬화(deserialization)할 때, 공격자가 악성 XML을 주입하여 원격 코드 실행(RCE) 등의 보안 취약점을 발생시킬 수 있습니다. 특히, XMLDecoder는 생성자 호출 시 객체의 생성자를 실행하므로, 공격자가 원치 않는 코드 실행을 유발할 수 있습니다.

잠재적 영향

  • 원격 코드 실행(RCE): 악성 객체가 역직렬화될 때 임의의 코드를 실행할 수 있음.

  • 권한 상승: 공격자가 애플리케이션의 내부 클래스에 접근하여 민감한 정보 또는 관리자 권한을 탈취할 수 있음.

  • 데이터 조작: 악성 XML을 통해 내부 객체의 필드를 변경할 수 있음.

해결 방법

  1. XMLDecoder 사용 금지

    • XMLDecoder 대신 안전한 JSON 라이브러리(Jackson, Gson 등)를 사용합니다.

  2. Custom ClassLoader 사용하여 불필요한 클래스 로딩 차단

    • ClassLoader를 오버라이드하여 허용된 클래스만 역직렬화되도록 제한합니다.

  3. 화이트리스트 기반의 역직렬화 정책 적용

    • 특정 클래스만 역직렬화가 가능하도록 제한하여 악성 객체 주입을 방지합니다.

취약한 코드 및 안전한 코드 예시

취약한 코드

안전한 코드

설명:

  • 취약한 코드:

    • XMLDecoder.readObject()를 사용하여 역직렬화를 수행하며, 악성 XML을 통해 ProcessBuilder를 실행하여 임의의 코드를 실행할 수 있음.

  • 안전한 코드:

    • ClassLoader를 오버라이드하여 String.class만 허용하고, 다른 클래스는 역직렬화하지 않도록 제한.

참조

Last updated