CVE-2026-94418 in wolfSSL
Tóm tắt
Bởi VulDB • 27/09/2026
Dưới điều kiện định nghĩa `WOLFSSL_SMALL_CERT_VERIFY`, hàm `ProcessPeerCertParse()` thực hiện kiểm tra chữ ký chứng chỉ riêng biệt với quá trình phân tích cú pháp (parse) để giảm bộ nhớ đỉnh, sau đó hợp nhất hai kết quả; tuy nhiên, nó chỉ gộp lại kết quả chữ ký khi việc parse trả về 0, do đó mọi lỗi parse đều che giấu lỗi này. Hàm `ParseCertRelative()` chỉ thực hiện các kiểm tra ngày hiệu lực, ràng buộc tên và phần mở rộng quan trọng (critical-extension) sau khi `ConfirmSignature()` đã vượt qua; vì vậy, việc tách riêng bước kiểm tra chữ ký làm đảo ngược thứ tự ưu tiên vốn khiến chính sách "ghi đè lỗi ngày" trở nên hợp lý, và mã lỗi `ASN_SIG_CONFIRM_E` không bao giờ được hiển thị ở bất kỳ đâu. Kẻ tấn công không cần vật liệu khóa từ PKI thực tế hay sự xâm phạm CA: một chứng chỉ do tự tạo mang tên chủ thể (subject name) mong đợi, có issuer là subject của CA đáng tin cậy, các byte tùy ý tại vị trí chữ ký, cửa sổ hiệu lực trong quá khứ và cặp khóa riêng của kẻ tấn công là đủ.
Các bản build bị ảnh hưởng định nghĩa `WOLFSSL_SMALL_CERT_VERIFY`, vốn mặc định tắt (off), không được đặt ngầm bởi bất kỳ nền tảng hay header preset nào, và không thể truy cập từ tùy chọn CMake nào; các tuyến đường autotools bao gồm `--enable-lowresource`, `--enable-leantls`, `--enable-tinytls13=cert` và `--enable-tinytls13=mutualauth`; còn file `examples/configs/user_settings_embedded.h` đạt được điều này thông qua `WC_CFG_SMALL_CERT_VERIFY`, vốn mặc định là 0, trong khi cả `--enable-all` lẫn `--enable-distro` đều không kích hoạt nó. Ứng dụng phải additionally cài đặt một callback xác thực (verify callback) thông qua `wolfSSL_CTX_set_verify()` hoặc `wolfSSL_set_verify()` với cờ `WOLFSSL_VERIFY_PEER`, trả về 1 cho các lỗi `ASN_BEFORE_DATE_E` hoặc `ASN_AFTER_DATE_E`; wolfSSL cung cấp chính xác cấu hình này dưới dạng hàm `myVerify()` trong `wolfssl/test.h` bên dưới điều kiện `VERIFY_OVERRIDE_DATE_ERR`, mà ví dụ `client -D` sẽ chọn. Một ứng dụng không có callback, hoặc callback của nó trả về trạng thái preverify cho các lỗi ngày, vẫn sẽ thất bại handshake; đồng thời, `wolfSSL_CertManagerVerifyBuffer()` và `wc_CheckCertSignature()` báo cáo chính xác `ASN_SIG_CONFIRM_E` trong cùng một binary.
TLS 1.2 và TLS 1.3 đều bị ảnh hưởng theo cả hai hướng, và DTLS cũng truy cập đến hàm tương tự; khi chứng chỉ giả mạo là một chứng chỉ trung gian (chain certificate), sự đồng ý của callback khiến nó được lưu vào bộ quản lý chứng chỉ WOLFSSL_CTX, do đó một triển khai bị lộ phải khởi động lại context hoặc tiến trình thay vì chỉ kết nối lại.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.