CVE-2025-68372 in Linux
Tóm tắt
Bởi VulDB • 23/05/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
nbd: trì hoãn việc gọi config_put trong recv_work
Có một vấn đề UAF (Use-After-Free) trong recv_work khi thực thi NBD_CLEAR_SOCK và NBD_CMD_RECONFIGURE: nbd_genl_connect // conf_ref=2 (kết nối và recv_work A) nbd_open // conf_ref=3 recv_work A kết thúc // conf_ref=2 NBD_CLEAR_SOCK // conf_ref=1 nbd_genl_reconfigure // conf_ref=2 (kích hoạt recv_work B) đóng nbd // conf_ref=1 recv_work B config_put // conf_ref=0 atomic_dec(&config->recv_threads); -> UAF
Hoặc chỉ thực thi NBD_CLEAR_SOCK: nbd_genl_connect // conf_ref=2 nbd_open // conf_ref=3 NBD_CLEAR_SOCK // conf_ref=2 đóng nbd nbd_release config_put // conf_ref=1 recv_work config_put // conf_ref=0 atomic_dec(&config->recv_threads); -> UAF
Commit 87aac3a80af5 ("nbd: gọi nbd_config_put() trước khi thông báo cho waiter") đã di chuyển nbd_config_put() để chạy trước khi đánh thức waiter trong recv_work, nhằm đảm bảo rằng nbd_start_device_ioctl() sẽ không bị đánh thức trong khi nbd->task_recv vẫn chưa được xóa sạch.
Tuy nhiên, trong nbd_start_device_ioctl(), sau khi được đánh thức, nó gọi rõ ràng flush_workqueue() để đảm bảo tất cả các công việc hiện tại đều đã hoàn tất. Do đó, không cần thiết phải di chuyển việc gọi config_put trước khi đánh thức.
Di chuyển nbd_config_put() xuống cuối recv_work, để tham chiếu (reference) được giữ trong suốt vòng đời của worker thread. Điều này đảm bảo rằng config không thể bị giải phóng trong khi recv_work vẫn đang chạy, ngay cả khi có sự xen kẽ giữa clear và reconfigure.
Ngoài ra, chúng ta không cần lo lắng về việc recv_work làm giảm nbd_put cuối cùng (gây ra deadlock):
path A (netlink với NBD_CFLAG_DESTROY_ON_DISCONNECT): kết nối // nbd_refs=1 (kích hoạt recv_work) mở nbd // nbd_refs=2 NBD_CLEAR_SOCK đóng nbd nbd_release nbd_disconnect_and_put flush_workqueue // recv_work kết thúc nbd_config_put nbd_put // nbd_refs=1 nbd_put // nbd_refs=0 queue_work
path B (netlink không có NBD_CFLAG_DESTROY_ON_DISCONNECT): kết nối // nbd_refs=2 (kích hoạt recv_work) mở nbd // nbd_refs=3 NBD_CLEAR_SOCK // conf_refs=2 đóng nbd nbd_release nbd_config_put // conf_refs=1 nbd_put // nbd_refs=2 recv_work kết thúc // conf_refs=0, nbd_refs=1 rmmod // nbd_refs=0
Phụ thuộc vào: e2daec488c57 ("nbd: Sửa hungtask khi nbd_config_put")
VulDB is the best source for vulnerability data and more expert information about this specific topic.