-
06/04/2022
-
24
-
41 bài viết
Giải mã lỗ hổng CVE-2023-39296: Phân tích kỹ thuật và PoC
Lỗ hổng có mã định danh là CVE-2023-39296 là một lỗi nghiêm trọng trong hệ điều hành QTS và QuTS hero của QNAP. Trong bài viết dưới đây chúng ta sẽ cùng tìm hiểu về chi tiết kỹ thuật cũng như PoC (Proof-of-Concept) đã được phát hành cho lỗ hổng an ninh này.
Lỗ hổng được đánh giá có độ nghiêm trọng 7,5/10 theo thang điểm CVSS, là một lỗ hổng Prototype Pollution. Đây là một kiểu tấn công tương đối khó hiểu nhưng nguy hiểm, cho phép kẻ tấn công từ xa có thể thay đổi thuộc tính của các đối tượng JavaScript, từ đó có thể chèn mã tùy ý trong quá trình thực thi. CVE này nhắm mục tiêu vào các phiên bản cụ thể của hệ điều hành QNAP. Trong trường hợp của QTS và QuTS hero, lỗ hổng này có thể cho phép kẻ tấn công ghi đè các thuộc tính hiện có bằng các kiểu dữ liệu không tương thích, từ đó có khả năng làm hỏng hệ thống.
PoC của CVE-2023-39296 tập trung khai thác sự thiếu sót trong chức năng phân tích cú pháp JSON của QTS, dẫn đến lỗi nhầm lẫn kiểu dữ liệu. Cụ thể, trường dữ liệu “data” trong đối tượng “json-object” không được xác thực chính xác, cho phép kẻ tấn công chiếm quyền điều khiển luồng.
Tệp nhị phân "/cgi-bin/qid/qidRequestV2.cgi" có thể được truy cập qua mạng, từ đó trở thành con đường để khai thác. Kẻ tấn công không cần xác thực có thể thực thi mã tùy ý với đặc quyền quản trị viên, trong hệ điều hành QTS tương đương với quyền truy cập root. Lỗ hổng này có thể bị kẻ tấn công khai thác trong mạng LAN hoặc từ xa nếu máy chủ HTTP được cấu hình để truy cập ra bên ngoài.
Nguyên nhân cốt lõi của CVE này là chức năng JSON của QTS, dựa trên thư viện json-c được MIT cấp phép và được triển khai trong "/usr/lib/libqcloud.so". Hàm "json_tokener_parse_verbose" được thiết kế để phân tích chuỗi JSON và xây dựng một đối tượng JSON. Tuy nhiên, một sai sót nghiêm trọng xảy ra khi hàm này không xác minh được trường "o_type" trước khi thêm giá trị vào "json_object". Điều này có nghĩa là một chuỗi JSON được tạo có thể thực hiện các thao tác với hệ thống để xử lý một chuỗi hoặc một giá trị dưới dạng struct "lh_table".
Thao tác này đặc biệt nguy hiểm vì nó liên quan đến việc hủy tham chiếu một con trỏ hàm trong lh_table, dẫn đến khả năng chiếm quyền điều khiển luồng. Một chuỗi JSON được tạo cẩn thận, chẳng hạn như “702111234474983745 {}”, có thể khiến hệ thống hủy đăng ký "lh_table" tại địa chỉ do kẻ tấn công chỉ định.
Để tái tạo sự cố, chỉ cần thực hiện lệnh curl sau tới NAS:
Việc phát hiện và tiết lộ CVE-2023-39296 là một lời nhắc nhở về những thách thức an ninh mạng mà các hệ thống NAS phải đối mặt. Khi các giải pháp lưu trữ ngày càng được kết nối mạng và có thể truy cập được, chúng cũng trở nên dễ bị tổn thương hơn trước các cuộc tấn công tinh vi.
Người dùng và quản trị viên hệ thống QTS và QuTS của QNAP được khuyến cáo nhanh chóng xử lý lỗ hổng CVE-2023-39296. Việc đảm bảo hệ thống được cập nhật lên các phiên bản mới là điều cần thiết để bảo vệ hệ thống khỏi những lỗ hổng phức tạp, ẩn giấu bên trong.
Lỗ hổng được đánh giá có độ nghiêm trọng 7,5/10 theo thang điểm CVSS, là một lỗ hổng Prototype Pollution. Đây là một kiểu tấn công tương đối khó hiểu nhưng nguy hiểm, cho phép kẻ tấn công từ xa có thể thay đổi thuộc tính của các đối tượng JavaScript, từ đó có thể chèn mã tùy ý trong quá trình thực thi. CVE này nhắm mục tiêu vào các phiên bản cụ thể của hệ điều hành QNAP. Trong trường hợp của QTS và QuTS hero, lỗ hổng này có thể cho phép kẻ tấn công ghi đè các thuộc tính hiện có bằng các kiểu dữ liệu không tương thích, từ đó có khả năng làm hỏng hệ thống.
PoC của CVE-2023-39296 tập trung khai thác sự thiếu sót trong chức năng phân tích cú pháp JSON của QTS, dẫn đến lỗi nhầm lẫn kiểu dữ liệu. Cụ thể, trường dữ liệu “data” trong đối tượng “json-object” không được xác thực chính xác, cho phép kẻ tấn công chiếm quyền điều khiển luồng.
Mã:
struct json_object {
enum json_type o_type; [1]
json_func *_delete;
json_func *_to_json_string;
int ref_count;
struct printbuf *pb;
union data {
boolean c_boolean;
double c_double;
int c_int;
struct lh_table *c_object;
struct array_list *c_array;
char *c_string;
} o;
};
Tệp nhị phân "/cgi-bin/qid/qidRequestV2.cgi" có thể được truy cập qua mạng, từ đó trở thành con đường để khai thác. Kẻ tấn công không cần xác thực có thể thực thi mã tùy ý với đặc quyền quản trị viên, trong hệ điều hành QTS tương đương với quyền truy cập root. Lỗ hổng này có thể bị kẻ tấn công khai thác trong mạng LAN hoặc từ xa nếu máy chủ HTTP được cấu hình để truy cập ra bên ngoài.
Nguyên nhân cốt lõi của CVE này là chức năng JSON của QTS, dựa trên thư viện json-c được MIT cấp phép và được triển khai trong "/usr/lib/libqcloud.so". Hàm "json_tokener_parse_verbose" được thiết kế để phân tích chuỗi JSON và xây dựng một đối tượng JSON. Tuy nhiên, một sai sót nghiêm trọng xảy ra khi hàm này không xác minh được trường "o_type" trước khi thêm giá trị vào "json_object". Điều này có nghĩa là một chuỗi JSON được tạo có thể thực hiện các thao tác với hệ thống để xử lý một chuỗi hoặc một giá trị dưới dạng struct "lh_table".
Thao tác này đặc biệt nguy hiểm vì nó liên quan đến việc hủy tham chiếu một con trỏ hàm trong lh_table, dẫn đến khả năng chiếm quyền điều khiển luồng. Một chuỗi JSON được tạo cẩn thận, chẳng hạn như “702111234474983745 {}”, có thể khiến hệ thống hủy đăng ký "lh_table" tại địa chỉ do kẻ tấn công chỉ định.
Để tái tạo sự cố, chỉ cần thực hiện lệnh curl sau tới NAS:
Mã:
curl -X POST -H "Content-Type: application/json" -d "4702111234474983745 {}" "{NAS_IP}:8080/cgi-bin/qid/qidRequestV2.cgi?param=value"
Việc phát hiện và tiết lộ CVE-2023-39296 là một lời nhắc nhở về những thách thức an ninh mạng mà các hệ thống NAS phải đối mặt. Khi các giải pháp lưu trữ ngày càng được kết nối mạng và có thể truy cập được, chúng cũng trở nên dễ bị tổn thương hơn trước các cuộc tấn công tinh vi.
Người dùng và quản trị viên hệ thống QTS và QuTS của QNAP được khuyến cáo nhanh chóng xử lý lỗ hổng CVE-2023-39296. Việc đảm bảo hệ thống được cập nhật lên các phiên bản mới là điều cần thiết để bảo vệ hệ thống khỏi những lỗ hổng phức tạp, ẩn giấu bên trong.
Nguồn: Security Online
Chỉnh sửa lần cuối bởi người điều hành: