Lỗ hổng CVE Dirty Frag nguy hiểm trên Linux Kernel

Lỗ hổng CVE Dirty Frag nguy hiểm trên Linux Kernel

Dirty Frag là một lỗ hổng CVE đang chờ định danh trên Linux kernel, thuộc nhóm local privilege escalation (LPE). Lỗ hổng này khai thác hai lỗi ghi vào page cache riêng biệt là xfrm-ESP Page-Cache WriteRxRPC Page-Cache Write để đạt quyền root trên hầu hết các bản phân phối Linux lớn. Sau khi lệnh ngừng công bố bị phá vỡ vào ngày 07/05/2026, mã khai thác công khai đã xuất hiện trong thực tế.

Dirty Frag Trong Nhóm Lỗ Hổng CVE Của Linux Kernel

Dirty Frag thuộc cùng lớp lỗi với Dirty PipeCopy Fail (CVE-2026-31431), nhưng thay vì nhắm vào struct pipe_buffer, nó tác động đến trường frag của struct sk_buff. Đây là một lỗ hổng CVE kiểu logic, không dựa trên race condition, không cần cửa sổ thời gian và có tỷ lệ thành công rất cao.

Tham khảo thêm thông tin nền về phân loại và theo dõi lỗ hổng CVE tại NVD.

Cơ Chế Khai Thác

Nhà nghiên cứu bảo mật Hyunwoo Kim (@v4bel) đã phát hiện và báo cáo lỗi. Kỹ thuật khai thác tận dụng đường dẫn gửi zero-copy, trong đó splice() gắn tham chiếu đến một trang page cache chỉ-đọc, chẳng hạn /etc/passwd hoặc /usr/bin/su, vào slot frag của skb phía người gửi.

Ở phía nhận, mã kernel thực hiện phép toán mật mã trực tiếp trên frag đó, làm thay đổi vĩnh viễn page cache trong RAM. Mọi lần đọc sau đó đối với tệp bị tác động sẽ thấy nội dung đã bị sửa, dù tiến trình tấn công chỉ có quyền đọc ban đầu.

Xfrm-ESP Page-Cache Write Và Khả Năng Ghi Tuỳ Ý

xfrm-ESP Page-Cache Write nằm trong esp_input(), tức đường nhận của IPsec ESP. Khi một skbnon-linear nhưng không có frag list, mã xử lý bỏ qua bước cấp phát bộ đệm bắt buộc skb_cow_data() và đi thẳng tới giải mã AEAD tại chỗ trên frag do attacker gắn trước đó.

Thông qua thuộc tính netlink XFRMA_REPLAY_ESN_VAL, attacker có thể kiểm soát đồng thời vị trí ghi và giá trị ghi của từng thao tác. Điều này cho phép ghi đè byte tùy ý trong page cache của /usr/bin/su, với payload root-shell ELF tĩnh được ghi thành 192 byte qua 48 chunk, mỗi chunk 4 byte.

Sau khi ghi, hệ thống trả về lỗi xác thực (-EBADMSG), nhưng dữ liệu đã được lưu vào page cache. Biến thể này yêu cầu khả năng tạo user namespace bằng unshare(CLONE_NEWUSER).

RxRPC Page-Cache Write Và Bypass Xác Thực

RxRPC Page-Cache Write nằm trong rxkad_verify_packet_1(), nơi diễn ra giải mã pcbc(fcrypt) một khối 8 byte trực tiếp trên payload RxRPC. Do skb_to_sgvec() chuyển trang page cache đã bị splice-pinned thành SGL, trang do attacker kiểm soát trở thành đồng thời cả sourcedestination.

Giá trị ghi 8 byte là fcrypt_decrypt(C, K), trong đó K là session key có thể đăng ký tự do bằng add_key(“rxrpc”, …) và không yêu cầu đặc quyền. Attacker có thể brute-force K trong user space để tạo plaintext mong muốn, ví dụ biến trường mật khẩu ở dòng 1 của /etc/passwd thành chuỗi rỗng, từ đó kích hoạt PAM nullok authentication bypass.

Ảnh Hưởng Hệ Thống Và Phạm Vi Tác Động

Hai biến thể riêng lẻ không bao phủ toàn bộ môi trường Linux. Tuy nhiên, khi kết hợp, chúng bù trừ điểm yếu của nhau và đạt được root trên gần như mọi bản phân phối lớn. Kỹ thuật khai thác sẽ thử đường dẫn ESP trước; nếu unshare(CLONE_NEWUSER) thất bại, nó tự động chuyển sang đường dẫn RxRPC nhắm vào /etc/passwd.

Chuỗi lỗi này đã tồn tại khoảng 9 năm: lỗi ESP xuất hiện từ commit cac2661c53f3 (01/2017) và lỗi RxRPC từ commit 2dc334f1a63a (06/2023). Đây là một nguy cơ bảo mật đáng chú ý vì ảnh hưởng trực tiếp đến an toàn thông tin của hệ thống dùng Linux kernel có các module liên quan.

Trạng Thái Vá Lỗi Và Bản Vá Bảo Mật

Biến thể ESP đã được vá bằng hướng tiếp cận SKBFL_SHARED_FRAG để đảm bảo các page được splice-pinned luôn đi qua skb_cow_data(). Bản vá này đã được merge vào tree netdev vào ngày 07/05/2026.

Bản vá cuối cùng dựa trên đề xuất shared-frag của Kuan-Ting Chen. Trong khi đó, patch cho RxRPC thêm điều kiện || skb->data_len vào gate skb_cloned() để buộc cô lập non-linear skb vẫn chưa được merge upstream.

Cho đến thời điểm công bố, chưa có mã định danh CVE chính thức nào được gán cho cả hai lỗi do việc phá vỡ embargo sớm bởi bên thứ ba không liên quan.

Biện Pháp Giảm Thiểu Tạm Thời

Khi chưa có bản vá từ nhà phân phối, quản trị viên nên vô hiệu hóa các module kernel bị ảnh hưởng theo hướng dẫn sau:

echo "blacklist esp4" >> /etc/modprobe.d/blacklist.conf
echo "blacklist esp6" >> /etc/modprobe.d/blacklist.conf
echo "blacklist rxrpc" >> /etc/modprobe.d/blacklist.conf
modprobe -r esp4 esp6 rxrpc

Biện pháp này sẽ vô hiệu hóa và gỡ các module esp4, esp6rxrpc, đổi lại sẽ làm gián đoạn chức năng IPsecRxRPC.

Với hệ thống phụ thuộc vào IPsec VPN tunnels, cần cân nhắc tác động vận hành trước khi áp dụng workaround và ưu tiên cài cập nhật bản vá backport từ nhà phân phối ngay khi có sẵn.

Mã Khai Thác Và Tài Liệu Kỹ Thuật

Toàn bộ tài liệu kỹ thuật và PoC exploit code đã được công bố trong kho GitHub của nhà nghiên cứu tại: Dirty Frag README.

Kho mã này bao gồm hướng khai thác cho cả hai nhánh xfrm-ESPRxRPC, đồng thời minh họa cách chuỗi khai thác kết hợp để vượt qua các giới hạn riêng lẻ của từng biến thể lỗ hổng CVE.

Dirty Frag cho thấy một lỗ hổng CVE trong Linux kernel có thể tạo ra chiếm quyền điều khiển hệ thống mà không cần điều kiện đua lệnh, chỉ dựa trên logic xử lý page cache và skb.