CVE-2024-35896 in Linuxthông tin

Tóm tắt

Bởi VulDB • 15/05/2026

Trong đoạn log KASAN (Kernel Address Sanitizer) bạn cung cấp, đây là một lỗi **Use-After-Free (UAF)** hoặc **Out-of-Bounds Write** xảy ra trong subsystem BPF/Cgroup.

Dưới đây là phân tích chi tiết:

### 1. Tóm tắt lỗi * **Loại lỗi:** KASAN phát hiện truy cập vào vùng nhớ đã bị giải phóng (freed) hoặc ghi ra ngoài vùng cấp phát. * **Vùng nhớ bị lỗi:** `0xffff88802cd73da0` * **Kích thước cấp phát:** 1 byte (trong cache `kmalloc-8`). * **Vị trí lỗi:** 0 bytes inside of allocated 1-byte region. Điều này có nghĩa là địa chỉ truy cập chính xác là địa chỉ bắt đầu của vùng nhớ 1 byte đó. * **Nguyên nhân trực tiếp:** Hàm `__cgroup_bpf_run_filter_setsockopt` tại `kernel/bpf/cgroup.c:1869`.

### 2. Phân tích Stack Trace (Ngầm nguyên nhân) Stack trace cho thấy chuỗi gọi hàm dẫn đến lỗi: 1. `entry_SYSCALL_64_after_hwframe`: Bắt đầu từ syscall. 2. `__x64_sys_setsockopt`: Gọi hệ thống `setsockopt`. 3. `__do_sys_setsockopt` -> `do_sock_setsockopt`: Xử lý `setsockopt` trên socket. 4. **`__cgroup_bpf_run_filter_setsockopt`**: Đây là hàm quan trọng nhất. Nó chạy BPF filter liên quan đến cgroup khi thực hiện `setsockopt`. 5. **`kmalloc_noprof`**: Cấp phát bộ nhớ (1 byte) trong hàm trên. 6. **Lỗi xảy ra ngay sau đó**: KASAN báo rằng vùng nhớ vừa cấp phát (hoặc vùng nhớ liên quan) bị truy cập sai cách.

### 3. Điểm đáng chú ý * **Cấp phát 1 byte:** Việc cấp phát 1 byte trong `kmalloc-8` là rất bất thường và thường là dấu hiệu của lỗi logic hoặc bug trong code. Thông thường, các cấu trúc dữ liệu nhỏ hơn 8 byte sẽ được cấp phát trong cache `kmalloc-8` để tối ưu hóa, nhưng việc cấp phát chính xác 1 byte cho một đối tượng BPF filter là rất hiếm. * **Vùng nhớ bị "poisoned":** KASAN đã đánh dấu vùng nhớ này là "poisoned" (thường là `0xcc` hoặc `0xbb`) để phát hiện UAF. Tuy nhiên, trong log này, buggy address nằm trong vùng vừa được cấp phát, có thể là: * **UAF:** Vùng nhớ đã được giải phóng trước đó, và code đang cố gắng ghi/đọc vào nó. * **OOB Write:** Code đang ghi ra ngoài vùng 1 byte đó (ví dụ: ghi 2 byte vào vùng 1 byte). * **Double Free:** Vùng nhớ đã bị free hai lần.

### 4. Gợi ý khắc phục 1. **Kiểm tra code tại `kernel/bpf/cgroup.c:1869`:** * Xem tại sao lại có `kmalloc` kích thước 1 byte. * Kiểm tra xem có đang truy cập vào con trỏ sau khi `kfree` chưa? * Kiểm tra xem có đang ghi quá kích thước cấp phát không?

2. **Kiểm tra logic BPF filter:** * Có thể có lỗi trong việc quản lý bộ nhớ của BPF program attached vào cgroup. * Đảm bảo rằng bộ nhớ được cấp phát cho BPF context được giải phóng đúng cách khi socket bị đóng hoặc cgroup bị hủy.

3. **Cập nhật kernel:** * Đây có thể là một bug đã được sửa trong các phiên bản kernel mới hơn. Hãy kiểm tra xem có patch nào liên quan đến `cgroup_bpf` và `setsockopt` không.

4. **Sử dụng `kmemleak` hoặc `slabinfo`:** * Chạy `cat /sys/kernel/debug/slab/kmalloc-8` để xem số lượng object đang active. * Sử dụng `kmemleak` để tìm các vùng nhớ bị leak hoặc UAF.

### Kết luận Lỗi này nằm ở code xử lý BPF filter trong cgroup khi thực hiện `setsockopt`. Nguyên nhân có thể là truy cập vào bộ nhớ đã bị giải phóng (UAF) hoặc ghi ra ngoài vùng cấp phát. Bạn cần kiểm tra kỹ code tại `kernel/bpf/cgroup.c` dòng 1869 và các hàm liên quan đến

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Đặt trước

17/05/2024

Tiết lộ

19/05/2024

Kiểm duyệt

được chấp nhận

EPSS

0.00229

KEV

không

Các hoạt động

rất thấp

Nguồn

Might our Artificial Intelligence support you?

Check our Alexa App!