FreeRDP до версии 3.28.0 (затронуто <=3.27.1) содержит переполнение буфера в куче в crypto_rsa_common() (libfreerdp/crypto/crypto.c). Функция записывает результат модульного возведения в степень в выходной буфер вызывающего объекта через BN_bn2bin() и только после этого проверяет выходную_длину > out_length, поэтому байты, выходящие за пределы, записываются перед проверкой границ. На стороне сервера, когда клиент выбирает стандартную безопасность RDP, зашифрованный случайный клиент расшифровывается в фиксированный 32-байтовый буфер.
Поскольку сервер публикует свой открытый ключ RSA, неаутентифицированный злоумышленник может подделать зашифрованный текст, чье расшифрованное значение достигает полной длины модуля (например, 256 байт для RSA-2048), переполняя 32-байтовый буфер кучи с помощью предварительной аутентификации, контролируемой злоумышленником, до ~ 224 байтов, что приводит к отказу в обслуживании.
Показать оригинальное описание (EN)
FreeRDP before 3.28.0 (affected <=3.27.1) contains a heap-based buffer overflow in crypto_rsa_common() (libfreerdp/crypto/crypto.c). The function writes the modular-exponentiation result into the caller's output buffer via BN_bn2bin() and only afterward checks output_length > out_length, so out-of-bounds bytes are written before the bounds check. On the server side, when a client selects RDP Standard Security, the encrypted client random is decrypted into a fixed 32-byte buffer. Because the server publishes its RSA public key, an unauthenticated attacker can forge a ciphertext whose decrypted value is up to the full modulus length (e.g. 256 bytes for RSA-2048), overflowing the 32-byte heap buffer by up to ~224 attacker-controlled bytes pre-authentication, resulting in denial of service.
Характеристики атаки
Последствия
Строка CVSS v4.0
Тип уязвимости (CWE)
Уязвимые продукты 1
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Freerdp Freerdp
cpe:2.3:a:freerdp:freerdp:*:*:*:*:*:*:*:*
|
— |
3.28.0
|