Lỗ hổng trong hệ thống con hạt nhân Linux Netfilter

Một lỗ hổng (CVE-2021-22555) đã được xác định trong Netfilter, một hệ thống con của nhân Linux dùng để lọc và sửa đổi các gói mạng, cho phép người dùng cục bộ có được đặc quyền root trên hệ thống, kể cả khi ở trong một vùng chứa bị cô lập. Một nguyên mẫu hoạt động của một cách khai thác vượt qua các cơ chế bảo vệ KASLR, SMAP và SMEP đã được chuẩn bị để thử nghiệm. Nhà nghiên cứu phát hiện ra lỗ hổng này đã nhận được phần thưởng 20 USD từ Google vì đã xác định được phương pháp vượt qua sự cô lập của các vùng chứa Kubernetes trong cụm kCTF.

Sự cố này đã xảy ra kể từ kernel 2.6.19, được phát hành cách đây 15 năm và do một lỗi trong trình xử lý IPT_SO_SET_REPLACE và IP6T_SO_SET_REPLACE gây ra lỗi tràn bộ đệm khi gửi các tham số được định dạng đặc biệt thông qua lệnh gọi setsockopt ở chế độ tương thích. Trong các trường hợp thông thường, chỉ người dùng root mới có thể thực hiện cuộc gọi đến compat_setsockopt(), nhưng các đặc quyền cần thiết để thực hiện cuộc tấn công cũng có thể được lấy bởi người dùng không có đặc quyền trên các hệ thống có hỗ trợ không gian tên người dùng.

Người dùng có thể tạo vùng chứa với người dùng root riêng biệt và khai thác lỗ hổng từ đó. Ví dụ: "không gian tên người dùng" được bật theo mặc định trên Ubuntu và Fedora, nhưng không được bật trên Debian và RHEL. Bản vá sửa lỗ hổng này đã được đưa vào nhân Linux vào ngày 13 tháng XNUMX. Các bản cập nhật gói đã được tạo bởi các dự án Debian, Arch Linux và Fedora. Trong Ubuntu, RHEL và SUSE, các bản cập nhật đang được chuẩn bị.

Sự cố xảy ra trong hàm xt_compat_target_from_user() do tính toán kích thước bộ nhớ không chính xác khi lưu cấu trúc hạt nhân sau khi chuyển đổi từ biểu diễn 32 bit sang 64 bit. Lỗi này cho phép bốn byte rỗng được ghi vào bất kỳ vị trí nào ngoài bộ đệm được phân bổ giới hạn bởi offset 0x4C. Tính năng này hóa ra đủ để tạo ra một cách khai thác cho phép người ta giành được quyền root - bằng cách xóa con trỏ m_list->next trong cấu trúc msg_msg, các điều kiện được tạo để truy cập dữ liệu sau khi giải phóng bộ nhớ (use-after-free), tính năng này đã được tạo sau đó được sử dụng để lấy thông tin về địa chỉ và những thay đổi đối với các cấu trúc khác thông qua thao tác gọi hệ thống msgsnd().

Nguồn: opennet.ru

Thêm một lời nhận xét