Các nhà nghiên cứu phát hiện ra lỗ hổng Nuclei cho phép bỏ qua chữ ký và thực thi mã

Một lỗ hổng bảo mật nghiêm trọng đã được phát hiện trong Nuclei của ProjectDiscovery , một trình quét lỗ hổng mã nguồn mở được sử dụng rộng rãi. Nếu khai thác thành công, lỗ hổng này có thể cho phép kẻ tấn công bỏ qua các lần kiểm tra chữ ký và có khả năng thực thi mã độc hại.

Được theo dõi là CVE-2024-43405 , lỗ hổng này có điểm CVSS là 7,4 trên mức tối đa là 10,0. Lỗ hổng này ảnh hưởng đến tất cả các phiên bản Nuclei sau 3.0.0.
Theo mô tả về lỗ hổng bảo mật, "Lỗ hổng này xuất phát từ sự khác biệt giữa cách quy trình xác minh chữ ký và trình phân tích cú pháp YAML xử lý các ký tự xuống dòng, kết hợp với cách xử lý nhiều chữ ký" .
"Điều này cho phép kẻ tấn công đưa nội dung độc hại vào mẫu trong khi vẫn duy trì chữ ký hợp lệ cho phần vô hại của mẫu."

Nuclei là một trình quét lỗ hổng được thiết kế để thăm dò các ứng dụng, cơ sở hạ tầng, nền tảng đám mây và mạng hiện đại để xác định các lỗ hổng bảo mật. Công cụ quét sử dụng các mẫu , không gì khác ngoài các tệp YAML, để gửi các yêu cầu cụ thể nhằm xác định sự hiện diện của lỗ hổng.
Hơn nữa, nó có thể cho phép thực thi mã bên ngoài trên hệ điều hành máy chủ bằng giao thức mã , do đó mang lại cho các nhà nghiên cứu sự linh hoạt hơn trong quy trình kiểm tra bảo mật.
Công ty bảo mật đám mây Wiz, đơn vị phát hiện ra CVE-2024-43405, cho biết lỗ hổng này bắt nguồn từ quy trình xác minh chữ ký mẫu, được sử dụng để đảm bảo tính toàn vẹn của các mẫu có sẵn trong kho lưu trữ mẫu chính thức .
Việc khai thác thành công lỗ hổng này là cách bỏ qua bước xác minh quan trọng này, cho phép kẻ tấn công tạo ra các mẫu độc hại có thể thực thi mã tùy ý và truy cập dữ liệu nhạy cảm từ máy chủ.
Nhà nghiên cứu Guy Goldenberg của Wiz cho biết trong một bài phân tích vào thứ sáu: "Vì phương pháp xác minh chữ ký này hiện là phương pháp duy nhất có thể sử dụng để xác thực mẫu Nuclei nên nó có khả năng là điểm lỗi duy nhất" .
Về bản chất, vấn đề bắt nguồn từ việc sử dụng biểu thức chính quy (hay còn gọi là regex) để xác thực chữ ký và xung đột phân tích phát sinh do sử dụng cả regex và trình phân tích cú pháp YAML, do đó mở ra khả năng kẻ tấn công có thể đưa vào ký tự "\\r" sao cho ký tự này có thể bỏ qua việc xác minh chữ ký dựa trên regex và được trình phân tích cú pháp YAML hiểu là ngắt dòng.
Nói cách khác, những sự không nhất quán trong quá trình phân tích cú pháp này có thể được kết nối để tạo ra một mẫu Nuclei sử dụng "\\r" để bao gồm dòng "# digest:" thứ hai giúp tránh được quá trình xác minh chữ ký nhưng sẽ được trình thông dịch YAML phân tích và thực thi.
"Xác minh chữ ký dựa trên regex của Go coi \\\\r là một phần của cùng một dòng, trong khi trình phân tích cú pháp YAML diễn giải nó như một ngắt dòng. Sự không khớp này cho phép kẻ tấn công đưa nội dung bỏ qua xác minh nhưng được trình phân tích cú pháp YAML thực thi", Goldenberg giải thích.
"Logic xác minh chỉ xác thực dòng # digest: đầu tiên. Các dòng # digest: bổ sung sẽ bị bỏ qua trong quá trình xác minh nhưng vẫn nằm trong nội dung để YAML phân tích cú pháp và thực thi."
Hơn nữa, quá trình xác minh bao gồm một bước để loại trừ dòng chữ ký khỏi nội dung mẫu, nhưng thực hiện theo cách chỉ xác thực dòng đầu tiên, do đó các dòng tiếp theo không được xác minh nhưng vẫn có thể thực thi.

Sau khi tiết lộ một cách có trách nhiệm, ProjectDiscovery đã giải quyết vấn đề này vào ngày 4 tháng 9 năm 2024, với phiên bản 3.3.2 . Phiên bản hiện tại của Nuclei là 3.3.7.
Goldenberg cho biết: "Kẻ tấn công có thể tạo ra các mẫu độc hại chứa các dòng tóm tắt # bị thao túng hoặc các ngắt dòng \\r được đặt cẩn thận để vượt qua quá trình xác minh chữ ký của Nuclei".
"Một vectơ tấn công cho lỗ hổng này phát sinh khi các tổ chức chạy các mẫu không đáng tin cậy hoặc do cộng đồng đóng góp mà không có xác thực hoặc cô lập thích hợp. Kẻ tấn công có thể khai thác chức năng này để đưa các mẫu độc hại vào, dẫn đến thực thi lệnh tùy ý, rò rỉ dữ liệu hoặc xâm phạm hệ thống."