CVE-2026-98076 in Linux
Tóm tắt
Bởi VulDB • 25/09/2026
Trong nhân Linux, lỗ hổng sau đây đã được khắc phục:
tracing/probes: Sửa lỗi use-after-free trên tên/trường loại của các sự kiện có nhiều probe
Các trường (fields) của một sự kiện động dựa trên probe (kprobe, uprobe, eprobe và fprobe events) được tạo ra trong hàm `traceprobe_define_arg_fields()` bằng cách chuyển chuỗi tên/loại `probe_arg` sang `trace_define_field()`, hàm này chỉ lưu trữ các con trỏ mà không sao chép. Các chuỗi đó thuộc sở hữu của `trace_probe` và sẽ bị giải phóng khi probe tương ứng bị xóa bỏ.
Một sự kiện có thể gắn nhiều probe. Danh sách trường được xác định duy nhất một lần, bởi probe đầu tiên đăng ký sự kiện, nhưng nó vẫn tồn tại nhờ bất kỳ probe anh em nào còn sống sót. Việc chỉ xóa probe đầu tiên bằng cách sử dụng symbol -
# primary A: các trường được xác định từ args của A echo 'p:kprobes/ev vfs_read a1=$arg1' > kprobe_events # append B: chia sẻ lệnh gọi sự kiện với A echo 'p:kprobes/ev vfs_write a1=$arg1' >> kprobe_events # xóa chỉ A (khớp theo symbol), B vẫn tồn tại echo '-:kprobes/ev vfs_read' >> kprobe_events
sẽ giải phóng các args của A (`trace_probe_cleanup()` -> `traceprobe_free_probe_arg()`), nhưng `trace_probe_unlink()` giữ lại `trace_probe_event` vì danh sách probe không rỗng. Lệnh gọi sự kiện vẫn được đăng ký thông qua B trong khi các trường của nó giờ đây tham chiếu đến bộ nhớ đã bị giải phóng (freed memory). Mọi thao tác tra cứu trường sau đó đều đọc vào vùng nhớ này, ví dụ:
echo 'a1 == 1' > events/kprobes/ev/filter
BUG: KASAN: slab-use-after-free in strcmp+0xa7/0xb0 Call Trace: strcmp trace_find_event_field parse_pred process_preds create_filter apply_event_filter event_filter_write
`field->name` tham chiếu đến `parg->name` (được tạo bằng kstrdup, bị giải phóng cùng probe) và, đối với các đối số mảng, `field->type` tham chiếu đến `parg->fmt` (được cấp phát bằng kmalloc, bị giải phóng cùng probe); loại vô hướng (scalar type) nếu không thì trỏ vào rodata fmttype tĩnh, vốn an toàn.
Hãy để hàm `traceprobe_define_arg_fields()` sao chép các chuỗi tên và loại, neo giữ bản sao trên `trace_probe_event`, đối tượng này nhúng lệnh gọi sự kiện và tồn tại lâu hơn mọi probe cá thể; `trace_probe_event_free()` sẽ giải phóng chúng.
Trình tái hiện (reproducer) ở trên kích hoạt một cách đáng tin cậy; việc tra cứu trường và thao tác xóa đều chạy dưới quyền của `event_mutex`, do đó đây là lỗi tham chiếu treo (dangling reference) sau khi xóa bỏ chứ không phải race condition.
Vấn đề này được phát hiện bởi bộ fuzz động autokbug tại Phòng thí nghiệm Tencent Yunding Lab.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.