{"id":16222,"date":"2026-09-04T19:05:13","date_gmt":"2026-09-04T11:05:13","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-45445"},"modified":"2026-09-04T19:05:13","modified_gmt":"2026-09-04T11:05:13","slug":"cve-2026-45445","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-45445","title":{"rendered":"CVE-2026-45445 [HIGH] &#8211; Issue summary: When an application drives an AES-OCB context through the\npublic EVP_Cipher"},"content":{"rendered":"<p>Issue summary: When an application drives an AES-OCB context through the<br \/>\npublic EVP_Cipher() one-shot interface, the application-supplied<br \/>\ninitialisation vector (IV) is silently discarded.<\/p>\n<p>Impact summary: Every message encrypted under the same key uses the<br \/>\nsame effective nonce regardless of the IV supplied by the caller,<br \/>\nresulting in (key, nonce) reuse and loss of confidentiality.  If the<br \/>\nsame code path is used to compute the authentication tag, the tag<br \/>\ndepends only on the (key, IV) pair and not on the plaintext or<br \/>\nciphertext, allowing universal forgery of arbitrary ciphertext from a<br \/>\nsingle captured message.<\/p>\n<p>OpenSSL provides two ways to drive a cipher: the documented streaming<br \/>\ninterface (EVP_CipherUpdate \/ EVP_CipherFinal_ex) and a lower-level<br \/>\none-shot, EVP_Cipher(), whose documentation explicitly recommends<br \/>\nagainst use by applications in favour of EVP_CipherUpdate() and<br \/>\nEVP_CipherFinal_ex().  The OCB provider&#8217;s streaming handler flushes<br \/>\nthe application-supplied IV into the OCB context before processing<br \/>\ndata; the one-shot handler did not.  Every call to EVP_Cipher() on an<br \/>\nAES-OCB context therefore ran with the all-zero key-derived offset<br \/>\nstate left by cipher initialisation, regardless of the caller&#8217;s IV.<\/p>\n<p>If EVP_EncryptFinal_ex() is subsequently used to obtain the<br \/>\nauthentication tag, the deferred IV setup runs at that point and<br \/>\nclears the running checksum that should have been accumulated over the<br \/>\nplaintext.  The resulting tag is a function of (key, IV) only and<br \/>\nverifies against any ciphertext produced under the same (key, IV)<br \/>\npair.<\/p>\n<p>The OpenSSL SSL\/TLS implementation is not affected: AES-OCB is not a<br \/>\nTLS cipher suite, and libssl does not call EVP_Cipher() in any case.<br \/>\nApplications that drive AES-OCB through the documented streaming AEAD<br \/>\nAPI (EVP_CipherUpdate \/ EVP_CipherFinal_ex) are not affected.  Only<br \/>\napplications that combine the AES-OCB cipher with the EVP_Cipher()<br \/>\none-shot API are vulnerable.<\/p>\n<p>The FIPS modules in 4.0, 3.6, 3.5, 3.4 and 3.0 are not affected by<br \/>\nthis issue, as AES-OCB is outside the OpenSSL FIPS module boundary.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Issue summary: When an application drives an AES-OCB context through the<br \/>\npublic EVP_Cipher() one-shot interface, the application-supplied<br \/>\ninitialisation vector (IV) is silently discarded.<\/p>\n<p>Impact summ<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-16222","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/16222","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=16222"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=16222"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=16222"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}