Критическая уязвимость АСПРО

Новая уязвимость в PHP АСПРО: как избежать угрозы атак через unserialize?
Разработчики и владельцы веб-сайтов на PHP столкнулись с серьезной угрозой: функция unserialize
, активно используемая в коде многих проектов, оказалась уязвимой для атак. Если данные для этой функции поступают из ненадежных источников, злоумышленники могут получить контроль над системой, запустить вредоносный код или украсть конфиденциальные данные.
В чем суть проблемы?
Функция unserialize
предназначена для преобразования сериализованных данных обратно в объекты PHP. Однако, если злоумышленник получает возможность передавать в нее собственные данные, он может создать вредоносный объект и выполнить на сервере произвольный код. Это особенно опасно в системах, где используются устаревшие библиотеки или некорректно настроенная защита.
Как защитить свой сайт?
Мы и другие Эксперты настоятельно рекомендуют следующее:
Не используйте unserialize
с пользовательскими данными – вместо этого применяйте json_decode
, который не подвержен подобным уязвимостям.
Фильтруйте входные данные – проверяйте и ограничивайте их формат перед обработкой.
Обновите все библиотеки и фреймворки – разработчики уже выпустили исправления для уязвимых версий.
Используйте защищенные методы сериализации – в некоторых случаях стоит полностью отказаться от unserialize
в пользу более безопасных решений.
Почему это важно?
Атаки через unserialize
уже фиксировались в популярных веб-приложениях и системах управления контентом (CMS). Если ваш сайт использует PHP и активно работает с сериализованными данными, настоятельно рекомендуется провести аудит безопасности.
Угроза реальна, но избежать ее просто – достаточно соблюдать рекомендации по защите. Следите за обновлениями и не оставляйте свой проект уязвимым для атак!
### **Как исправить уязвимость в PHP?**
Чтобы устранить проблему, необходимо внести изменения в код, где используется функция `unserialize`.
#### **Что делать?**
Во всех местах, где применяется `unserialize`, нужно добавить второй аргумент `['allowed_classes' => false]`, который запрещает загрузку потенциально опасных объектов.
**Было:**
```php
unserialize($_REQUEST["PARAMS"])
```
**Стало:**
```php
unserialize($_REQUEST["PARAMS"], ['allowed_classes' => false])
```
**Какие файлы проверить?**
Важно проверить и внести исправления в следующих директориях:
`/ajax/`
`/include/`
`/form/`
`/bitrix/components/aspro/`
Для поиска уязвимых мест рекомендуем запустить поиск по этим папкам по слову `unserialize` и внести необходимые изменения.
**Что делать, если используется `Solution::unserialize()` или `CMax::unserialize()`?**
Если в вашем коде вместо `unserialize` используются методы `Solution::unserialize()` или `CMax::unserialize()`, то исправлять ничего не нужно – они уже включают защиту от этой уязвимости. Это значит, что у вас установлено обновление, устраняющее проблему.
**Совет:** Даже если ваш сайт работает без сбоев, рекомендуем провести аудит безопасности, чтобы убедиться, что все потенциальные уязвимости закрыты!