Phân tích CVE-2024-6748

1.     Tổng quan:

OpManager là một phần mềm quản lý mạng toàn diện được phát triển bởi ManageEngine, một công ty con của Zoho Corporation. OpManager được thiết kế để giúp các tổ chức giám sát và quản lý cơ sở hạ tầng mạng của mình một cách hiệu quả và tối ưu. Phần mềm này được sử dụng rộng rãi trong việc quản lý và giám sát các thiết bị mạng như bộ định tuyến, switch, máy chủ, máy ảo, và nhiều thiết bị mạng khác.

Ngày 29/07/2024, lỗ hổng SQL Injection trong sản phẩm OpManager được công bố với mã định danh CVE-2024-6748. Viettel Threat Intelligence đã gửi cảnh báo nhanh về lỗ hổng tại:

https://platform.cyberintel.io/#/vulnerability/alert/CVE-2024-6748

Thông tin về lỗ hổng được mô tả như sau:

Một số điểm cần chú ý:

- Lỗ hổng mức Cao, với điểm CVSS 8.3

- Lỗ hổng SQL Injection tồn tại trong chức năng URL monitoring. Khai thác thành công, kẻ tấn công có quyền xác thực có thể thực hiện các truy vấn độc hại và truy cập các bản ghi trong cơ sở dữ liệu.

- Lỗ hổng tồn tại trong các sản phẩm OpManager, OpManager Plus, OpManager MSP và RMM từ phiên bản 128317 trở xuống.

- Chưa ghi nhận các bài phân tích, POC về lỗ hổng.

Từ các thông tin có được, Viettel Threat Intelligence đã thực hiện phân tích lỗ hổng CVE-2024-6748.

2. Phân tích kỹ thuật

2.1. Diff patch

Thực hiện cài đặt phiên bản OpManager có chứa lỗ hổng, chúng tôi chọn phiên bản 128317, có thể tải bản dùng thử tại trang chủ và các phiên bản cũ tại đây:

https://archives3.manageengine.com/opmanager/

Sau quá trình cài đặt mất khoảng vài phút, có thể truy cập vào ứng dụng ở cổng 8060 cho http và 8061 cho https với tài khoản đăng nhập mặc định: admin/admin

Nhằm so sánh bản vá cho lỗ hổng này chúng tôi lựa chọn phiên bản 128318 có tồn tại lỗi.

Trong phần mô tả lỗ hổng có đề cập đến chức năng URL monitoringbị lỗi, tuy nhiên không đề cập servlet class nào xử lý. Chúng tôi tìm kiếm theo 2 hướng: tìm kiếm chức năng đó trong GUI và xem tham số nào được sử dụng hoặc tìm kiếm trong web.xml

Trong Opmanager, có hỗ trợ tìm kiếm tính năng theo keyword từ đó ta tìm được 2 phần settings liên quan đến URL:

Khi đi vào 2 settings này ta đều thấy nó nằm trong chức năng URL Monitors (URL Monitoring cho phép giám sát thời gian phản hồi và tính sẵn sàng của URL/website). Có thể truyền một URL hoặc một file csv chứa các URL cần giám sát.

Chức năng này được xử lý tại com.adventnet.me.opmanager.urlmonitoring trong OpManagerServerClasses.jar

Do đó, chúng tôi thực hiện diff hai tệp tin jar của hai phiên bản 128317 và 128318

Sau khi diff, chúng tôi nhận thấy mã nguồn được sửa rất nhiều trong đó có nhiều câu query nối chuỗi nguy hiểm đã được sửa lại. Do chức năng khai thác là URL Monitoring nên chúng tôi sẽ tập trung tìm kiếm những hàm xử lý các urlName.

2.2. Phân tích

Trong quá trình xem xét các hàm xử lý urlName, chúng tôi chú ý tới hàm checkURLName trong com.adventnet.me.opmanager.urlmonitoring.URLDataUtils. Hàm này thực hiện nối chuỗi trực tiếp giá trị vào trong câu query:

Tiến hành remote debug, đặt breakpoint tại com.adventnet.me.opmanager.urlmonitoring.URLDataUtils.checkURLName

Quay trở lại giao diện URL Monitoring của ứng dụng và nhập các dữ liệu cần thiết

Khi request được gửi, chúng tôi thấy parameterschính là các giá trị nhận từ POST request.

