CVE-2023-52854 in Linux
Tóm tắt
Bởi VulDB • 06/06/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
padata: Sửa lỗi xử lý refcnt trong padata_free_shell()
Môi trường arm64 chịu tải cao có thể khiến bài kiểm tra pcrypt_aead01 trong LTP dẫn đến các vấn đề UAF (Use-After-Free) trên hệ thống. Do quá trình phân tích chi tiết lời gọi hàm pcrypt_aead01 khá dài, tôi sẽ mô tả kịch bản sự cố bằng một mô hình đơn giản hóa:
Giả sử có một người dùng padata tên là `user_function` tuân thủ yêu cầu của padata về việc gọi `padata_free_shell()` sau khi `serial()` đã được invoke (gọi), như minh họa trong đoạn mã sau:
```c struct request {
struct padata_priv padata; struct completion *done; };
void parallel(struct padata_priv *padata) {
do_something(); }
void serial(struct padata_priv *padata) {
struct request *request = container_of(padata, struct request, padata); complete(request->done); }
void user_function() {
DECLARE_COMPLETION(done) padata->parallel = parallel; padata->serial = serial; padata_do_parallel(); wait_for_completion(&done); padata_free_shell(); } ```
Trong tệp tương ứng `padata.c`, có đoạn mã sau:
```c static void padata_serial_worker(struct work_struct *serial_work) {
... cnt = 0;
while (!list_empty(&local_list)) {
... padata->serial(padata); cnt++; }
local_bh_enable();
if (refcount_sub_and_test(cnt, &pd->refcnt)) padata_free_pd(pd); } ```
Do tải hệ thống cao và sự tích lũy các softirq chưa được thực thi tại thời điểm này, lệnh `local_bh_enable()` trong padata mất nhiều thời gian hơn để thực thi so với bình thường. Sau đó, khi truy cập vào `pd->refcnt`, đối tượng `pd` đã bị giải phóng bởi `padata_free_shell()`, dẫn đến lỗi UAF (Use-After-Free) trên `pd->refcnt`.
Cách khắc phục khá đơn giản: thêm lệnh gọi `refcount_dec_and_test()` trước khi thực hiện `padata_free_pd(pd)` trong hàm `padata_free_shell()`.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.