Biblioteka Python cryptography w wersjach od 44.0.0 do 49.x ujawnia wynik operacji RSA PKCS#1 v1.5 podczas deszyfrowania wiadomości PKCS#7 w kilku rozróżnialnych sposobach, w tym poprzez dokładną długość odszyfrowanego klucza oraz timing. Umożliwia to atakującemu zbudowanie tzw. wyroczni Bleichenbachera i odzyskanie klucza szyfrowania treści.
▸ Pokaż oryginał (EN)
cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. From 44.0.0 until 50.0.0, pkcs7_decrypt_der, pkcs7_decrypt_pem, and pkcs7_decrypt_smime reported the outcome of decrypting a RecipientInfo's encryptedKey in several distinguishable ways, one of which disclosed the exact length recovered from the RSA operation. The same distinction was also observable by timing. An application that decrypts attacker-supplied EnvelopedData and reflects the outcome gives the attacker a Bleichenbacher oracle against the content-encryption key. Decryption ran as RSA PKCS#1 v1.5 decrypt of encryptedKey, build an AES cipher from the result, then AES-CBC decrypt and PKCS#7 unpad. Invalid RSA padding, a valid padding with a bad key length, a correct length with a wrong key, and the real key each failed or succeeded differently. Case 1 is reachable only where the linked library lacks implicit rejection: OpenSSL 3.0 and 3.1, LibreSSL, and BoringSSL. Exploitation requires a service that auto-decrypts untrusted EnvelopedData matching the victim certificate and answers adaptively at high volume, such as an S/MIME gateway or mail filter. This issue is fixed in 50.0.0.
Funkcje pkcs7_decrypt_der, pkcs7_decrypt_pem oraz pkcs7_decrypt_smime obsługują błędy deszyfrowania RSA PKCS#1 v1.5 dla pola encryptedKey w sposób niejednolity: nieprawidłowe dopełnienie RSA, prawidłowe dopełnienie z błędną długością klucza, poprawna długość z błędnym kluczem oraz poprawny klucz każdorazowo kończą się innym, rozróżnialnym wynikiem (błędem lub powodzeniem). Różnice te są observable również poprzez pomiar czasu odpowiedzi. Atakujący dostarczający spreparowane dane EnvelopedData do aplikacji, która automatycznie je deszyfruje i zwraca wynik, uzyskuje adaptacyjną wyrocznię pozwalającą odtworzyć klucz szyfrowania treści. Podatność osiągalna jest na bibliotekach, które nie implementują tzw. implicit rejection: OpenSSL 3.0, OpenSSL 3.1, LibreSSL oraz BoringSSL.
Atakujący może przeprowadzić atak Bleichenbachera i odtworzyć klucz szyfrowania treści (content-encryption key), co skutkuje ujawnieniem zaszyfrowanych danych. Atak nie narusza integralności ani dostępności systemu.
Należy zaktualizować bibliotekę Python cryptography do wersji 50.0.0, w której problem został naprawiony. Zgodnie z referencjami producenta dostępna jest poprawka w repozytorium GitHub projektu pyca/cryptography.
Biblioteka Python cryptography w wersjach od 44.0.0 do 49.x (bez wersji 50.0.0). Dotyczy środowisk korzystających z OpenSSL 3.0, OpenSSL 3.1, LibreSSL lub BoringSSL jako biblioteki kryptograficznej. Szczególnie narażone są aplikacje automatycznie deszyfrujące niezaufane dane EnvelopedData (np. bramy S/MIME, filtry pocztowe).
Eksploatacja wymaga specyficznych warunków: usługa musi automatycznie deszyfrować niezaufane dane EnvelopedData dopasowane do certyfikatu ofiary i odpowiadać adaptacyjnie przy dużym wolumenie zapytań (np. brama S/MIME lub filtr pocztowy). Podatność na atak timing side-channel jest ograniczona wyłącznie do bibliotek kryptograficznych, które nie implementują implicit rejection (OpenSSL 3.0, 3.1, LibreSSL, BoringSSL). CVE opublikowane 2026-08-03.
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X