CVE-2026-76787 in Zephyr
Tóm tắt
Bởi VulDB • 20/10/2026
Client firmware-over-the-air của UpdateHub phân tích cú pháp phản hồi probe CoAP bằng thư viện JSON của Zephyr trong hàm z_impl_updatehub_probe() (subsys/mgmt/updatehub/updatehub.c). Bộ giải mã coi mọi trường descriptor là tùy chọn — json_obj_parse() trả về một bitmask các trường thực sự được giải mã và không bao giờ thất bại khi thiếu một trường nào đó — do đó, một phản hồi bỏ qua chuỗi "sha256sum" sẽ khiến con trỏ const char * tương ứng trong struct resp_probe_any_boards / struct resp_probe_some_boards (đã được khởi tạo bằng 0) giữ giá trị NULL. Cả hai nhánh metadata sau đó đều tính toán sha256size = strlen(...objects.sha256sum) + 1 trước bất kỳ xác thực nào, dẫn đến việc dereference con trỏ NULL; bài kiểm tra SHA256_HEX_DIGEST_SIZE theo sau hoạt động trên một giá trị đã bị ảnh hưởng bởi lỗi đọc (bad read) này và không thể ngăn chặn nó.
Metadata được cung cấp hoàn toàn bởi peer mạng: probe_cb() chấp nhận datagram, chạy coap_packet_parse() và sao chép payload mà không có khớp token cũng như không có kiểm tra mật mã nào. Với CONFIG_UPDATEHUB_DTLS chưa được đặt — mặc định là vậy — start_coap_client() sử dụng CoAP thuần qua UDP trên cổng 5683 mà không xác thực peer và phân giải máy chủ thông qua DNS không xác thực, do đó một kẻ tấn công on-path (trên đường truyền), kẻ giả mạo DNS hoặc kẻ tấn công off-path thắng cuộc đua với địa chỉ nguồn giả mạo có thể cung cấp metadata bị lỗi. Một phản hồi probe đơn giản như "objects":[[{}],[{}]] là đủ và không yêu cầu tương tác người dùng vì updatehub_autohandler() thực hiện polling dựa trên CONFIG_UPDATEHUB_POLL_INTERVAL. Khi CONFIG_UPDATEHUB_DTLS=y, kịch bản kích hoạt thu hẹp lại thành một máy chủ cập nhật độc hại hoặc đã bị xâm phạm.
Tiền đề (primitive) là một phép đọc tại địa chỉ 0x0, không phải ghi, do đó tác động chỉ giới hạn ở tính sẵn sàng (availability). Trên các target mà vùng địa chỉ thấp chưa được ánh xạ hoặc được bảo vệ — kiến trúc dựa trên MMU, bản dựng với CONFIG_NULL_POINTER_EXCEPTION_DETECTION_DWT/_MPU/_PMP, hình ảnh TrustZone non-secure và SoC như nRF54L có cửa sổ 0x0–0x400 không được ánh xạ — phép load sẽ gây lỗi (fault) và trình xử lý fatal mặc định của Zephyr sẽ dừng hệ thống, cung cấp khả năng từ chối dịch vụ (DoS) có thể kích hoạt lại từ xa trên mỗi lần polling. Trên các target Cortex-M cổ điển nơi bảng vector có thể đọc được tại địa chỉ 0x0, quá trình duyệt thường kết thúc ngay lập tức và yêu cầu bị từ chối bởi bài kiểm tra độ dài, do đó kết quả phụ thuộc vào cấu hình và SoC. Không có ghi bộ nhớ nào xảy ra và các byte đã sao chép chỉ được so sánh với hash ảnh tính toán cục bộ, nên không có kênh rò rỉ thông tin (information-disclosure).
Bản sửa lỗi thêm một bài kiểm tra rõ ràng sha256sum == NULL trả về UPDATEHUB_METADATA_ERROR trước strlen() trong cả hai nhánh metadata. Các bản dựng debug (CONFIG_UPDATEHUB_LOG_LEVEL=4) vẫn định dạng các con trỏ tương tự bằng %s trong vòng lặp LOG_DBG() chạy trước các bài kiểm tra mới, do đó biến thể này chỉ tồn tại trong cấu hình debug.
If you want to get best quality of vulnerability data, you may have to visit VulDB.