# VMware Aria Operations for Logs RCE (CVE-2023-20864)
[CVE này](https://nvd.nist.gov/vuln/detail/cve-2023-20864) mình dựng lại từ lâu rồi, lỗi không có gì phức tạp, [bài phân tích cũng có rồi](https://www.zerodayinitiative.com/blog/2023/6/29/cve-2023-20864-remote-code-execution-in-vmware-aria-operations-for-logs), nhưng gà 🐤 nên phải nhờ có sự hỗ trợ từ [devme4f](https://twitter.com/devme4f) thì mình mới RCE thành công. Nay viết lại chính chỉ để note lại các bước mình đã thực hiện, bla bal...
## Mô tả
![image](https://hackmd.io/_uploads/Syq4QlFcT.png)
**[CVE-2023-20864](https://nvd.nist.gov/vuln/detail/cve-2023-20864)** là lỗ hổng insecure deserialization tồn tại trên VMware Aria Operations for Logs (VMware AOL) 8.10.2, cộng với việc Unauthen nên chỉ cần tìm được gadget chain là xong
## Setup
Sau khi tạo máy ảo thành công, login với user `root`, password trống và đổi lại mật khẩu
![](https://hackmd.io/_uploads/SJUxicIq6.png)
Truy cập trang quản trị (443/tcp) và tạo deployment mới
![](https://hackmd.io/_uploads/r1DSX2Uqa.png)
![](https://hackmd.io/_uploads/r14K72L56.png)
Mấy bước setup sau không cần thiết cứ skip thôi
## Explore
Version java
![Screenshot 2024-01-31 091908](https://hackmd.io/_uploads/HyrIAmP9a.png)
VMware AOL chạy một số service sau
* 9000/tcp và 9543/tcp (SSL) : Ingestion API, API management
* 9042/tcp : Cassandra service
* 7000/tcp 7001/tcp (SSL): Cassandra replication and query
* 59778/tcp, 16520 - 16580/tcp: Thrift service
Trong đó lỗ hổng tồn tại trong các API sau tại service API management
```
POST /api/v2/internal/cluster/applyMembership
controllers.InternalClusterController.applyMembership(request :play.mvc.Http.Request)
POST /api/v2/internal/cluster/setToken
controllers.InternalClusterController.setToken(request :play.mvc.Http.Request)
POST /api/v2/internal/cluster/approveMembership
controllers.InternalClusterController.approveMembership(request :play.mvc.Http.Request)
```
Xem process nào đang mở port 9000/tcp và 9543/tcp
![](https://hackmd.io/_uploads/ryrnD2Icp.png)
=> pid=1631
Kiểm tra process thấy có classpath như sau
![](https://hackmd.io/_uploads/SJXRh2I5T.png)
Tuy nhiên để tránh sót một số file jar có thể được include trong file meta, mình sẽ làm như sau
![](https://hackmd.io/_uploads/H11NEpLqa.png)
Nén lại và kéo ra ngoài đọc thôi
![](https://hackmd.io/_uploads/HJsrrpUcp.png)
Sau khi giải nén sẽ có một số file trùng nên còn 249 file (tính cả jre, đáng lẽ nên exclude đống này ra 🦍)
3 API thực hiện deserialize nằm trong *api-play-service_2.13-1.0.jar!controllers/InternalClusterController.class*
![](https://hackmd.io/_uploads/rJg9bNwqp.png)
Các API này đều deserialize trực tiếp body data bằng [SerializationUtils](https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/SerializationUtils.html) trong [commons-lang3](https://mvnrepository.com/artifact/org.apache.commons/commons-lang3/3.1)
![](https://hackmd.io/_uploads/HkMiGEwc6.png)
Check một lượt đống lib thì mình thấy có thể dùng các gadget chains sau
* CommonsBeanutils1 (commons-beanutils-1.9.4.jar)
* CVE-2022-36944 (scala-library-2.13.5.jar) [PoC](https://github.com/yarocher/lazylist-cve-poc)
## PoC
#### *CommonsBeanutils1*
![](https://hackmd.io/_uploads/HJ573rPcT.png)
RCE với quyền root
<iframe width="560" height="315" src="https://www.youtube.com/embed/-g-oA0W4iNE?si=O-cX2wN87-ka4dK8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
Ngoài ra gadget chain từ scala library có thể được dùng để xóa nội dung file bất kỳ
## refs
* https://www.zerodayinitiative.com/blog/2023/6/29/cve-2023-20864-remote-code-execution-in-vmware-aria-operations-for-logs
* https://hackmd.io/@devme4f/r1klIM0An
* https://github.com/yarocher/lazylist-cve-poc