1 điểm bởi GN⁺ 4 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Đây là lỗ hổng UAF do race condition trong subsystem epoll của kernel Linux, cho phép tiến trình không đặc quyền giành quyền root không chỉ trên desktop/server Linux mà cả trên thiết bị Android
  • Lỗ hổng này được Jaeyoung Chung báo cáo và khai thác dưới dạng 0-day gửi tới kernelCTF của Google; kernelCTF trao phần thưởng $71,337+ cho các khai thác kernel Linux
  • AI Mythos của Anthropic đã tìm thấy một lỗi race condition khác trong cùng đoạn mã epoll, là CVE-2026-43074, nhưng đã bỏ sót Bad Epoll
  • epollchức năng kernel cốt lõi mà hệ điều hành, dịch vụ mạng và trình duyệt phụ thuộc, nên không thể tắt; không có workaround đơn giản, cách khắc phục duy nhất là áp dụng bản vá
  • Lỗ hổng được đưa vào ở commit 58c9b016e128 ngày 2023-04-08 và được sửa ở commit a6dc643c6931 ngày 2026-04-24; các bản phân phối dùng kernel dựa trên v6.4 trở lên nhưng chưa backport bản sửa có thể bị ảnh hưởng

Bản chất và mức độ nghiêm trọng của Bad Epoll

  • Bad Epoll là lỗ hổng use-after-free (UAF) do race condition trong subsystem epoll của kernel Linux, với mã định danh CVE-2026-46242
  • Tiến trình không đặc quyền có thể giành quyền root, và lỗ hổng có thể ảnh hưởng không chỉ desktop/server Linux mà cả thiết bị Android
  • Được gửi tới kernelCTF của Google dưới dạng 0-day, do Jaeyoung Chung báo cáo và khai thác
  • kernelCTF trao phần thưởng $71,337+ cho các khai thác kernel Linux

Vì sao nguy hiểm

  • Đây là một lỗi leo thang đặc quyền Linux hiếm gặp có khả năng root Android
    • Nhiều lỗ hổng leo thang đặc quyền Linux cần các module mà Android không nạp, nên không dẫn tới root Android
    • Trong khoảng 130 lỗ hổng đã được khai thác trên Google kernelCTF, chỉ khoảng 10 lỗ hổng là ứng viên root Android, và Bad Epoll là một trong số đó
  • Có thể được kích hoạt ngay cả bên trong renderer sandbox của Chrome
    • Sandbox này chặn gần như mọi lỗi kernel khác
    • Nếu chain một khai thác renderer với Bad Epoll, tác động có thể đạt tới mức thực thi mã kernel, tương tự trường hợp Project Zero từng chỉ ra với MSG_OOB
  • epoll không có kill-switch
    • Các lỗi thuộc nhóm Copy Fail có thể bị vô hiệu hóa bằng cách unload module dễ tổn thương
    • epoll là chức năng cốt lõi mà hệ điều hành, dịch vụ mạng và trình duyệt phụ thuộc, nên không thể tắt
    • Cách khắc phục duy nhất là áp dụng bản vá
  • Cửa sổ race rất nhỏ, chỉ khoảng 6 lệnh
    • Các lần thử thông thường hầu như không trúng
    • Khai thác mở rộng cửa sổ race và chạy vòng lặp thử lại mà không làm crash kernel
    • Kết quả là đạt độ tin cậy khoảng 99% trên mục tiêu kernelCTF

Lỗi mà Mythos đã bỏ sót

  • Một commit duy nhất năm 2023, 58c9b016e128, đã đưa hai race condition riêng biệt vào khoảng 2.500 dòng mã epoll
  • Mythos của Anthropic đã tìm thấy một trong số đó và báo cáo dưới mã CVE-2026-43074
    • Kết quả này là một ví dụ đáng chú ý vì việc phát hiện lỗi race condition trong kernel là rất khó
    • Sau đó, một nhà nghiên cứu độc lập đã gửi khai thác 1-day cho lỗ hổng này tới kernelCTF
  • Race condition còn lại là Bad Epoll, và Mythos đã bỏ sót nó
    • Vì Mythos đã tìm thấy lỗi đầu tiên trong cùng đường dẫn mã epoll nhỏ này, có khả năng nó đã khảo sát khu vực đó một cách có ý nghĩa
    • Không rõ lý do chính xác vì sao Bad Epoll bị bỏ sót
  • Các yếu tố có thể khiến Bad Epoll khó phát hiện
    • Cửa sổ race chỉ khoảng 6 lệnh, nên khó hình dung chính xác interleaving giữa các thread nếu chỉ nhìn vào đoạn mã dễ tổn thương
    • Sau bản sửa CVE-2026-43074, UAF của Bad Epoll thường không kích hoạt KASAN
    • Nếu không có tín hiệu KASAN, Mythos có thể đã không đủ chắc chắn để báo cáo đây là lỗi thực sự
  • Việc sửa lỗi cũng không dễ
    • Bản vá đầu tiên của maintainer không khắc phục hoàn toàn vấn đề
    • Bản vá đúng được đưa vào mainline hai tháng sau báo cáo ban đầu

