[하루한줄] CVE-2021-25646: Apache Druid 원격 코드 실행 취약점

URL

CVE-2021-25646 : Getting Code Execution on Apache Druid

Target

Apache Druid <= 0.20.0

Explain

Apache Druid는 Request를 통해 사용자 제공 JavaScript코드를 실행하는 기능이 있습니다. 이 기능은 신뢰도가 높은 환경에서 사용하기 위한 것이므로 기본적으로 비활성화되어 있습니다. 그러나 Druid 0.20.0 이전 버전에서는 서버 구성에 관계없이 사용자가 제공한 JavaScript 코드를 실행할 수 있는 취약점(CVE-2021-25646)이 발견되었습니다. 해커는 해당 취약점을 악용해 Druid 서버 프로세스의 권한으로 타겟 시스템에서 원격 코드실행을 할 수 있습니다.

CVE-2021-25646은 Apache Druid의 Jackson이 JavaScript 타입의 JSON 데이터 구문을 파싱하는 과정에서 발생합니다.

@JsonCreator 
public JavaScriptDimFilter(@JsonProperty("dimension") String dimension, @JsonProperty("function") 
            String function, @JsonProperty("extractionFn") @Nullable ExtractionFn extractionFn, 
            @JsonProperty("filterTuning") @Nullable FilterTuning filterTuning, 
            @JacksonInject JavaScriptConfig config) 
{ 
  Preconditions.checkArgument(dimension != null, "dimension must not be null"); 
  Preconditions.checkArgument(function != null, "function must not be null"); 
  this.dimension = dimension; 
  this.function = function; 
  this.extractionFn = extractionFn; 
  this.filterTuning = filterTuning; 
  this.config = config; 
}

JSON 데이터의 name속성이 “”일 때 빈 키값을 JavaScriptDimFilter 클래스의 config파라미터에 바인딩 시킬 수 있습니다. 따라서 해커는 JavaScript 실행 설정을 활성화하여 function 키값으로 제공한 JavaScript 코드를 실핼할 수 있습니다.