Tổng quan về lỗ hổng CVE-2024-26809 trong Linux nftables Subsystem
Một lỗ hổng bảo mật nghiêm trọng, được gán mã định danh CVE-2024-26809, vừa được phát hiện trong subsystem nftables của kernel Linux. Đây là một lỗ hổng kiểu double-free với mức độ nghiêm trọng cao, cho phép kẻ tấn công cục bộ (local attacker) leo thang đặc quyền (privilege escalation) và thực thi mã tùy ý, đe dọa trực tiếp đến các hệ thống chưa được vá. Trong bài viết này, chúng ta sẽ phân tích chi tiết về lỗ hổng này, cơ chế khai thác, và các biện pháp khắc phục.
1. Giới thiệu về nftables
nftables là một framework hiện đại trong kernel Linux, thay thế cho các công cụ cũ như iptables và ip6tables. Subsystem này chịu trách nhiệm quản lý việc lọc gói tin mạng (network packet filtering) thông qua các thành phần cốt lõi như tables, sets và rules. Với tính năng mạnh mẽ và hiệu suất cao, nftables đã trở thành một phần quan trọng trong nhiều hệ thống Linux hiện đại.
2. Chi tiết kỹ thuật về lỗ hổng CVE-2024-26809
Lỗ hổng nằm ở hàm nft_pipapo_destroy() trong module net/netfilter của kernel. Hàm này được sử dụng để hủy các pipapo sets – một cấu trúc dùng trong nftables để hỗ trợ việc lọc gói tin. Vấn đề double-free xảy ra khi một set được đánh dấu là “dirty” (đã chỉnh sửa nhưng chưa commit) bị xóa. Cụ thể, hàm không kiểm tra xem các phần tử trong set có tồn tại đồng thời trong cả cấu trúc live match và backup clone hay không, dẫn đến việc giải phóng bộ nhớ trùng lặp.
3. Cơ chế khai thác lỗ hổng
Để khai thác lỗ hổng này, kẻ tấn công thực hiện các bước cơ bản như sau:
- Tạo một pipapo set: Tạo một set A với hai phần tử (B và C), đồng thời đánh dấu nó là “dirty”.
- Xóa set: Xóa set A trong khi nó vẫn ở trạng thái “dirty”, khiến kernel giải phóng bộ nhớ của B và C hai lần, gây ra tình trạng double-free.
Tình trạng double-free này tạo điều kiện để kẻ tấn công thực hiện các kỹ thuật heap grooming và memory manipulation. Bằng cách lợi dụng hệ thống object cache của kernel (cụ thể là kmalloc-256), kẻ tấn công có thể:
- Chiếm dụng các đối tượng nftables trên heap.
- Rò rỉ địa chỉ kernel (kernel address leak).
- Thao túng function pointer để thực thi các ROP gadgets, cuối cùng giành quyền truy cập root.
4. Ví dụ minh họa khai thác
Dưới đây là một đoạn code minh họa đơn giản về cách kẻ tấn công có thể tạo và xóa một pipapo set “dirty” để kích hoạt lỗ hổng double-free:
// Example code snippet demonstrating the exploitation steps
#include <linux/module.h>
#include <linux/init.h>
#include <linux/slab.h>
// Function to create a dirty pipapo set
void create_dirty_set(void) {
struct nft_set *set = kmalloc(sizeof(struct nft_set), GFP_KERNEL);
set->dirty = 1; // Mark the set as dirty
// Add elements B and C to the set
set->elements[0] = kmalloc(sizeof(struct nft_set_element), GFP_KERNEL);
set->elements[1] = kmalloc(sizeof(struct nft_set_element), GFP_KERNEL);
}
// Function to delete the dirty set
void delete_dirty_set(void) {
struct nft_set *set = kmalloc(sizeof(struct nft_set), GFP_KERNEL);
set->dirty = 1; // Mark the set as dirty
// Delete the set while it's still dirty
nft_set_pipapo_match_destroy(set, set->elements[0]);
nft_set_pipapo_match_destroy(set, set->elements[1]);
}
int __init init_module(void) {
create_dirty_set();
delete_dirty_set();
return 0;
}
module_init(init_module);
Đoạn code trên chỉ mang tính chất minh họa. Trong thực tế, việc khai thác đòi hỏi các kỹ thuật tinh vi hơn như quản lý heap và xây dựng payload phù hợp để đạt được quyền root.
5. Tác động và rủi ro
Lỗ hổng CVE-2024-26809 mang lại những rủi ro nghiêm trọng, bao gồm:
- Leo thang đặc quyền cục bộ: Kẻ tấn công có thể nâng cấp quyền truy cập từ mức user bình thường lên root, kiểm soát hoàn toàn hệ thống.
- Thực thi mã tùy ý: Sau khi khai thác thành công, kẻ tấn công có thể chạy bất kỳ mã độc nào trên hệ thống.
Do tính chất cục bộ của lỗ hổng, kẻ tấn công cần có quyền truy cập vật lý hoặc shell trên máy mục tiêu, khiến các hệ thống được quản lý chung (shared hosting, container environments) dễ bị tấn công hơn.
6. Biện pháp khắc phục
Người dùng và quản trị viên hệ thống được khuyến nghị ngay lập tức cập nhật kernel lên phiên bản chứa bản vá cho CVE-2024-26809. Các bản vá đã được phát hành bởi các nhà cung cấp kernel lớn và các nhà phân phối Linux. Ngoài ra, bạn có thể thực hiện các biện pháp sau trong khi chờ cập nhật:
- Hạn chế quyền truy cập cục bộ vào hệ thống bằng cách kiểm soát chặt chẽ tài khoản người dùng.
- Triển khai các công cụ giám sát hành vi (behavior monitoring) để phát hiện các hoạt động bất thường liên quan đến nftables.
7. Kết luận
Lỗ hổng CVE-2024-26809 trong subsystem nftables của Linux là một mối đe dọa nghiêm trọng đối với các hệ thống chưa được vá, đặc biệt trong các môi trường yêu cầu bảo mật cao. Việc hiểu rõ nguyên nhân và cơ chế khai thác của lỗ hổng này sẽ giúp các chuyên gia IT và quản trị viên hệ thống đưa ra các biện pháp phòng ngừa hiệu quả. Hãy đảm bảo hệ thống của bạn được cập nhật bản vá mới nhất để giảm thiểu nguy cơ bị tấn công.










