Если Вы получили от меня письмо со ссылкой на эту страницу, значит Ваш сайт, судя по всему, использует уязвимую версию плагина Realtyna Organic IDX plugin + WPL Real Estate (плагин WordPress real-estate-listing-realtyna-wpl от компании Realtyna). Возможно, Вы знаете его как WPL или как плагин Organic IDX. На этой странице объясняется, почему это важно и как это исправить.

Уведомление касается CVE-2026-13714загрузки произвольного файла без аутентификации, приводящей к удалённому выполнению кода. Простыми словами: человек, не выполнивший вход, которому не нужны ни учётная запись, ни какая-либо особая настройка на Вашем сайте, может записать файл сценария в каталог загрузок сайта и затем запустить его. Это полный контроль над серверной частью кода. Затронуты выпуски с 4.0.0 по 5.2.0, исправление вышло в версии 5.3.0 от 30 июня 2026 года. Выпуски старше 4.0.0 этой уязвимости не содержат. Если у Вас установлена затронутая версия, обновите плагин до 5.3.0 или новее как можно скорее, а затем прочитайте раздел Если Вы использовали затронутую версию.

Это уязвимость плагина, а не ядра WordPress. Полностью обновлённый WordPress не защитит Вас, если сам плагин остаётся затронутой версии.

Настоящее ли это сообщение?

Да. Это добросовестное уведомление в рамках ответственного раскрытия от независимого исследователя безопасности. Я не прошу денег, паролей или доступа к Вашему сайту и не пытался взломать его, что-либо загрузить или чем-либо воспользоваться.

Я лишь посмотрел общедоступные файлы, которые Ваш сайт отдаёт любому посетителю (столь же публичные, как и главная страница), и записал номер версии, который плагин публикует в своём общедоступном файле readme.txt. В частности, я ничего не отправлял в затронутый интерфейс загрузки. Ничего не было загружено, протестировано или использовано, и эта проверка не затрагивает ни Ваши данные, ни панель администратора, ни какую-либо закрытую часть сайта.

Если Вы хотите убедиться, кто я такой, посмотрите контакты внизу страницы и страницу Обо мне.

Почему это важно

В плагине есть интерфейс ввода-вывода «мобильного приложения» – набор команд, которые внешний клиент может вызывать через интернет. Одна из этих команд сохраняет загруженный файл под тем именем, которое выбрал отправитель, без какой-либо проверки типа файла. Поэтому файл с расширением сценария попадает в каталог загрузок сайта именно как сценарий, откуда его можно запросить по сети, и сервер его выполнит.

Две вещи не дают этому остаться теоретической проблемой:

  • Интерфейс включён в установке по умолчанию. Чтобы конечная точка отвечала, не нужно ничего включать в настройках и не нужно пользоваться какой-либо функцией.
  • Пара ключей, которая должна аутентифицировать вызовы, задана одним и тем же фиксированным значением в каждой установке плагина, а интерфейс администратора помечает её как доступную только для чтения, так что оператор не смог бы её изменить, даже если бы захотел. Секрет, одинаковый везде и открытый в исходном коде, секретом не является, а значит, заслон никакого заслона не образует.

В сумме это означает, что неаутентифицированный посетитель может разместить исполняемый код на сервере. А как только код выполняется на Вашем сервере, он может делать всё, что может Ваш сайт: читать базу данных, создавать учётные записи администраторов, изменять или подменять страницы, отправлять почту с Вашего домена или установить постоянный чёрный ход.

Я сознательно не публикую ни формат запроса, ни имена параметров, ни рабочий пример, и прошу Вас поступать так же. Описание выше передаёт суть проблемы, а именно это и нужно, чтобы решить, насколько срочно действовать.

Присвоившая идентификатор организация не опубликовала оценку CVSS для этой проблемы, поэтому на этой странице она не приводится. Проблема не включена в каталог известных эксплуатируемых уязвимостей (KEV) агентства CISA, и у меня нет свидетельств ни того, что она используется на практике, ни того, что через неё атаковали какой-то конкретный сайт. Чётко можно сказать лишь то, что уязвимость позволяет: без аутентификации, без необходимой настройки, с выполнением кода в итоге.

