Lỗ hổng Linux Kernel OVSwrap mới cho phép người dùng cục bộ chiếm quyền Root thông qua Open vSwitch

Một lỗi memory corruption trong datapath của Open vSwitch thuộc Linux kernel cho phép người dùng cục bộ thông thường chiếm quyền root trên nhiều bản phân phối mặc định. Lỗ hổng có mã CVE-2026-64531 với điểm CVSS 7.8 và tên mã OVSwrap, cho phép kẻ tấn công leo thang đặc quyền mà không cần cấu hình OVS phức tạp.
Lỗ hổng OVSwrap trên Linux
Lỗ hổng OVSwrap cho phép chiếm quyền root trên Linux kernel

Một lỗi memory corruption trong datapath của Open vSwitch thuộc Linux kernel cho phép người dùng cục bộ thông thường chiếm quyền root trên một loạt các bản phân phối được cấu hình mặc định. Đáng chú ý, một bản exploit công khai đã được phát hành đi kèm với các bản ghi có sẵn cho khoảng 800 bản build kernel khác nhau.

Lỗ hổng này được theo dõi với mã CVE-2026-64531 (điểm CVSS: 7.8) và được người phát hiện đặt tên mã là OVSwrap. Lỗ hổng đã được nhà nghiên cứu bảo mật Asim Manizada công bố vào ngày 28 tháng 7 năm 2026.

Phân tích kỹ thuật về OVSwrap

Lỗi này nằm trong datapath của kernel, không phải trong daemon ovs-vswitchd ở không gian người dùng (userspace). Trong một bài phân tích kỹ thuật, Manizada cho biết kẻ tấn công "không cần bridge OVS hiện có, không cần ovs-vswitchd đang chạy và không cần quyền CAP_NET_ADMIN ở cấp độ máy chủ (host-level)."

Trên các hệ thống bị ảnh hưởng, nơi datapath OVS kernel có sẵn và unprivileged user namespaces được kích hoạt, người dùng bình thường có thể tạo user và network namespace riêng bằng lệnh unshare -Urn, giành quyền CAP_NET_ADMIN bên trong namespace đó và tiếp cận đường dẫn flow-installation chứa lỗ hổng.

Nếu module openvswitch đã được cài đặt nhưng chưa được load, việc truy vấn tên Generic Netlink của nó có thể tự động load module này. Do đó, việc lệnh lsmod không hiển thị gì không có nghĩa là hệ thống đã an toàn.

Bản vá upstream fix đã được đưa vào các nhánh ổn định (stable trees) vào ngày 24 tháng 7. Trong trường hợp bản vá từ nhà cung cấp kernel (vendor) chưa có sẵn và không yêu cầu Open vSwitch, hãy chặn việc load module trong tương lai; nếu module đã tồn tại trong bộ nhớ, hãy unload nó hoặc khởi động lại hệ thống.

Các phiên bản Kernel và phân phối bị ảnh hưởng

Manizada cho biết ông đã báo cáo vấn đề này cho [email protected] và những người duy trì OVS vào ngày 19 tháng 6. Các bản phát hành upstream đầu tiên được khắc phục là Linux 5.15.212, 6.1.178, 6.6.145, 6.12.97, 6.18.40 và 7.1.5. Các dòng kernel đã kết thúc vòng đời (End-of-life) từ 6.13 đến 6.17, 6.19 và 7.0 sẽ không nhận được các bản vá ổn định upstream.

Những con số phiên bản upstream này là chưa đủ. Các bản phân phối kernel thường mang theo các bản vá backport và các thay đổi downstream, vì vậy hệ thống theo dõi của nhà cung cấp (vendor tracker) là nguồn thông tin chính xác nhất.

Cơ chế gây lỗi và Exploit

Open vSwitch lưu trữ các flow action được tạo ra dưới dạng các thuộc tính Netlink với trường nla_len rộng 16-bit, giới hạn bất kỳ thuộc tính lồng nhau (nested attribute) đơn lẻ nào ở mức 65,535 bytes. Lỗi gán giá trị không an toàn này đã tồn tại trong 13 năm, nhưng giới hạn 32 KiB trên tổng luồng action được tạo ra đã giữ cho các nested action dưới điểm bị wrap (xoay vòng giá trị).

Tuy nhiên, một thay đổi vào tháng 3 năm 2025 đã loại bỏ giới hạn đó vì nó gây ra các lỗi không mong muốn, bao gồm cả trong các triển khai OpenStack lớn, và vô tình làm lộ ra lỗi truncation (cắt bỏ) cũ hơn. Các cuộc thảo luận về bản commit này chỉ tập trung vào độ tin cậy và lỗi phía người dùng mà không đề cập đến hệ quả bảo mật khi loại bỏ lớp bảo vệ này.

