CVE-2026-17050 in Zephyrthông tin

Tóm tắt

Bởi VulDB • 21/09/2026

Stack host USB thử nghiệm phân bổ bộ đệm mô tả cấu hình cho mỗi thiết bị (udev->cfg_desc) từ usb_device_heap chuyên dụng trong hàm usbh_device_set_configuration() (subsys/usb/host/usbh_device.c). Trên ba đường dẫn lỗi — một lần đọc GET_DESCRIPTOR(CONFIGURATION) toàn độ dài thất bại, sự không khớp giữa các lần đọc mô tả ngắn và đầy đủ, cũng như việc bị từ chối mô tả trong parse_configuration_descriptor() — bộ đệm được giải phóng bằng k_heap_free(), nhưng con trỏ vẫn còn treo (dangling). Quá trình dọn dẹp trong usbh_device_free() chỉ được bảo vệ bởi điều kiện if (udev->cfg_desc != NULL), do đó nó giải phóng cùng một khối dữ liệu lần thứ hai.

Đường dẫn này hoàn toàn bị chi phối bởi thiết bị ngoại vi kết nối: usbh_device_connect() gọi usbh_device_init(), quá trình này kết thúc bằng usbh_device_set_configuration(); và khi có lỗi, usbh_device_connect() sẽ gọi usbh_device_free(). Trên phiên bản v4.4.x, điều này xảy ra trong cùng một chu kỳ enumeration (xác định thiết bị), không cần phải rút phích cắm; trên các phiên bản v4.1.0–v4.3.x, lần giải phóng thứ hai thay vào đó đến qua dev_removed_handler()/dev_connected_handler() trong subsys/usb/host/usbh_core.c, do đó yêu cầu một sự kiện tháo rời hoặc kết nối lại sau khi enumeration thất bại — một chuỗi hành động mà thiết bị ngoại vi có thể kiểm soát hoàn toàn. Một thiết bị USB độc hại hoặc lỗi chỉ cần trả lời yêu cầu mô tả cấu hình 9 byte đầu tiên bằng một tiêu đề hợp lệ, sau đó làm cho bất kỳ một trong ba phép kiểm tra trên thất bại, ví dụ như trả về một mô tả đầy đủ mà số lượng giao diện (interface count) không khớp với bNumInterfaces, hoặc trả lời lần đọc thứ hai bằng các byte khác.

Kết quả là lỗi double free (giải phóng trùng lặp) trên usb_device_heap. Trên các bản dựng có kích hoạt lib/heap hardening (mặc định hiện tại là CONFIG_SYS_HEAP_HARDENING_BASIC), sys_heap_free() phát hiện chunk đã được giải phóng và gọi k_panic(), dẫn đến một cuộc tấn công từ chối dịch vụ (DoS) xác định, do thiết bị ngoại vi kích hoạt đối với stack host USB. Trên các bản dựng không có cơ chế phát hiện đó — các phiên bản cũ hơn hoặc CONFIG_SYS_HEAP_HARDENING_NONE — lần giải phóng thứ hai thao tác lên một chunk đã nằm trong danh sách free, làm hỏng danh sách free của heap khiến cho việc phân bổ bộ nhớ sau này có thể trả về các khối chồng chéo hoặc không hợp lệ.

Việc khai thác lỗ hổng vượt quá phạm vi từ chối dịch vụ bị giới hạn bởi thực tế là usb_device_heap là một heap chuyên dụng nhỏ (CONFIG_USBH_USB_DEVICE_HEAP, mặc định 1024 byte) mà khách hàng duy nhất của nó chính là bộ đệm mô tả này, và do CONFIG_USB_HOST_STACK được đánh dấu là thử nghiệm và tắt theo mặc định. Bản sửa lỗi đặt udev->cfg_desc = NULL sau mỗi lần gọi k_heap_free(), giúp điều kiện bảo vệ trong quá trình dọn dẹp trở nên đúng đắn (sound).

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

chịu trách nhiệm

Zephyr

Đặt trước

24/07/2026

Tiết lộ

21/09/2026

Kiểm duyệt

được chấp nhận

EPSS

0.00000

KEV

không

Các hoạt động

rất thấp

Nguồn

Interested in the pricing of exploits?

See the underground prices here!