Luồng tấn công

  • Hai đường dẫn close của epoll chạy đồng thời và va chạm với nhau
    • Trong khi một đường dẫn giải phóng đối tượng, đường dẫn còn lại tiếp tục ghi vào đối tượng đó, gây ra UAF
  • Khai thác sắp xếp bốn đối tượng epoll thành hai cặp
    • Một cặp kích hoạt race condition
    • Cặp còn lại trở thành đối tượng nạn nhân
  • Sau đó, thao tác ghi UAF 8 byte được chuyển thành UAF đối tượng file
    • Thông qua tấn công cross-cache, kẻ tấn công kiểm soát toàn bộ nội dung file
  • Sau khi giành quyền kiểm soát, khai thác dùng /proc/self/fdinfo để có khả năng đọc bộ nhớ kernel tùy ý
  • Ở bước cuối, khai thác chiếm quyền luồng điều khiển và thực thi ROP chain để lấy root shell
  • Tài liệu kỹ thuật chi tiết

Giảm thiểu và các phiên bản bị ảnh hưởng

  • Không thể tắt epoll, nên không có workaround đơn giản
  • Cách khắc phục là áp dụng commit upstream a6dc643c6931 hoặc bản backport của bản phân phối
  • Thời điểm đưa lỗ hổng vào và sửa lỗi
    • Đưa vào: [58c9b016e128], 2023-04-08
    • Sửa: [a6dc643c6931], 2026-04-24
  • Các bản phân phối Linux dùng kernel dựa trên v6.4 trở lên và chưa áp dụng backport bản sửa có thể bị ảnh hưởng
  • Các kernel cũ dựa trên v6.1 không bị ảnh hưởng vì lỗ hổng được đưa vào từ v6.4

Mục tiêu khai thác và trạng thái Android

  • Khai thác hiện tại được viết cho mục tiêu Google kernelCTF
    • lts-6.12.67 (LTS): độ tin cậy 99%
    • cos-121-18867.294.100 (COS): độ tin cậy 98%
  • Khai thác Android vẫn đang được thực hiện
    • Pixel 10, kernel v6.6+: PoC hiện kích hoạt được UAF, khai thác root hoàn chỉnh đang được phát triển
    • Khai thác Android và writeup sẽ được công bố sau khi hoàn tất
    • Pixel 8 và các thiết bị khác dựa trên v6.1 không bị ảnh hưởng vì lỗ hổng được đưa vào từ v6.4

Timeline

  • 2023-04-08: Bug được đưa vào epoll qua commit 58c9b016e128
  • 2026-02-17: Báo cáo bug tới security@kernel.org
  • 2026-02-17: Maintainer đề xuất một prototype bản vá, nhưng đó không phải bản sửa đúng và thảo luận dừng lại
  • 2026-04-02: Bản sửa CVE-2026-43074 do Mythos tìm thấy được đưa vào mainline
  • 2026-04-22: Báo cáo lại vấn đề còn tồn tại
  • 2026-04-24: Commit sửa Bad Epoll a6dc643c6931 được đưa vào mainline

Tên gọi và tài liệu tham khảo

  • Tên Bad Epoll đi theo chuỗi “Bad” dành cho các lỗi kernel có khả năng root Android
  • Trang này là phiên bản ngắn; phân tích root-cause đầy đủ, tài liệu khai thác và mã được cung cấp qua các liên kết riêng

1 bình luận

 
Các ý kiến trên Lobste.rs
  • Việc lỗ hổng này có thể bị khai thác từ Chrome sandbox thực sự là chuyện rất nghiêm trọng, nên hơi ngạc nhiên khi nó được báo cáo qua kCTF mà phần thưởng chỉ dừng ở $71k

  • Bryan Cantrill lại đúng nữa rồi

    • Hơi ngại khi phải thừa nhận, nhưng nói thật là suy nghĩ đầu tiên của tôi cũng vậy
    • Tôi tò mò. Không biết bối cảnh là ông ấy đã đoán đúng điều gì
    • Nếu được thì mong ai đó cho biết thêm bối cảnh
  • Đừng để bị đánh lừa bởi repo trông có vẻ trống rỗng. Exploit được liên kết ở phần dưới README
    Tôi chưa thử nghiệm, và không có biện pháp giảm thiểu. Các tác giả còn tuyên bố có thể root Android, nên nghĩ đến hệ sinh thái Android thì có lẽ nhà sản xuất của tôi phải khoảng một tháng nữa mới phát hành bản vá. Hơn nữa, nó còn hoạt động cả trong Chrome renderer sandbox

    • Tôi mua điện thoại Android vào năm 2023, và bản cập nhật kernel cuối cùng là khoảng giữa năm 2024. Nếu lỗi này thuộc giai đoạn đó, việc nhận được bản vá có khi lại là trường hợp khá hiếm
  • Cái này cũng hoạt động trên Android à?

    • Câu thứ hai đã viết rồi còn gì
  • Có thông tin nào về việc lỗ hổng này được phát hiện như thế nào không? Nghe nói Mythos đã bỏ sót, nên tôi tò mò không biết nó được tìm thấy nhờ sự trợ giúp của một mô hình ngôn ngữ lớn khác, hay do con người rà soát
    Nếu vậy thì tôi cũng tò mò vì sao họ lại xem xét phần này

  • “Nhiều bản phân phối Linux có thể bị ảnh hưởng nếu dùng kernel dựa trên v6.4 trở lên và chưa backport bản sửa lỗi. Hãy kiểm tra các bản cập nhật bảo mật kernel của bản phân phối để biết commit sửa lỗi ở trên đã được backport hay chưa. Các kernel cũ dựa trên v6.1 không bị ảnh hưởng vì bug được đưa vào từ v6.4.”
    Tiếc thật. Tôi đã hy vọng đây sẽ là một cách hay để root điện thoại, nhưng có vẻ nó quá mới nên chắc không đặc biệt hữu dụng. Điện thoại của tôi dùng 5.15