FreeRDP — это бесплатная реализация протокола удаленного рабочего стола. До версии 3.24.2 в resize_vbar_entry() в libfreerdp/codec/clear.c vBarEntry->size обновляется до vBarEntry->count перед вызовом winpr_aligned_recalloc(). Если realloc завершается неудачей, размер увеличивается, а пиксели по-прежнему указывают на старый, меньший буфер.
При последующем вызове, где count <= size (завышенное значение), realloc пропускается. Затем вызывающая сторона записывает count * bpp байт пиксельных данных, контролируемых злоумышленником, в буфер уменьшенного размера, вызывая переполнение буфера кучи. Эта проблема исправлена в версии 3.24.2.
Показать оригинальное описание (EN)
FreeRDP is a free implementation of the Remote Desktop Protocol. Prior to version 3.24.2, in resize_vbar_entry() in libfreerdp/codec/clear.c, vBarEntry->size is updated to vBarEntry->count before the winpr_aligned_recalloc() call. If realloc fails, size is inflated while pixels still points to the old, smaller buffer. On a subsequent call where count <= size (the inflated value), realloc is skipped. The caller then writes count * bpp bytes of attacker-controlled pixel data into the undersized buffer, causing a heap buffer overflow. This issue has been patched in version 3.24.2.
Характеристики атаки
Последствия
Строка CVSS v3.1
Тип уязвимости (CWE)
Уязвимые продукты 1
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Freerdp Freerdp
cpe:2.3:a:freerdp:freerdp:*:*:*:*:*:*:*:*
|
— |
3.24.2
|