Kẻ tấn công gửi một action CLONE chứa hàng trăm sub-action conntrack. Trên kiến trúc x86-64, kernel mở rộng mỗi action lên 164 bytes, đẩy nested action vượt quá 65,535 bytes. Khi OVS ghi kết quả vào trường độ dài 16-bit, giá trị sẽ bị wrap.

Mã thực thi sau đó tin tưởng vào độ dài này và tiếp tục phân tích cú pháp từ bên trong dữ liệu conntrack do kẻ tấn công kiểm soát, nơi các OVS action giả mạo đang chờ sẵn. Vì điểm rơi (landing point) là xác định bên trong cùng một bộ đệm liền kề, nên không cần kỹ thuật heap grooming.

Manizada mô tả kết quả là một lỗ hổng memory corruption với "độ tin cậy tương đương lỗi logic" (logic-bug-grade reliability).

Bản exploit chuỗi ba primitives từ việc wraparound: rò rỉ con trỏ kernel thông qua action OUTPUT giả, đọc kernel tùy ý thông qua action SET tunnel giả mạo, và giảm giá trị có mục tiêu (targeted decrement) thông qua việc giải phóng con trỏ tun_dst giả mạo. Nó sử dụng các primitives này để tìm thông tin định danh (credentials) của một tiến trình máy chủ và trên các kernel hiện đại, giảm fsuidfsgid về 0.

Bản proof-of-concept (PoC) được phát hành có tính chất phá hoại rõ rệt. Nó cũng yêu cầu hỗ trợ OVS conntrack, helper FTP conntrack và sudo phải được cài đặt trên hệ thống.

Nếu thành công, nó sẽ làm hỏng một credential kernel đang hoạt động, sửa đổi tệp /etc/sudoers.d hoặc /etc/sudoers, mở một shell root và để lại các tiến trình cũng như trạng thái OVS để tránh việc giải phóng không an toàn. Kho lưu trữ PoC bao gồm các bản ghi cho khoảng 800 bản build kernel x86-64 chính xác và cố gắng suy diễn động từ các biểu tượng (symbols) hoặc BTF cho các bản build chưa có sẵn.

Phạm vi ảnh hưởng và Cách phòng tránh

Ma trận thử nghiệm của Manizada cho thấy khả năng khai thác ở cấu hình mặc định trên các hệ thống: AlmaLinux 9 và 10, Alpine 3.22 đến 3.24, Amazon Linux 2023, Arch, CentOS Stream 9 và 10, Debian 12 và 13, Fedora 42 đến 44, Gentoo, Kali 2026.1, Linux Mint 22.3, NixOS, openSUSE Tumbleweed, Pop!_OS, Rocky Linux 9 và 10, và Ubuntu 22.04.

Trên hệ thống Ubuntu 24.04, AppArmor đã ngăn chặn việc tạo namespace trực tiếp, nhưng phương pháp fallback aa-exec -p trinity của PoC đã khôi phục khả năng tiếp cận. Ubuntu 26.04 mặc định đã chặn con đường của người dùng thông thường; tuy nhiên, nếu tắt hạn chế user-namespace của AppArmor, hệ thống sẽ bị khai thác.

Các hệ thống Amazon Linux 2, Debian 11, Rocky Linux 8 và Ubuntu 20.04 vẫn giữ các đường dẫn mã cũ hơn và không thể bị khai thác qua con đường này.

Người dùng nên cài đặt bản vá kernel từ nhà cung cấp ngay khi có sẵn. Nếu Open vSwitch không cần thiết, bước tạm thời nhanh nhất là chặn module:

echo 'install openvswitch /bin/false' > /etc/modprobe.d/ovswrap.conf

Việc vô hiệu hóa unprivileged user namespaces sẽ đóng con đường khai thác của người dùng cục bộ thông thường, nhưng không chặn được container hoặc các tiến trình khác đã có quyền CAP_NET_ADMIN trên network namespace do kẻ tấn công kiểm soát. Kho lưu trữ PoC cũng bao gồm một lớp bảo vệ BPF khẩn cấp cho các môi trường bắt buộc phải duy trì cả OVS và namespaces.

Rủi ro đặc biệt nghiêm trọng trong các môi trường có nhiều người dùng hoặc khối lượng công việc không đáng tin cậy chia sẻ cùng một máy chủ. Như khuyến cáo từ CloudLinux: kẻ tấn công có thể đã xâm nhập vào một trang web thông qua một lỗi khác, và OVSwrap chính là công cụ giúp biến vấn đề chiếm tài khoản đơn lẻ thành chiếm toàn bộ máy chủ.