Стоит знать ещё одно, потому что из-за этого обновление выглядит необязательным, хотя таковым не является: в списке изменений производителя для 5.3.0 нет упоминания безопасности. Там написано «Removed deprecated mobile_application». Именно эта запись и есть исправление: уязвимая подсистема была удалена целиком. Тот, кто просматривает примечания к выпуску в поисках уведомления о безопасности, его не найдёт.

Хорошая новость: обновление до исправленной версии закрывает брешь, и оно несложное.

Затронут ли мой сайт?

Вам не нужно верить мне на слово насчёт того, какая версия у Вас установлена.

В панели администратора WordPress (это основная, решающая проверка):

  1. Войдите в консоль WordPress (обычно по адресу yourdomain.com/wp-admin).
  2. Перейдите в Плагины, затем Установленные плагины.
  3. Найдите Realtyna Organic IDX plugin + WPL Real Estate и посмотрите версию под названием.

По общедоступному манифесту (без входа): откройте в браузере yourdomain.com/wp-content/plugins/real-estate-listing-realtyna-wpl/readme.txt. Строка Stable tag: ближе к началу содержит версию, о которой сообщает Ваша установка. Этот файл поставляется внутри папки плагина, поэтому отражает то, что действительно установлено, и это тот же самый общедоступный файл, который прочитал я.

Затем примените правило:

  • С 4.0.0 по 5.2.0: затронуто, обновляйтесь сейчас.
  • 5.3.0 или новее: уже исправлено, по этой проблеме делать нечего.
  • Старше 4.0.0: эта проблема Вас не касается. Кода с непроверяемой загрузкой в тех выпусках попросту нет. В публичных описаниях диапазон указан как «все версии до 5.3.0»; это неверно, и если у Вас выпуск 3.x, нет причин считать это чрезвычайной ситуацией. Это всё же очень старый выпуск, поэтому обновление остаётся разумным по другим причинам.

Не определяйте версию по адресу статического файла. Если Вы посмотрите исходный код страницы и увидите нечто вроде realtyna.min.js?ver=5.2.21, это число не является версией плагина. При регистрации своих стилей и сценариев этот плагин не передаёт WordPress собственную версию, поэтому WordPress подставляет вместо неё версию ядра WordPress Вашего сайта. Мы видели работающие сайты с плагином 4.3.2, отдающие ?ver= со значением 4.9.9, и сайты со значением 5.2.21 – это номер выпуска ядра WordPress, который выглядит в точности как версия плагина чуть ниже границы 5.3.0. Прочитав его как версию плагина, можно получить прямо противоположное истине. Пользуйтесь панелью администратора или readme.txt.

Как это исправить

Самый безопасный путь – обновляться через сам WordPress, предварительно сделав резервную копию:

  1. Сделайте резервную копию сайта (файлов и базы данных), прежде чем что-либо менять. Большинство хостинг-провайдеров предлагают резервное копирование в один клик, либо воспользуйтесь плагином резервного копирования.
  2. В панели администратора WordPress перейдите в Консоль, затем Обновления, либо в Плагины, затем Установленные плагины. Если обновление плагина отображается, установите его отсюда.
  3. Если Вы предпочитаете командную строку, WP-CLI делает то же самое: wp plugin update real-estate-listing-realtyna-wpl.
  4. Если обновление не появляется, последний выпуск можно взять прямо со страницы плагина в каталоге WordPress.org, Realtyna Organic IDX plugin + WPL Real Estate, и обновиться через Плагины, затем Добавить новый плагин, затем Загрузить плагин.
  5. После обновления проверьте новый номер версии (5.3.0 или новее) описанными выше способами и убедитесь, что сайт загружается нормально.

Если обновиться прямо сейчас действительно невозможно, промежуточная мера – отключить интерфейс ввода-вывода плагина в его собственных настройках, что закрывает путь к команде загрузки. Считайте это временным решением, выигрывающим время, а не заменой обновлению: уязвимый код удаляет только версия 5.3.0.

