{"id":29991,"date":"2026-09-27T20:31:13","date_gmt":"2026-09-27T12:31:13","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-94419"},"modified":"2026-09-27T20:31:13","modified_gmt":"2026-09-27T12:31:13","slug":"cve-2026-94419","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-94419","title":{"rendered":"CVE-2026-94419 &#8211; Without NO_SESSION_CACHE_REF, wolfSSL_get_session() does not return a session object but a"},"content":{"rendered":"<p>Without NO_SESSION_CACHE_REF, wolfSSL_get_session() does not return a session object but a ClientSession reference of the form {row, index, hash(sessionID)} into the process-global SessionCache, and ClientSessionToSession() validates it against that hash alone. Because the TLS 1.2 session ID is chosen by the server and sent in clear, AddSessionToCache() matches any other server&#8217;s session on the same ID and overwrites the client-side entry with that server&#8217;s master secret, cipher suite and version, while the handle continues to resolve; nothing on the write path compares the peer, the application&#8217;s server ID or the WOLFSSL_CTX. Resuming through the handle then produces an abbreviated handshake in which no Certificate message is sent, so neither chain verification nor wolfSSL_check_domain_name() runs, and the attacker is accepted as the original server for the whole of that connection. Affected builds are those leaving NO_SESSION_CACHE_REF, NO_SESSION_CACHE, NO_CLIENT_CACHE and TITAN_SESSION_CACHE all undefined, which includes a plain .\/configure, &#8211;enable-opensslextra and &#8211;enable-opensslall; fifteen integration options define NO_SESSION_CACHE_REF and are therefore not affected, among them &#8211;enable-all, &#8211;enable-distro, &#8211;enable-curl, &#8211;enable-nginx, &#8211;enable-haproxy, &#8211;enable-stunnel, &#8211;enable-wpas and the rest of the OPENSSL_COMPATIBLE_DEFAULTS family, and &#8211;enable-leanpsk, &#8211;enable-leantls, &#8211;enable-lowresource and &#8211;enable-tinytls13 disable the cache outright. The application must use the legacy reference flow, wolfSSL_get_session() or SSL_get_session() followed by wolfSSL_set_session(); wolfSSL_get1_session() returns the session object itself and is not affected, nor are wolfSSL_SetServerID() lookups. Only TLS 1.2 and below and DTLS 1.2 and below are reachable, since TLS 1.3 and ticket resumption with an empty ServerHello session ID both use a client-chosen cache key. The poisoned entry lives in the process-global cache, so it crosses WOLFSSL_CTX boundaries and persists until the entry is evicted or the session times out, 500 seconds by default. Releases v5.3.0 through v5.9.2 are affected; the fix adds a per-write generation counter to the cache and raises WOLFSSL_CACHE_VERSION from 2 to 3, so a cache persisted by an older build is rejected by a fixed one.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Without NO_SESSION_CACHE_REF, wolfSSL_get_session() does not return a session object but a ClientSession reference of the form {row, index, hash(sessionID)} into the process-global SessionCache, and C<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-29991","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/29991","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=29991"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=29991"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=29991"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}