Уязвимости обратного вызова (callback vulnerabilities) — это класс веб-уязвимостей, при которых злоумышленник может заставить приложение выполнить произвольную функцию, передав её имя через пользовательский ввод. В контексте WordPress это особенно опасно, так как многие самописные плагины используют call_user_func, call_user_func_array или хуки для гибкости, но забывают проверять, какие функции вызываются. Это позволяет атакующему выполнить системные команды, удалить файлы или получить доступ к базе данных.
Атакующие сканируют сайты на WordPress, ищут плагины с известными уязвимостями или проверяют параметры запросов. Например, если плагин принимает параметр action и передаёт его в do_action() без фильтрации, злоумышленник может подставить wp_delete_post или exec. Также часто используются файлы-инклуды и десериализация в сочетании с обратными вызовами.
Рассмотрим гипотетический плагин с кодом:
add_action('wp_ajax_custom_action', 'handle_custom_action');
function handle_custom_action() {
$callback = $_POST['callback'];
$data = $_POST['data'];
call_user_func($callback, $data);
}Злоумышленник отправляет POST-запрос с параметрами: callback=system&data=rm -rf /. В результате выполняется системная команда, удаляющая файлы на сервере. Даже если используется call_user_func_array, риск остаётся. Важно: никогда не передавайте пользовательский ввод напрямую в функции обратного вызова.
Вот несколько обязательных мер:
sanitize_text_field, intval.| Шаг | Описание | Статус |
|---|---|---|
| 1 | Проверить все вызовы call_user_func и call_user_func_array | ☐ |
| 2 | Убедиться, что параметры хуков не приходят от пользователя | ☐ |
| 3 | Добавить nonce для всех AJAX-действий | ☐ |
| 4 | Использовать белые списки для callback-функций | ☐ |
| 5 | Валидировать и экранировать все входные данные | ☐ |
| 6 | Провести аудит кода с помощью статического анализатора | ☐ |
Уязвимости обратного вызова в WordPress — серьёзная угроза, особенно в самописных плагинах, где разработчики часто жертвуют безопасностью ради гибкости. Злоумышленники активно используют такие ошибки для удалённого выполнения кода. Чтобы защитить свой сайт, необходимо внедрить строгую валидацию входных данных, использовать белые списки функций и регулярно проводить аудит кода. Помните: безопасность начинается с каждого вызова функции.