Chèn thêm các ký tự như test' để kiểm tra lỗi và kiểm tra xem giá trị có được filter hay không. Response trả về lỗi và cũng không nhảy vào breakpoint.

Trace ngược lại để biết hàm nào đã gọi tới hàm checkURLNamev tìm được hàm addURL

Hàm này nhận giá trị truyền vào là một properties và được gọi từ com.adventnet.me.opmanager.server.api.handler.AdminApiHandler.addUrl

Hàm này được gọi bởi OpManagerAPIServlet và các hàm xử lý servlet request. Tìm thấy các giá trị truyền vào được filter thông qua phương thức internalDoFilter.

internalDoFilter là một phương thức nội bộ trong Java Servlet. Phương thức này thường được sử dụng trong các framework web như Apache Tomcat để thực hiện lọc (filter) các yêu cầu HTTP trước khi chúng được chuyển tới servlet hoặc tài nguyên khác.

Đến đây, chúng tôi tìm kiếm các hàm khác gọi tới checkURLNamevà để ý tới một entrypoint khác, đó là com.adventnet.me.opmanager.server.api.APIUtil.addCSVUrls

Trên giao diện chức năng nằm ở phần “Import URLs from CSV”

Hàm này có chức năng thêm các URL từ một tệp CSV vào hệ thống và kiểm tra các điều kiện trước khi thêm chúng.

Luồng logic hoạt động như sau:

com.adventnet.me.opmanager.server.api.handler.AdminApiHandler.importCSVURL

-> com.adventnet.me.opmanager.server.api.APIUtil.addCSVUrls

->com.adventnet.me.opmanager.urlmonitoring.URLDataUtils.checkURLName

Có một điều đặc biệt ở hàm này là checkURLName lại được gọi trước khi gọi tới hàm filter isSpecialCharacterWithoutSpace.

Hàm isSpecialCharacterWithoutSpace kiểm tra xem chuỗi đầu vào có chứa ký tự đặc biệt nào không (ngoài một số ký tự cho phép như dấu gạch ngang (-), dấu chấm (.), dấu gạch dưới (_), và khoảng trắng).

Nếu hàm isSpecialCharacterWithoutSpace được gọi trước khi thực hiện hàm checkURLName và nó phát hiện ký tự đặc biệt như ', sau đó trả về true, thì logic trong đoạn code sẽ kích hoạt biến errMsg = truevà thêm thông báo lỗi vào danh sách errStringList. Từ đó đoạn mã sẽ không gọi hàm checkURLName.

Do đó rất có khả năng đây là entrypoint có lỗ hổng SQL injection

Tải file CVS sample và sửa URLName thành Google' or 1=1'

Đặt breakpoint tại phần xử lý hàm checkURLName trong com.adventnet.me.opmanager.server.api.APIUtil.addCSVUrls

Sau khi thực hiện Import URLs from CSV, giao diện hiện thông báo lỗi

Để kiểm tra xem có chắc chắn rằng câu query đã được xử lý trong database không, có thể vào \ManageEngine\OpManager\pgsql\data\pg_logđể kiểm tra.

Có thể nhận thấy, lỗ hổng SQL Injection xảy ra trong chức năng Import URLs from CSV của URL Monitoring. Dữ liệu đầu vào không được kiểm tra, lọc trước mà trực tiếp chèn vào truy vấn SQL, cho phép kẻ tấn công thực hiện chèn các câu truy vấn độc hại để lấy được các thông tin được lưu trữ trong cơ sở dữ liệu, hoặc thực hiện các hành vi độc hại khác.

3.     Kịch bản tấn công

- Kẻ tấn công cần quyền ADMINTRATOR trên hệ thống OpManager.

- Kẻ tấn công cần tạo tệp tin csv, trong đó có chứa mã khai thác độc và import lên hệ thống

4. Khuyến nghị:

Viettel Threat Intelligence khuyến nghị quản trị viên cập nhật các sản phẩm OpManager, OpManager Plus, OpManager MSP RMM lên các phiên bản 128318, 128186, 128267.

Thông tin về các bản vá bảo mật của lỗ hổng CVE-2024-6748 được cập nhật tại đường dẫn:

https://www.manageengine.com/itom/advisory/cve-2024-6748.html