Раз уж Вы там, стоит убедиться, что ядро WordPress и остальные плагины обновлены, ведь к ним применим тот же принцип.

Если Вы использовали затронутую версию

Поскольку эта проблема позволяет загрузить файл и затем его выполнить, обновление закрывает брешь, но не отменяет того, что уже могло быть сделано через неё. Если Ваш сайт работал на затронутой версии, будучи доступным из интернета, стоит проверить. Вам (или Вашему веб-мастеру) следует посмотреть на своём сайте:

  • Файлы сценариев в каталоге загрузок, которым там не место. Проверьте в wp-content/uploads/ файлы с расширением .php (или другими исполняемыми расширениями) среди изображений и документов по объектам недвижимости. Законные вложения объявления о недвижимости – это изображения, PDF и подобное; файл .php среди них ненормален.
  • Файлы со свежими или странными датами. Отсортируйте по дате изменения и обратите внимание на всё, чему Вы не можете найти объяснения, в том числе в собственных папках загрузки плагина.
  • Учётные записи администраторов. В разделе Пользователи, затем Все пользователи отфильтруйте по роли Администратор и удалите любую учётную запись, которую Вы не узнаёте. Создание нового администратора – обычный способ сохранить доступ.
  • Недавно установленные или изменённые плагины и темы. Ищите всё, что Вы не устанавливали сами, и плагины с общими или незнакомыми названиями: подложенный плагин или тема – обычный способ оставить чёрный ход.
  • Другие признаки. Неожиданные новые материалы или страницы, изменения адреса администратора или настроек URL сайта, незнакомые запланированные задания либо жалобы на исходящий спам заслуживают проверки.

Если Вы обнаружите следы несанкционированного доступа, считайте сайт скомпрометированным: удалите файлы, смените учётные данные (админка WordPress, база данных и панель хостинга) и рассмотрите восстановление из заведомо чистой резервной копии, сделанной до проникновения. Если в Вашей организации есть служба информационной безопасности, привлеките её.

Хочу сказать прямо: я не проверял Ваш сайт ни по одному из этих признаков и не знаю, был ли он затронут. Этот список здесь для того, чтобы Вы могли проверить сами. Сайт в затронутом диапазоне версий может быть уже защищён иными средствами (межсетевым экраном уровня приложений, исправлением, перенесённым хостингом, или отключённым интерфейсом ввода-вывода); это уведомление – наблюдение, основанное на номере версии, а не утверждение, что Ваш сайт был уязвим в момент проверки.

Что я делал и чего не делал

  • Я прочитал общедоступный файл readme.txt плагина и Вашу главную страницу – то, что Ваш сайт отдаёт каждому посетителю.
  • Я не заходил в панель администратора WordPress, не обращался к базе данных и ни к какой закрытой части сайта.
  • Я ничего не отправлял в затронутый интерфейс загрузки. Ничего не было загружено, ничего не тестировалось и не эксплуатировалось. Когда сама уязвимость и есть открытая точка приёма файлов, именно отказ прикасаться к ней и составляет всю разницу между раскрытием и вторжением.
  • Таким образом, вывод основан на номере версии, и Вы можете самостоятельно повторить его по тому же общедоступному файлу.

У меня нет веб-мастера / я застрял

Если сайт поддерживаете не Вы, перешлите, пожалуйста, эту страницу тому, кто им занимается (Вашему веб-разработчику, агентству или хостинг-провайдеру). Они быстро узнают описанные шаги.

Если Вы ведёте сайт сами и застряли, я с радостью бесплатно подскажу правильное направление. Напишите, воспользовавшись контактами ниже.

Контакты

Evan Harris, исследователь безопасности

Я пишу о таких вещах исключительно для того, чтобы помочь операторам защитить свои сайты. Если Вы предпочитаете больше не получать подобных сообщений, просто сообщите мне, и я это учту.

Источники

Официальные бюллетени и учёт

Производитель / плагин