Dompdf — конвертер HTML в PDF для PHP. Версии 3.15 и более ранние принимают изображение BMP и создают PDF-совместимый PNG на основе только заявленных размеров заголовка и никогда не ограничивают ширину × высоту до преобразования изображения через GD. 58-байтовый BMP, заголовок которого объявляет, например. Размер 6000×6000 принимается, а позже используется imagecreatetruecolor($width, $height) (и собственный декодер BMP PHP) для выделения всего пиксельного холста.
Полезная нагрузка может поместиться в один HTTP-запрос: BMP может быть встроен как data:image/bmp;base64,… URI внутри контролируемого злоумышленником HTML, поэтому не требуется ни загрузка, ни удаленное извлечение, ни файл, доступный через chroot. Я измерил 169-байтовый запрос, приводящий к рендерингу dompdf до ~412 МБ пикового RSS и ~4,8 с времени процессора/стены по сравнению с ~34 МБ для безобидного запроса идентичного размера — примерно 12-кратное увеличение памяти на запрос, повторяемый и неаутентифицированный. Эта проблема исправлена в версии 3.16.
Показать оригинальное описание (EN)
Dompdf is an HTML to PDF converter for PHP. Versions 3.15 and prior accept a BMP image and generates a PDF-compatible PNG based only on its declared header dimensions and never bounds width × height before the image is converted through GD. A 58-byte BMP whose header declares e.g. 6000×6000 is accepted and later drives imagecreatetruecolor($width, $height) (and PHP's native BMP decoder) to allocate the full pixel canvas. A payload can fit in a single HTTP request: the BMP can be inlined as a data:image/bmp;base64,… URI inside attacker-controlled HTML, so no upload, no remote fetch, and no chroot-reachable file is required. I measured a 169-byte request driving a dompdf render to ~412 MB peak RSS and ~4.8 s of CPU/wall time, versus ~34 MB for an identically-sized benign request — roughly a 12× memory amplification per request, repeatable and unauthenticated. This issue has been fixed in version 3.16.
Характеристики атаки
Последствия
Строка CVSS v4.0