CVE-2024-7097 + CVE-2024-7096 + CVE-2024-6914 = Unauthenticated account (all) takeover
Bộ ba lỗi này tồn tại chung ở các phiên bản phần mềm sau:
Tiến hành phân tích trên WSO2 API Manager 4.0.0. Các phiên bản khác cũng sẽ tương tự.
Phân tích chi tiết
1. CVE-2024-7097
CVE này cho phép kẻ tấn công không cần xác thực có thể tự tạo tài khoản bất kì, bất kể tính năng đăng ký tài khoản mới có được bật hay không.
Nguyên nhân là do tại hàm đăng ký tài khoản mới tại admin SOAP api lại không kiểm tra rằng phần cấu hình tính năng đăng ký tài khoản mới có được bật hay không.
Nên mặc dù đã tắt tính năng đăng ký tài khoản mới
Chỉ gần gọi soap api là có thể tự tạo tài khoản bất kì
2. CVE-2024-7096
Kẻ tấn công có thể tạo tài khoản mới có thêm một số đặc quyền cao hơn mặc định.
Phần này thì mình chưa thực sự tìm hiểu sâu, nhưng mình có thể giải thích đại loại như sau
Sau khi lợi dụng CVE bên trên để tạo tài khoản mới, thì tài khoản này sẽ có thêm một role khá lạ là “Internal/identity”.
Bình thường, nếu admin tạo tài khoản mới trên trang portal này thì mặc định chỉ có duy nhất role là “Internal/everyone”
Với role “Internal/identity”, kẻ tấn công có thêm một đặc quyền duy nhất là login vào portal
Tuy nhiên, như vậy cũng đủ quyền để kẻ tấn công thực hiện gọi các SOAP admin service và tiến hành khai thác CVE tiếp theo. Với user mặc định mà admin tạo thì không đủ quyền để gọi những api này.
3. CVE-2024-6914
Đây chính là CVE mấu chốt của bộ chain bên trên. Kẻ tấn công có quyền truy cập vào các SOAP admin service có thể reset password của tài khoản bất kì, hay nói cách khác, có thể chiếm được tài khoản bất kì, kể cả tài khoản quản trị hệ thống.
Nguyên nhân là do trong bộ tính năng của SOAP admin service có tính năng đặt lại mật khẩu dựa vào danh sách câu hỏi bí mật mà mình đã cài đặt trước đó.
Nguồn: https://is.docs.wso2.com/en/5.9.0/learn/configuring-password-reset-with-challenge/
Tại hàm kiểm tra bộ câu hỏi, mã nguồn đã kiểm tra xem từng câu trả lời có khớp với câu trả lời đã cài đặt trước đó hay không. Nếu đúng toàn bộ mới xác thực tiếp
Tuy nhiên hàm này bị mắc một lỗ hổng về logic. Tại vòng lặp bên trên, nếu ta không truyền danh sách câu trả lời (chính là biến userChallengesDTOs
), thì nó sẽ là mảng rỗng => không chạy vào trong vòng lặp và không bị check câu trả lời. Thêm vào đó, biến verification
dùng để xác định đã trả lời đúng câu hỏi hay chưa có giá trị mặc định là true
, nên kết quả trả về ở đây cũng là true
luôn => bypass check question. Như vậy, ta có thể lợi dụng tính năng này, từ tài khoản mới tạo được bên trên để reset password tài khoản có quyền cao nhất là admin.
Bypass check bộ câu hỏi
Reset password
Đăng nhập vào portal với tài khoản admin vừa đổi mật khẩu
Cách vá lỗ hổng
– Đối với bộ sản phẩm WSO2 API Manager: nâng cấp lên phiên bản đã được vá là >= 4.4.0.
– Đối với bộ sản phẩm WSO2 Identity Server: nâng cấp lên phiên bản đã được vá là >= 7.0.0. Tuy nhiên phiên bản mới nhất hiện tại này (v7.0.0) chưa cập nhật bản vá cho CVE-2024-7097, nên áp dụng patch theo hướng dẫn tại https://security.docs.wso2.com/en/latest/security-announcements/security-advisories/2024/WSO2-2024-3574/#solution
CVE-2024-7074: Unrestricted file upload to RCE
Các phiên bản bị ảnh hưởng như sau:
Tài khoản có quyền admin có thể upload file tuỳ ý lên server. Từ đó kẻ tấn công có thể lợi dụng tính năng này để upload webshell lên server và chiếm quyền điều khiển hệ thống.
Phân tích chi tiết
Tại tính năng Synapse Artifact, hệ thống cho phép tải lên một tệp tin bất kì.
Do biến fileName
do người dùng truyền lên, nên kẻ tấn công thể tuỳ ý đặt tên chứa extension độc hại; đồng thời khai thác lỗ hổng path traversal để đưa tệp tin này ra webroot và thực thi nó.
Tuy nhiên, file này sẽ bị xoá sau khi được copy tới thư mục đích thực sự. Vì vậy, cần phải tiến hành kỹ thuật race condition để truy cập file trước khi nó bị xoá. Cũng vì nó bị xoá, nên shell này không nên để dạng webshell thông thường mà cần có action luôn, chẳng hạn như reverse shell. Tiến hành khai thác – quick PoC
Cách vá lỗ hổng
Đối với bộ sản phẩm WSO2 API Manager: nâng cấp lên phiên bản đã được vá là >= 4.4.0.
Chi tiết xem thêm tại: https://security.docs.wso2.com/en/latest/security-announcements/security-advisories/2024/WSO2-2024-3566/
Kết luận
Kết hợp 3 lỗ hổng ban đầu có thể cho phép hacker chiếm quyền điều khiển bất kỳ tài khoản nào trên hệ thống bao gồm cả tài khoản quản trị mức cao nhất mà không cần bất kỳ điều kiện gì. Thêm lỗ hổng thứ 4 có thể chiếm quyền điều khiển server.
Mặc dù PoC chưa được công khai nhưng qua hệ thống giám sát của VNPT đã ghi nhận request tấn công trên nhiều hệ thống. Nên nếu đang sử dụng các sản phẩm đã nêu ở trên thì hãy thực hiện update bản vá sớm nhất có thể.