Tóm tắt nhanh

CVE-2026-31431

7.0.4

  • Fragnesia (còn gọi là Copy Fail 3.0) là một khai thác leo thang đặc quyền cục bộ trên Linux, cho phép người dùng không có đặc quyền giành quyền root với độ tin cậy 100%.
  • Nó khai thác một lỗi logic trong hệ thống con XFRM ESP-in-TCP subsystem, nơi nhân “quên” rằng một mảnh bộ nhớ được chia sẻ trong quá trình gọi là hợp nhất (coalescing).
  • Bằng cách thao túng lỗ hổng này, kẻ tấn công có thể ghi các byte tùy ý vào bộ đệm trang (page cache) của các tệp read-only, như /etc/passwd hoặc /usr/bin/su, để vượt qua các kiểm tra bảo mật và mở shell root.

Fragnesia: Lỗ hổng bộ nhớ cấp quyền root trên Linux

Được phát hiện bởi William Bowling và nhóm V12, Fragnesia cho phép người dùng không đặc quyền giành đặc quyền root với độ tin cậy 100%.

Không giống nhiều khai thác dựa vào may mắn hay thời gian, Fragnesia là một lỗi logic tất định (deterministic), nghĩa là nó hoạt động mọi lúc. Điều này khiến nó trở thành “cơn ác mộng” cho quản trị viên hệ thống.

Tại sao lại gọi là Fragnesia?

Cái tên kết hợp “fragment” (mảnh) và “amnesia” (quên). Lỗi cốt lõi xảy ra khi một bộ đệm mạng (gọi là skb) “quên” rằng một phần bộ nhớ đang được chia sẻ trong quá trình hợp nhất.

Khi nhân Linux hợp nhất các gói mạng để tiết kiệm thời gian, nó mất điểm đánh dấu bảo mật quan trọng SKBFL_SHARED_FRAG. Không có điểm đánh dấu này, nhân cho rằng bộ nhớ là riêng tư và an toàn để sửa đổi, trong khi thực tế bộ nhớ đó vẫn kết nối với một tệp nhạy cảm trong bộ đệm trang.

Từ Dirty Pipe đến Fragnesia

Fragnesia được gọi là “Copy Fail 3.0” vì nó cải tiến một lớp lỗi bắt đầu từ Dirty Pipe. Họ lỗ hổng này bao gồm các biến thể như Copy Fail CVE-2026-31431 và Fragnesia. Tất cả đều nhắm mục tiêu chung: ghi dữ liệu vào các tệp chỉ đọc trong bộ nhớ (RAM).

Như nêu trong bài viết kỹ thuật, Fragnesia đặc biệt nhắm vào hệ thống con ESP-in-TCP subsystem. Bằng cách đánh lừa nhân thực hiện giải mã tại chỗ trên bộ nhớ dùng chung, kẻ tấn công có thể “lật” các byte trong các tệp mà lẽ ra họ chỉ đọc được, như /etc/passwd hoặc /usr/bin/su.

Cách khai thác hoạt động

Khai thác sử dụng thủ thuật với mã hóa AES-GCM. Quy trình từng bước:

  • Chuẩn bị: Kẻ tấn công xây dựng bảng tra cứu “byte dòng khóa (keystream)” bằng cách thay đổi giá trị nonce.
  • Kích hoạt Splice: Dùng lời gọi hệ thống splice() để đặt một trang tệp chỉ đọc trực tiếp vào socket mạng.
  • XOR bộ nhớ: Chọn nonce hoàn hảo, buộc nhân XOR một byte cụ thể trực tiếp vào trang tệp trong bộ đệm.
  • Xây dựng shell: Lặp lại từng byte cho đến khi ghi một đoạn mã shell root nhỏ lên 192 byte đầu của nhị phân /usr/bin/su trong bộ nhớ.

Khi nhị phân “bẩn” đã sẵn sàng trong bộ đệm, kẻ tấn công chạy su. Nhân thực thi phiên bản đã sửa đổi, bỏ qua các kiểm tra bảo mật và thả vào shell root.

