Обслуживание WordPress Взломали сайт? Плагин безопасности Цены Блог
Главная / Блог / Безопасность сайта
4 ноября, 2026

Contact Form 7 6.2.4.1: закройте уязвимость и проверьте вложения

Форма для резюме может успешно отправить письмо, но приложить к нему документ Word, который никто не сможет открыть. Вот такой сюрприз принесло последнее обновление Contact Form 7. Есть и исправление безопасности: версия 6.2.4 закрывает уязвимость загрузки файлов без авторизации. Обновляться стоит сразу до 6.2.4.1.

Я Андрей, руковожу агентством по обслуживанию и защите WordPress. Совет здесь простой: установите исправление, а потом проверьте, что именно приходит на почту. Зеленого сообщения об успешной отправке мало.

Что произошло?

Contact Form 7 6.2.4 вышел 29 октября 2026 года. По сообщению разработчика на contactform7.com, в версиях с 6.2 по 6.2.3 злоумышленники могли объединить несколько ошибок: загрузить файлы, которые проверка должна отклонить, а затем сохранить их на сервере, хотя после отправки они должны удаляться. Входить на сайт для этого не требовалось.

Проблему нашли Shinya Murakami и Jakub Herman и сообщили о ней через WPScan. Разработчик не сообщал об атаках. Так что сама новость еще не означает, что ваш сайт взломали.

Версия 6.2.4.1 вышла в тот же день. В списке изменений указано только «FormDataTree-PHP: Upgraded to 2.0.10». А обсуждение #1908 в GitHub плагина связывает этот выпуск с ошибкой версии 6.2.4: необязательное поле загрузки не проходило проверку, если его оставляли пустым.

Промежуточный выпуск пропускаем. Ставим 6.2.4.1.

Вашего сайта это касается?

Уязвимость есть только в Contact Form 7 с 6.2 по 6.2.3. По описанию разработчика, теоретически под угрозой любая форма с загрузкой файлов, если сервер заодно разрешает публичный просмотр содержимого папок. Такой список помогает найти файл, оставшийся после отправки.

Например, резюме кандидатов, макеты для печати упаковки или таблицы в запросах оптовых цен. Оформление заказа WooCommerce без Contact Form 7 автоматически под эту проблему не попадает. Сам факт приема заказов тут ни при чем.

При этом разработчик рекомендует улучшения безопасности всем пользователям, даже за пределами уязвимых версий. Текущий выпуск требует WordPress 7.1 или новее и протестирован вплоть до 7.1.4. Если движок старый, сначала проверьте совместимость. Сделайте бэкап, а если обновление WordPress требует проверки - используйте тестовую копию сайта.

У ветки 6.2 вообще выдался непростой месяц. Мы уже разбирали критическую ошибку после обновления Contact Form 7 до 6.2.


Сюрприз с вложениями: расширения файлов могут измениться

Здесь лучше не ограничиваться привычным «обновил, готово». Contact Form 7 изменил обработку расширений в wpcf7_antiscript_file_name(). Раньше функция блокировала расширения из запрещенного списка. Теперь работает список разрешенных: все, что в него не входит, получает безопасное расширение, например .txt.

По умолчанию список включает форматы аудио, видео и изображений, а также pdf и txt. Но распространенных офисных форматов и архивов там нет:

  • Документы Word и OpenDocument: doc, docx, odt.
  • Таблицы и данные: xls, xlsx, ods, csv.
  • Архивы и презентации: zip, ppt.

Покупатель загружает таблицу с артикулами и количеством товара. Форма запроса цены принимает ее, отправляет письмо и показывает обычное «Спасибо». А менеджеру приходит вложение с другим расширением. Двойной щелчок - и вместо ожидаемой таблицы совсем не тот результат.

Со стороны клиента все исправно. В этом и подвох.

Если эти форматы вам действительно нужны, новый фильтр wpcf7_file_extension_safelist поможет добавить их в список. Разместите код в functions.php дочерней темы или в небольшом плагине для сниппетов. Только сначала уберите из примера лишние форматы:

add_filter( 'wpcf7_file_extension_safelist', function ( $safelist ) {
    return array_merge(
        $safelist,
        [ 'doc', 'docx', 'xls', 'xlsx', 'odt', 'csv', 'zip' ]
    );
} );

Не вставляйте весь список ради удобства. Форме для резюме, которая принимает PDF и документы Word, ZIP-архивы ни к чему. И ограничьте параметр filetypes: в каждом теге [file]: этот фильтр не заменяет настройки разрешенных файлов самой формы.

Я бы оставлял PDF везде, где он подходит. Для расчета оптового заказа нужна редактируемая таблица? Ладно, добавьте ее формат. Но потом сами откройте полученное вложение. Обычно такая проверка занимает несколько минут, а не полдня.

Для разработчиков: wpcf7_unship_uploaded_file() теперь требует второй аргумент $options и принимает новый третий аргумент $uploaded_files. Проверьте собственный код, который вызывает эту функцию.

Проверьте, не показывает ли папка загрузок список файлов

Откройте адрес /wp-content/uploads/ на своем сайте в приватном окне браузера. Видите страницу «Index of» со списком файлов или папок? Значит, просмотр содержимого здесь включен. Ответ о запрете доступа или отсутствие списка - хороший знак для этой папки. Но не доказательство того, что все вложенные папки настроены так же.

На Apache директива Options -Indexes в подходящем файле конфигурации .htaccess отключает просмотр, если хостинг разрешает такую настройку. На Nginx за это отвечает autoindex off; - это значение по умолчанию. Не работаете с конфигурацией сервера? Попросите поддержку хостинга проверить ее. На сам запрос хватит пяти минут.

Еще загляните в wp-content/uploads/wpcf7_uploads через файловый менеджер хостинга или SFTP. Contact Form 7 использует эту папку для временных загрузок и удаляет файлы после отправки. Неожиданные файлы, особенно .php или .phtml, - повод разобраться с возможным взломом. Не просто удалить и забыть.

Нашли что-то подозрительное? Сохраните сведения о находке и обратитесь за очисткой взломанного сайта. Обновление плагина не уберет уже существующее заражение.


Что сделать сегодня

  1. Сделайте бэкап, проверьте совместимость, обновитесь и убедитесь что на экране Plugins > Installed Plugins указана версия 6.2.4.1.
  2. Проверьте каждую форму загрузки с разрешенным файлом. Если поле необязательное, отправьте форму еще раз без файла.
  3. Откройте все полученные вложения. Проверьте расширения, а не только наличие письма.
  4. Отключите просмотр содержимого папок и проверьте временную папку загрузок на посторонние файлы.

Если за эти проверки никто не отвечает, включите их в регулярное обслуживание сайта на WordPress. Проверка загрузки файлов должна стоять рядом с проверкой оформления заказа. Не в списке «когда-нибудь доберемся».

Заканчивайте проверкой почты, а не экраном обновлений

Наша статья про критическую уязвимость загрузки файлов в Forminator касается другого плагина. Не путайте эти две проблемы.

А здесь выберите сегодня самую востребованную форму для резюме или запроса цены. Отправьте настоящий тестовый документ, при второй отправке оставьте необязательное поле загрузки пустым и откройте все, что придет на почту. Вот эту проверку экран обновлений за вас не сделает.