R, một ngôn ngữ lập trình mã nguồn mở phổ biến trong giới thống kê và khoa học dữ liệu, đã vá một lỗ hổng bảo mật cho phép kẻ tin tặc thực thi mã lệnh tùy ý.

Lỗ hổng này được gắn tên CVE-2024-27322 với độ nghiêm trọng CVSS ban đầu là 8,8/10. Nó có thể bị lợi dụng bằng cách lừa nạn nhân tải một tệp RDS (R Data Serialization) độc hại vào một project R, hoặc bằng cách lừa họ tích hợp một thư viện R chứa mã độc vào mã nguồn của project.

Việc này sẽ kích hoạt mã độc bên trong tệp hoặc thư viện. Khi chạy nó có thể là làm lộ các tệp tin của người dùng đến nguồn khác, xóa dữ liệu hoặc thực hiện các hoạt động phá hoại khác.

Lỗi này đã được vá trong phiên bản 4.4.0 của R Core vừa phát hành vào đầu tháng này. Chúng tôi khuyến cáo mọi người nên cập nhật phiên bản này càng sớm càng tốt.

Lỗ hổng này bắt nguồn ở quá trình deserialization của R. Nó có nhiệm vụ đọc thông tin từ các tệp tin và chuyển đổi chúng thành các cấu trúc dữ liệu trong bộ nhớ. Tính năng này trên R không được thiết kế một cách an toàn và có thể bị khai thác để chạy mã độc trên thiết bị của nạn nhân.

Tin tốt là lỗ hổng này khá phức tạp để khai thác, theo phân tích của Kasimir Schulz và Kieran Evans của công ty bảo mật AI HiddenLayer. Để nắm rõ chi tiết kỹ thuật, bạn đọc có thể tham khảo bài viết của họ. Trong đó họ có đề cập đến "việc sử dụng các đối tượng promise và đánh giá lazy trong R."

Công ty này cũng cung cấp một đoạn mã minh họa để ví dụ tính khả thi của việc tấn công lỗ hổng này. Đoạn mã này sẽ in ra một số thông tin khi một tệp nhiễm độc được R giải mã. Nó có thể được sửa đổi để trở nên nguy hiểm hơn nhiều.

Tin tặc có thể nhắm vào chuỗi cung ứng hoặc thậm chí cả các cá nhân

HiddenLayer cảnh báo rằng kẻ tấn công có thể lợi dụng lỗ hổng này để xâm nhập vào chuỗi cung ứng phần mềm.

Mạng lưới Lưu trữ R Toàn diện (CRAN) lưu trữ và phân phối hơn 20.000 thư viện R. Bất kỳ ai cũng có thể tải một thư viện lên đó, bao gồm cả việc nhúng mã độc vào đó một cách bí mật.

Vào thời điểm khuyến cáo của HiddenLayer được công bố, các chương trình quét tự động của CRAN vẫn chưa kiểm tra lỗ hổng CVE-2024-27322 trong các thư viện.

Điều đáng lo ngại là chỉ cần tải một thư viện cũng có thể kích hoạt mã độc ẩn. HiddenLayer cũng đã chứng minh rằng ngay cả việc mở Bảng điều khiển R (R Console) cũng có thể kích hoạt việc thực thi mã tùy ý.

"Tương tự như module 'pickle' của Python, việc khai thác lỗ hổng này phụ thuộc nhiều vào môi trường của người dùng mục tiêu, nhưng đồng thời nó mở ra nhiều hướng tấn công tiềm năng," Kasimir Schulz, nhà nghiên cứu bảo mật của HiddenLayer chia sẻ.

"Chúng có thể bao gồm việc lừa người dùng tải xuống một tệp độc hại thông qua các cách phi kỹ thuật. Tệp này sau đó cho phép tấn công thực thi mã, hoặc thậm chí cho phép tấn công từ xa nếu có một dịch vụ cho phép việc tải lên dữ liệu định dạng RDS không đáng tin cậy."

"Ví dụ, để tiếp cận nạn nhân, kẻ tấn công có thể tạo ra một tệp như vậy và len lỏi vào các cộng đồng nghiên cứu dưới vỏ bọc của một nhà nghiên cứu đang tìm kiếm sự trợ giúp. Sau đó, chúng có thể gửi đoạn mã của mình và tập dữ liệu (dataset) ở định dạng RDS cho các những ai đồng ý giúp đỡ chúng. Thiết bị của bất kỳ ai tải tệp RDS đó sẽ bị xâm nhập toàn bộ."

Một phát ngôn viên của CRAN đã nói rằng: "Việc có thể viết mã độc bằng R không đồng nghĩa với việc ngôn ngữ này không an toàn. Phần lõi của R được duy trì bởi một nhóm nhỏ gồm các cá nhân đáng tin cậy trong Nhóm Phát triển Lõi R. Hầu hết trong số họ đã làm việc với ngôn ngữ này trong nhiều thập kỷ."

"Giống như bất kỳ dự án mã nguồn mở nào, chúng tôi dựa vào cộng đồng người dùng rộng lớn của mình để phát hiện lỗi trong mã nguồn. Chúng tôi hoan nghênh tất cả các báo cáo lỗi, bao gồm cả những lỗi liên quan đến bảo mật. Báo cáo lỗi của HiddenLayer là một ví dụ điển hình.

Nói một cách ngắn gọn, promise là các đối tượng ngôn ngữ được sử dụng để thực hiện đánh giá lazy. Các promise được xây dựng trong R luôn bị ràng buộc với một môi trường. Nhưng HiddenLayer đã tìm ra cách để tạo ra một promise không ràng buộc bằng cách giải mã một tệp tin nhiễm độc. Lỗi này đã được khắc phục trong R 4.4.0 và những phương thức tấn công dựa trên nó đã bị vô hiệu hóa."

"Chúng tôi bác bỏ ý kiến cho rằng có những vấn đề bảo mật lớn hơn liên quan đến promise hoặc quá trình giải mã. Cả hai đều là những tính năng cốt lõi của ngôn ngữ R," người này nói thêm.

Theo The Register.

Chia sẻ bài viết này