Một chi tiết đáng ngạc nhiên về Fragnesia

Như phần trước đã nêu, Fragnesia được thiết kế hoàn toàn tất định nhờ “bảng tra cứu dòng khóa” xây dựng qua khối đếm AES-GCM.

Bằng cách thử nghiệm 65,536 nonce trước, kẻ tấn công tạo bản đồ mọi giá trị byte có thể mà quá trình giải mã của nhân sẽ XOR vào tệp mục tiêu. Điều này cho phép “lật” bất kỳ byte nào thành giá trị mong muốn, từng byte một, không cần thắng race condition.

Các bản phân phối Linux bị ảnh hưởng bởi Fragnesia

Các nhà nghiên cứu xác nhận mọi phiên bản bị ảnh hưởng bởi Dirty Frag gốc cũng dễ bị tổn thương bởi Fragnesia, bao gồm bất kỳ nhân nào chưa áp dụng bản vá hợp nhất phát hành vào ngày 13, 2026.

Các bản phân phối lớn như Ubuntu được xác nhận là mục tiêu. Tuy nhiên, người dùng Ubuntu có lợi thế nhỏ vì AppArmor hạn chế namespaces không đặc quyền cần cho một phần của khai thác theo mặc định.

Cách giảm thiểu lỗ hổng Fragnesia

Biện pháp tốt nhất là cập nhật nhân lên phiên bản có bản vá ngày 13.

Nếu chưa thể vá, áp dụng biện pháp giảm thiểu tạm thời bằng cách vô hiệu hóa các mô-đun mạng dễ bị tấn công. Theo khuyến nghị trong bài đăng oss-security, chạy các lệnh sau để đưa esp và rxrpc vào danh sách đen:

rmmod esp4 esp6 rxrpc
printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf

Thực hiện khai thác thử nghiệm Fragnesia

Điều kiện tiên quyết:

  • Hệ thống mục tiêu: Chạy phiên bản nhân bị ảnh hưởng chưa có bản vá hợp nhất.
  • Lưu ý Ubuntu: Vì Ubuntu hạn chế unprivileged user namespaces theo mặc định, phải kích hoạt trước: sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0.
  • Tệp mục tiêu: Khai thác nhắm /usr/bin/su để có shell root.

Các bước thực hiện

Bước 1: Sao chép kho lưu trữ

Tải proof-of-concept từ GitHub:

git clone https://github.com/v12-security/pocs.git

Bước 2: Di chuyển vào thư mục

cd pocs/fragnesia

Bước 3: Biên dịch khai thác

Dùng GCC:

gcc -o exp fragnesia.c

Bước 4: Chạy khai thác

./exp

Cách khai thác hoạt động:

  • Thiết lập namespace: Gọi unshare(CLONE_NEWUSER | CLONE_NEWNET) để giành CAP_NET_ADMIN trong hộp cát.
  • Tạo dòng khóa: Xây bảng tra cứu 256-entry ánh xạ byte dòng khóa AES-GCM sang nonce.
  • Kích hoạt ghi: Dùng cơ chế “Splice-then-ULP”, ghép dữ liệu từ tệp mục tiêu vào luồng TCP rồi trì hoãn cài đặt ESP-in-TCP.
  • Lỗi logic: Khi giao thức được kích hoạt, nhân “quên” các mảnh được chia sẻ với bộ đệm trang trong quá trình hợp nhất, sau đó giải mã tại chỗ không đúng, XOR dòng khóa trực tiếp vào trang tệp đã lưu.
  • Chèn tải trọng: Lặp lại từng byte để ghi đè 192 byte đầu của /usr/bin/su trong bộ nhớ bằng đoạn mã shell root.

Dọn dẹp quan trọng sau khai thác

Sau khi chạy thử, bộ đệm trang bị nhiễm bẩn. Sử dụng các tệp hỏng tiếp theo có thể gây mất ổn định. Phải khởi động lại hệ thống hoặc xóa bộ đệm thủ công bằng echo 1 | tee /proc/sys/vm/drop_caches để ensure an toàn.