PinTheft nằm trong subsystem RDS (Reliable Datagram Sockets) của Linux. Đây là giao thức mạng thường xuất hiện trong các môi trường hiệu năng cao như cụm InfiniBand hoặc hệ thống HPC.
Lỗi xuất hiện ở đường gửi dữ liệu zerocopy của RDS. Zerocopy là kỹ thuật giúp kernel gửi dữ liệu trực tiếp từ bộ nhớ người dùng mà không cần sao chép sang buffer trung gian, giúp tăng hiệu năng nhưng cũng khiến việc quản lý bộ nhớ phức tạp hơn.
Trong quá trình này, hàm kernel rds_message_zcopy_from_user() sẽ pin (giữ cố định) từng trang bộ nhớ của người dùng để chuẩn bị gửi dữ liệu. Nếu xảy ra lỗi page fault ở một trang sau đó, đường xử lý lỗi sẽ giải phóng các trang đã pin trước đó — nhưng trong một số điều kiện lại giải phóng sai, gây ra lỗi double‑free hoặc sai lệch reference count.
Chính lỗi quản lý bộ nhớ này tạo nền tảng cho chuỗi khai thác dẫn đến leo thang đặc quyền.
Các nhà nghiên cứu cho thấy lỗi RDS có thể kết hợp với các tính năng I/O hiện đại của Linux để biến một lỗi bộ nhớ thành công cụ leo thang đặc quyền đáng tin cậy.
Kẻ tấn công có quyền truy cập cục bộ sẽ kích hoạt đường xử lý zerocopy của RDS. Khi xảy ra page fault trong quá trình pin trang bộ nhớ, logic dọn dẹp sẽ giải phóng nhầm các trang vẫn còn được tham chiếu, khiến kernel rơi vào trạng thái bộ nhớ không nhất quán.
Sau đó, khai thác sử dụng io_uring fixed buffers — một tính năng cho phép ứng dụng đăng ký trước vùng bộ nhớ để thực hiện I/O bất đồng bộ hiệu năng cao.
Bằng cách điều khiển các buffer này, kẻ tấn công có thể tái cấp phát lại các trang bộ nhớ vật lý vừa bị giải phóng, từ đó kiểm soát dữ liệu trong những vùng bộ nhớ liên quan đến lỗi RDS.
Các trang bộ nhớ bị ảnh hưởng có thể thuộc page cache — bộ nhớ đệm mà kernel dùng để lưu dữ liệu file trong RAM.
Khi đó, kẻ tấn công có thể thay đổi dữ liệu file trong page cache mà không cần ghi trực tiếp vào file trên đĩa. Kernel vẫn nghĩ nội dung file hợp lệ và phục vụ dữ liệu đã bị thay đổi.
Chuỗi khai thác nhắm vào một chương trình SUID‑root. Nếu nội dung file trong page cache bị sửa, kernel sẽ thực thi phiên bản đã bị chỉnh sửa nhưng vẫn giữ quyền root của file.
Khi người dùng chạy chương trình này, mã độc sẽ được thực thi với đặc quyền root, cho phép kẻ tấn công kiểm soát toàn bộ hệ thống.
Không phải mọi hệ thống Linux đều dễ bị tấn công như nhau. Mức độ rủi ro phụ thuộc nhiều vào cấu hình kernel và module.
Các báo cáo bảo mật cho biết Arch Linux là môi trường dễ bị ảnh hưởng nhất vì:
Bất kỳ bản phân phối Linux nào cũng có thể bị ảnh hưởng nếu:
Các báo cáo cho thấy cài đặt mặc định của Ubuntu, Debian, RHEL và AlmaLinux có thể ít bị ảnh hưởng hơn vì module RDS thường không được kích hoạt. Tuy vậy quản trị viên vẫn nên kiểm tra cấu hình kernel thực tế thay vì dựa vào giả định.
CloudLinux cho biết họ đã thử nghiệm PoC trên nhiều phiên bản nền tảng và xác nhận rằng các hệ thống của họ không bị ảnh hưởng.
Thông thường, khai thác PinTheft cần hội đủ các yếu tố sau:
Nếu thiếu một trong các điều kiện này, chuỗi khai thác sẽ khó thực hiện hoặc không thể thành công.
Các nhà phát triển kernel đã phát hành bản vá cho đoạn mã RDS bị lỗi. Việc cập nhật kernel mới nhất từ nhà cung cấp bản phân phối là biện pháp quan trọng nhất.
Sau khi cập nhật, hệ thống cần khởi động lại để kernel mới có hiệu lực.
Nếu hạ tầng của bạn không dùng RDS networking, nên giảm bề mặt tấn công bằng cách ngăn module này được load.
Các cách phổ biến gồm:
rdsVì chuỗi khai thác dựa vào io_uring fixed buffers, việc hạn chế hoặc tắt io_uring đối với người dùng không đặc quyền có thể giảm đáng kể rủi ro.
Giai đoạn cuối của khai thác nhắm vào file SUID, vì vậy nên:
PinTheft yêu cầu thực thi mã cục bộ, do đó các hệ thống multi‑user, máy build CI, máy chủ hosting chia sẻ hoặc máy phát triển cần được ưu tiên vá và gia cố bảo mật.
PinTheft cho thấy nhiều khai thác kernel hiện đại không dựa vào một lỗi duy nhất mà kết hợp nhiều subsystem phức tạp. Trong trường hợp này là sự kết hợp giữa RDS networking và framework I/O bất đồng bộ io_uring để biến lỗi quản lý bộ nhớ thành công cụ leo thang đặc quyền mạnh mẽ.
Ngay cả những module kernel ít được chú ý cũng có thể trở thành bề mặt tấn công nguy hiểm khi kết hợp với các tính năng hiệu năng mới. Việc cập nhật kernel thường xuyên và giảm thiểu module không cần thiết vẫn là biện pháp phòng vệ hiệu quả nhất.
Comments
0 comments