CVE-2026-74887
NiskieCVSS 3.7Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 8 - wyżej niż 8% wszystkich znanych CVE
Streszczenie
openssl_encrypt przed wersją 1.4.0 importuje niekryptograficzny moduł 'random' Pythona (Mersenne Twister PRNG) w pliku openssl_encrypt/modules/pqc.py. Brak bezpośrednich wywołań random.* w kodzie, więc obecnie żadna operacja kryptograficzna nie jest zagrożona, ale import stwarza ryzyko, że przyszły kod może przypadkowo użyć random.randint() zamiast bezpiecznego kryptograficznie alternatywy (secrets/os.urandom), produkując przewidywalne wartości. Poprawka usuwa import w wersji 1.4.0.
Ocena ryzyka
Chociaż obecnie nie ma bezpośredniego zagrożenia, ryzyko przyszłego nieprawidłowego użycia może prowadzić do osłabienia bezpieczeństwa kryptograficznego, co może umożliwić atakującemu przewidywanie wygenerowanych wartości.
Rekomendacja
Zaktualizuj openssl_encrypt do wersji 1.4.0 lub nowszej, aby usunąć niebezpieczny import. Upewnij się, że przyszły kod używa bezpiecznych generatorów losowych.
Inne podatności w openssl_encrypt
Zobacz wszystkie- CVE-2026-81718Wysokie
openssl_encrypt przed wersją 1.4.9 używa niedoparametryzowanego PBKDF2-HMAC-SHA256 z tylko 100 000 iteracji do ochrony kluczy prywatnych plików PQC i 10 000 iteracji do weryfikacji hasła plików z podwójnym szyfrowaniem. Atakujący, którzy zdobędą pliki kluczy lub zaszyfrowane pliki, mogą przeprowadzić atak brute-force na hasła offline przy użyciu akceleracji GPU lub ASIC.
- CVE-2026-81697Średnie
openssl_encrypt (pakiet pip openssl-encrypt) w wersjach <= 1.4.8 zawiera wadę rozwiązywania plików konfiguracyjnych względem bieżącego katalogu w crypt_settings.py, gdzie CONFIG_FILE (pierwotnie bezwzględna ścieżka per użytkownik ~/.crypt_settings.json) jest ponownie przypisywana w linii 84 do zwykłej względnej nazwy 'crypt_settings.json'. W rezultacie przestarzały interfejs Tk GUI SettingsTab odczytuje i zapisuje ustawienia KDF z crypt_settings.json w katalogu, z którego uruchomiono proces (bieżący katalog roboczy), zamiast w katalogu domowym użytkownika. Atakujący, który umieści złośliwy crypt_settings.json (np. sha256:1 z wyłączonymi wszystkimi pamięciożernymi KDF), może po cichu obniżyć szyfrowanie wykonywane w tej sesji GUI do około jednej rundy haszowania, omijając preflight słabych KDF i umożliwiając ataki brute-force offline na wynikowy szyfrogram. Poprawione w wersji 1.4.9.
- CVE-2026-81692Wysokie
openssl_encrypt w wersjach 1.4.8 i wcześniejszych nie waliduje pola total_samples w plikach FLAC przed użyciem go do alokacji pamięci. Spreparowany plik FLAC o rozmiarze ~50 bajtów deklarujący ~100 milionów próbek powoduje alokację wielu gigabajtów, prowadząc do odmowy usługi przez brak pamięci podczas 'decrypt --stego-extract'. Problem naprawiony w 1.4.9; dotyczy linii 1.4.x i 1.5.x.
- CVE-2026-81687Średnie
openssl_encrypt przed wersją 1.4.9 nie egzekwuje limitu czasu dla liczby iteracji funkcji wyprowadzania klucza (KDF) określonej w metadanych pliku. Atakujący mogą tworzyć pliki z bardzo wysoką liczbą iteracji KDF, co powoduje nieograniczone zużycie zasobów CPU przed weryfikacją hasła.
- CVE-2026-81682Średnie
openssl_encrypt przed wersją 1.4.9 zawiera podatność na niebezpieczne uprawnienia plików w graficznym interfejsie użytkownika, który zapisuje odszyfrowany tekst jawny z domyślnymi uprawnieniami odczytywalnymi dla wszystkich. Atakujący mogą odczytać odszyfrowane pliki wyjściowe utworzone przez GUI jako nieuprzywilejowani lokalni użytkownicy w systemach wieloużytkownikowych.
- CVE-2026-74893Wysokie
openssl_encrypt przed wersją 1.4.0 zawiera zakodowane na stałe domyślne sekrety podpisywania JWT w config.py, które przechodzą walidację. Atakujący mający dostęp do kodu źródłowego mogą sfałszować ważne tokeny JWT dla dowolnego client_id, aby uzyskać uwierzytelniony dostęp do kluczownika i interfejsów API telemetrii.
- CVE-2026-74890Średnie
openssl_encrypt przed wersją 1.4.0 zawiera podatność na obejście uwierzytelniania w CamelliaCipher, która wyłącza generowanie i weryfikację znaczników HMAC, gdy ustawiona jest zmienna środowiskowa PYTEST_CURRENT_TEST. Atakujący z możliwością wykonania kodu mogą ustawić tę zmienną, aby wygenerować nieuwierzytelniony szyfrogram i obejść ochronę integralności zaszyfrowanych danych.
- CVE-2026-74888Wysokie
openssl_encrypt przed wersją 1.4.0 używa niestandardowej konstrukcji wyprowadzania klucza PBKDF2 z iteracjami=1 na wywołanie w pętli zewnętrznej, tworząc KDF, którego właściwości bezpieczeństwa nie zostały formalnie przeanalizowane. Atakujący mogą wykorzystać to osłabione wyprowadzanie klucza do bardziej efektywnego łamania haseł chroniących starsze zaszyfrowane pliki w porównaniu ze standardowymi implementacjami PBKDF2.
- CVE-2026-74885Niskie
W bibliotece openssl_encrypt przed wersją 1.4.0 wykryto błąd logowania w funkcji restore_hidden_modules(), który loguje liczbę modułów po wyczyszczeniu, zawsze pokazując zero przywróconych modułów i uszkadzając dzienniki audytu. Dodatkowo istnieje wyścig między ukrywaniem modułów a instalacją hooka importu, co w środowiskach wielowątkowych może pozwolić innemu wątkowi na ponowny import zablokowanych modułów.
- CVE-2026-74884Wysokie
openssl_encrypt przed wersją 1.4.0 zawiera podatność na przechodzenie po ścieżkach w metodzie _is_safe_path, gdzie parametr plugin_id nie jest sanityzowany przed konstruowaniem ścieżki katalogu konfiguracji wtyczki. Atakujący może zadeklarować złośliwy plugin_id zawierający sekwencje przechodzenia po ścieżkach, takie jak '../', aby uzyskać dostęp do dowolnych katalogów poza zamierzonym katalogiem wtyczek.
Oryginalny opis (angielski, źródło NVD)
openssl_encrypt before 1.4.0 imports Python's non-cryptographic 'random' module (Mersenne Twister PRNG) at line 15 of openssl_encrypt/modules/pqc.py. No direct calls to random.* were present in the code, so no cryptographic operation is currently affected; however, the import creates a hazard that future code could inadvertently use random.randint() instead of a cryptographically secure alternative (secrets/os.urandom), producing predictable values since the Mersenne Twister state can be recovered from approximately 624 outputs. Fixed by removing the import in 1.4.0.

