
Эксплойт доказательства концепции для CVE-2022-31630, уязвимость чтения за границами буфера в функции imageloadfont() расширения GD в PHP, затрагивающая PHP 7.4.x до 7.4.33.
#CVE-2022-31630 - Эксплойт Proof of Concept для PHP 7.4.33
Предупреждение: Этот код создан исключительно в образовательных целях и для тестирования в изолированной лабораторной среде. Использование на других системах без разрешения незаконно и безответственно.
📋 Описание
CVE-2022-31630 — это уязвимость чтения за пределами границ (Out-of-Bounds Read) в расширении GD PHP, а именно в функции imageloadfont(). Эта уязвимость позволяет атакующему, контролирующему файл шрифта, загружаемый PHP-приложением, читать данные за пределами выделенного буфера, что может привести к:
· Отказ в обслуживании (сбой) · Раскрытие информации (утечка содержимого чувствительной памяти)
Эта уязвимость затрагивает следующие версии PHP:
· 7.4.x до 7.4.33 · 8.0.x до 8.0.25 · 8.1.x до 8.1.12
PHP 7.4.33 — первая версия, получившая патч для этого CVE. Поэтому код эксплойта в этом репозитории покажет разницу в поведении между уязвимой версией (≤ 7.4.32) и исправленной версией (≥ 7.4.33).
🔬 Технические детали
Уязвимость заключается в отсутствии проверки входных данных при чтении заголовка файла шрифта GD (.gdf). Файл шрифта имеет заголовок со следующей структурой:
· 2 байта: магическое число (0x01BE) · 2 байта: количество символов (nchars) · 2 байта: ширина каждого символа в пикселях (width) · 2 байта: высота каждого символа (height) · 2 байта: количество байтов на символ (char_offset)
Если значение width сделать очень большим (например, 65535), PHP выделит слишком маленький буфер для хранения данных растрового шрифта. Когда функция imagechar() затем считывает символ из этого шрифта, она обращается к памяти за пределами буфера, что приводит к чтению за границами (OOB read).
🚀 Использование
📚 Ссылки
· CVE-2022-31630 на NVD · Коммит исправления в php-src · Анонсы релизов PHP
Создано для образовательных целей к