Недавно PHP Foundation совместно с агентством OSTIF провела масштабный аудит безопасности ядра PHP, с привлечением профессионалов из Quarkslab. В рамках этой инициативы проверили самые важные компоненты PHP, и сейчас я подробно расскажу, какие слабые места нашли, что с ними сделали и какие выводы стоит сделать каждому разработчику.
Что было на кону?
PHP — один из самых популярных языков программирования в веб-разработке. Ошибки в его ядре могут привести к утечкам данных, нарушению работы приложений и потере доверия пользователей.
Аудит, проходивший в течение двух месяцев 2024 года, охватывал:
- Разработку модели угроз
- Ручной анализ кода
- Динамическое тестирование
- Оценку криптографических функций
Проверка была сосредоточена на PHP-FPM, драйверах баз данных (PDO, MySQL Native Driver), обработке JSON и криптографии.
Основные находки
Было обнаружено 27 проблем, из них 17 — с потенциальными последствиями для безопасности:
- 3 уязвимости высокой степени опасности
- 5 средней степени
- 9 низкой степени
- 10 информационных замечаний
Четыре критических уязвимости получили идентификаторы CVE:
- CVE-2024-9026: Возможность манипуляции логами PHP-FPM.
- CVE-2024-8925: Ошибка обработки multipart-данных.
- CVE-2024-8928: Проблема с памятью в обработке фильтров PHP.
- CVE-2024-8929: Уязвимость, позволяющая вредоносному MySQL-серверу раскрывать содержимое памяти.
PHP-FPM — особое внимание
PHP-FPM — критически важный компонент, использующийся на миллионах серверов для запуска PHP-скриптов.
Среди выявленных проблем в PHP-FPM:
- Переполнение целых чисел при указании UID/GID.
- Возможность модификации логов рабочих процессов PHP-FPM.
Рекомендации экспертов:
- Проверять корректность и диапазоны UID/GID перед запуском worker-процессов.
- Корректно обрабатывать символы завершения строк и нулевые символы в логах.
MySQL и работа с базами данных
Значительные уязвимости были найдены в драйвере MySQL:
- Потенциальная утечка данных из памяти.
- Возможность переполнения памяти и отказа в обслуживании.
Работа с формами и JSON
Были выявлены ошибки при разборе multipart-данных, которые могут привести к некорректной обработке запросов и даже отказу в обслуживании.
Криптографические проблемы
Выявлены проблемы с интеграцией OpenSSL и Libsodium:
- Недостаточная проверка параметров ключей и векторов инициализации (IV).
- Возможные проблемы с обработкой ошибок и документированием.
Что сделали с найденными уязвимостями?
Команда PHP Foundation оперативно устранила выявленные проблемы. Настоятельно рекомендуется обновить свои PHP-окружения до актуальных версий, чтобы избежать потенциальных угроз.
Благодарности
Особая признательность командам, участвовавшим в аудите:
- PHP Foundation Team (Jakub Zelenka, Arnaud Le Blanc, Niels Dossche и другие).
- Эксперты Quarkslab (Angèle Bossuat, Julio Loayza Meneses, Sebastien Rolland и другие).
- OSTIF и Sovereign Tech Agency за организацию и финансирование.
Полный отчет доступен по ссылке.
Выводы для разработчиков
Этот аудит показывает важность регулярных проверок безопасности даже таких надежных решений, как PHP. Обновления безопасности нужно ставить вовремя и следить за новостями в области защиты данных.
Обязательно проверьте, что ваша версия PHP актуальна. Безопасность — это всегда дешевле, чем последствия взломов.