CVE này 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, nhưng gà 🐤 nên phải nhờ có sự hỗ trợ từ 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ả
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
Truy cập trang quản trị (443/tcp) và tạo deployment mới
Mấy bước setup sau không cần thiết cứ skip thôi
Explore
Version java
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
\=> pid=1631
Kiểm tra process thấy có classpath như sau
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
Nén lại và kéo ra ngoài đọc thôi
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
Các API này đều deserialize trực tiếp body data bằng SerializationUtils trong commons-lang3
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
PoC
CommonsBeanutils1
java -jar ysoserial-all.jar CommonsBeanutils1 [command] | base64 -w 0
RCE với quyền root
Ngoài ra gadget chain từ scala library có thể được dùng để xóa nội dung file bất kỳ