Пакет PyPI `ecdsa` представляет собой реализацию ECC (криптографии на основе эллиптической кривой) на чистом Python с поддержкой ECDSA (алгоритм цифровой подписи на основе эллиптической кривой), EdDSA (алгоритм цифровой подписи на основе кривой Эдвардса) и ECDH (алгоритм цифровой подписи на основе эллиптической кривой Диффи-Хеллмана). До версии 0.19.2 проблема в функциях анализа DER низкого уровня могла привести к возникновению неожиданных исключений из общедоступных функций API. `ecdsa.der.remove_octet_string()` принимает усеченный DER, если закодированная длина превышает доступный буфер. Например, OCTET STRING, длина которого заявлена в 4096 байт, но предоставляет только 3 байта, анализируется успешно, а не отклоняется.
Из-за этого созданный ввод DER может привести к тому, что SigningKey.from_der() вызовет внутреннее исключение («IndexError: индекс выходит за пределы измерения 1») вместо того, чтобы полностью отклонить некорректный DER (например, вызвать UnexpectedDER или ValueError). Приложения, анализирующие ненадежные закрытые ключи DER, могут аварийно завершить работу, если они не обработают непредвиденные исключения, что приведет к отказу в обслуживании. Версия 0.19.2 исправляет проблему.
Показать оригинальное описание (EN)
The `ecdsa` PyPI package is a pure Python implementation of ECC (Elliptic Curve Cryptography) with support for ECDSA (Elliptic Curve Digital Signature Algorithm), EdDSA (Edwards-curve Digital Signature Algorithm) and ECDH (Elliptic Curve Diffie-Hellman). Prior to version 0.19.2, an issue in the low-level DER parsing functions can cause unexpected exceptions to be raised from the public API functions. `ecdsa.der.remove_octet_string()` accepts truncated DER where the encoded length exceeds the available buffer. For example, an OCTET STRING that declares a length of 4096 bytes but provides only 3 bytes is parsed successfully instead of being rejected. Because of that, a crafted DER input can cause `SigningKey.from_der()` to raise an internal exception (`IndexError: index out of bounds on dimension 1`) rather than cleanly rejecting malformed DER (e.g., raising `UnexpectedDER` or `ValueError`). Applications that parse untrusted DER private keys may crash if they do not handle unexpected exceptions, resulting in a denial of service. Version 0.19.2 patches the issue.
Характеристики атаки
Последствия
Строка CVSS v3.1