183.4.5. polymorphic deserialization의 보안 위험

JSON 콘텐츠를 역직렬화하여 FasterXML jackson-databind 라이브러리를 사용하여 Java 개체를 인스턴스화하는 애플리케이션은 원격 코드 실행 공격에 잠재적으로 취약할 수 있습니다. 그러나 이 취약점은 자동으로 작동하지 않으며 적절한 완화 조치를 수행하면 방지할 수 있습니다.

최소한 공격을 가능하게 하기 전에 다음 사전 요구 사항을 충족해야 합니다.

  1. jackson-databind 에서 JSON 콘텐츠의 역직렬화에 대한 다형 유형 처리를 활성화했습니다. Jackson JSON에서 다형성 유형 처리를 가능하게하는 두 가지 다른 방법이 있습니다.

    1. @JsonTypeInfo@JsonSubTypes 주석의 조합을 사용합니다.
    2. ObjectMapper.enableDefaultTyping() 메서드를 호출합니다. 이 옵션은 전 세계적으로 다형성 입력을 효과적으로 가능하게 하므로 특히 위험합니다.
  2. Java classpath에는 하나 이상 의 가젯 클래스가 있습니다. 가젯 클래스는 생성자 또는 설정 요소(Deserialization 동안 호출할 수 있는 메서드)를 실행할 때 중요한 작업을 수행할 수 있는 모든 클래스로 정의됩니다.A gadget class is defined as any class that performs a sensitive (potentially exploitable) operation as a side effect of executing a constructor or a setter method (which are the methods that can be called during a deserialization).
  3. Java 클래스 경로의 하나 이상의 가젯 클래스는 아직 잭son-databind 의 현재 버전에 의해 블랙리스트되지 않았습니다. jackson-databind 라이브러리의 표준 배포를 사용하는 경우 Jackson JSON 라이브러리에서 유지 관리하는 가젯 블랙리스트는 원격 코드 실행 취약점에 대한 마지막 방어선입니다.
  4. (Red Hat은 jackson-databind 라이브러리만 배포) 수신자의 deserialization 허용 목록에 가젯 클래스 중 하나를 명시적으로 추가했습니다( jackson.deserialization.whitelist.packages 시스템 속성을 설정하여). 이 작업을 수행할 수 없기 때문에 화이트리스트 메커니즘은 기본적으로 모든 가젯 클래스에 대한 효과적인 보호 기능을 제공합니다.