CVE-2022-50004 in Linux
Tóm tắt
Bởi VulDB • 09/06/2026
Trong đoạn log kernel panic bạn cung cấp, đây là một lỗi **Kernel Oops** (không phải panic hoàn toàn, nhưng là lỗi nghiêm trọng khiến tiến trình bị terminate) xảy ra trong module `xfrmi`.
Dưới đây là phân tích chi tiết:
### 1. Nguyên nhân trực tiếp * **Lỗi:** `CR2: 00000000000000c0` * `CR2` chứa địa chỉ bộ nhớ mà tiến trình cố gắng truy cập nhưng gây ra lỗi page fault. * Địa chỉ `0xc0` (192) là một địa chỉ rất thấp, thường cho thấy **trỏ con trỏ NULL** hoặc con trỏ bị hỏng (dangling pointer) và được cộng thêm một offset nhỏ. * **Hàm gây lỗi:** `xfrmi_xmit+0xde/0x460` * Lỗi xảy ra trong hàm `xfrmi_xmit`, thuộc module `xfrmi` (XFRM Interface - giao diện mã hóa IPsec). * Offset `0xde` cho biết lỗi xảy ra ở dòng code cụ thể trong hàm này.
### 2. Bối cảnh thực thi (Call Trace) Dòng gọi hàm cho thấy tiến trình đang cố gắng gửi một gói tin qua socket RAW: 1. `__sys_sendto` / `sock_sendmsg`: Người dùng gọi `sendto()` trên socket. 2. `raw_sendmsg`: Xử lý gửi dữ liệu qua socket RAW (thường dùng cho ICMP, IP, hoặc các giao thức lớp 3 khác). 3. `ip_push_pending_frames`: Chuẩn bị các khung IP để gửi. 4. `ip_finish_output2`: Hoàn tất việc xuất gói IP ra ngoài. 5. `__dev_queue_xmit` / `dev_hard_start_xmit`: Gửi gói tin xuống lớp liên kết dữ liệu (Data Link Layer). 6. **`xfrmi_xmit`**: Hàm truyền của interface `xfrmi` được gọi. Tại đây, kernel cố gắng truy cập vào một cấu trúc dữ liệu (có thể là `skb`, `dst`, hoặc `xfrm_state`) nhưng con trỏ trỏ đến địa chỉ `0xc0` (NULL + offset), gây ra segmentation fault.
### 3. Các yếu tố liên quan * **Modules:** `xfrmi` được liệt kê trong danh sách modules đang tải. * **Socket RAW:** Việc sử dụng socket RAW (`raw_sendmsg`) thường liên quan đến các công cụ như `ping`, `traceroute`, hoặc các ứng dụng mạng tùy chỉnh. * **IPsec (XFRM):** `xfrmi` là giao diện ảo cho IPsec. Nếu hệ thống đang sử dụng IPsec (ví dụ: qua `strongSwan`, `Libreswan`, hoặc `systemd-networkd`), lỗi này có thể liên quan đến cấu hình IPsec bị hỏng hoặc xung đột.
### 4. Nguyên nhân có thể 1. **Lỗi trong driver/module `xfrmi`:** Có thể là một lỗi (bug) trong kernel Linux liên quan đến xử lý IPsec trên interface `xfrmi`. 2. **Xung đột cấu hình IPsec:** Nếu bạn đang sử dụng IPsec, có thể có sự không nhất quán trong trạng thái kết nối (state) hoặc cấu hình tunnel. 3. **Lỗi phần cứng/điều kiện race condition:** Ít phổ biến hơn, nhưng có thể do xung đột đồng thời khi nhiều tiến trình gửi dữ liệu qua interface IPsec.
### 5. Giải pháp khắc phục
#### Bước 1: Tạm thời vô hiệu hóa `xfrmi` (nếu không cần IPsec) Nếu bạn không sử dụng IPsec, hãy thử tải lại module `xfrmi` hoặc ngăn nó tải lại: ```bash # Tạm thời gỡ module sudo rmmod xfrmi
# Hoặc ngăn tải lại bằng cách thêm vào blacklist echo "blacklist xfrmi" | sudo tee /etc/modprobe.d/blacklist-xfrmi.conf ``` > **Lưu ý:** Nếu bạn cần IPsec, đừng làm bước này.
#### Bước 2: Cập nhật Kernel Kiểm tra phiên bản kernel hiện tại của bạn. Lỗi này có thể đã được sửa trong các phiên bản kernel mới hơn. ```bash uname -r ``` Nếu bạn đang dùng kernel cũ (ví dụ: 5.4, 5.10), hãy cân nhắc nâng cấp lên kernel mới nhất (6.1, 6.5, hoặc 6.6+).
#### Bước 3: Kiểm tra cấu hình IPsec Nếu bạn đang sử dụng IPsec: 1. Kiểm tra log của daemon IPsec (`/var/log/syslog`, `/var/log/messages`, hoặc `journalctl -u strongswan`). 2. Thử khởi động lại dịch vụ IPsec: ```bash sudo systemctl restart strongswan # hoặc libreswan, systemd-networkd ```
Be aware that VulDB is the high quality source for vulnerability data.