Если вы получили от меня письмо со ссылкой на эту страницу, значит ваш сайт, по всей видимости, использует версию Bookly (плагин WordPress для записи на приём bookly-responsive-appointment-booking-tool), попадающую в диапазон, затронутый известной проблемой безопасности. На этой странице описано, в чём суть, как проверить свою версию, как обновиться и какой один шаг стоит сделать после обновления.

Речь идёт о CVE-2026-13395 – SQL-инъекции без аутентификации в публичном сценарии записи. Затронуты версии с 11.3 по 27.7; исправление вышло в 27.8 от 10 июля 2026 года. Если у вас затронутая версия, обновите Bookly до 27.8 или новее (27.9 – текущий выпуск, он также содержит исправление). Нет никаких признаков эксплуатации этой проблемы ни против вашего сайта, ни где-либо ещё: эта страница – предупреждение из предосторожности, а не отчёт об инциденте.

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

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

Это письмо настоящее?

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

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

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

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

Bookly – один из самых распространённых плагинов записи на приём для WordPress: он в официальном каталоге с 2014 года и работает на десятках тысяч сайтов. Он публикует на открытой части сайта форму записи, в которой посетители выбирают услугу, сотрудника и время, не заводя учётной записи.

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

Две вещи стоит сказать прямо – в обе стороны.

Во-первых, о соразмерности: это проблема чтения данных, а не захвата сервера или учётной записи администратора. Сама по себе она не позволяет выполнить код на сервере или войти в панель управления. Хеш пароля – не пароль: его ещё нужно взломать, чтобы он превратился в доступ. И свидетельств эксплуатации нет: организация, присвоившая CVE, не опубликовала оценку серьёзности, проблемы нет в каталоге KEV американского агентства CISA, её показатель вероятности эксплуатации (EPSS) не присвоен, и мне не известно ни одного сообщения об эксплуатации.

Во-вторых, без преуменьшения: между анонимным посетителем и этим путём не стоит ни вход в систему, ни nonce, ни какая-либо настройка плагина. Он достижим на установке бесплатного плагина по умолчанию. Именно поэтому рекомендация – обновиться в ближайшее время, а не откладывать до следующего технического окна.

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

Затронут ли я?

Всё сводится к одному вопросу: какая у вас версия Bookly? Верить мне на слово не нужно – проверить можно двумя способами.

В панели управления WordPress (главный источник):

  1. Войдите в консоль WordPress (обычно вашдомен.ru/wp-admin).
  2. Перейдите в Плагины, затем Установленные плагины.
  3. Найдите Bookly – запись, папка которой называется bookly-responsive-appointment-booking-tool, – и посмотрите версию под названием.

Из публичного манифеста (без входа): откройте в браузере вашдомен.ru/wp-content/plugins/bookly-responsive-appointment-booking-tool/readme.txt. Строка Stable tag: ближе к началу – это версия, о которой сообщает ваша установка; именно этот публичный файл я и читал.

Затем примените правило, помня, что версии сравниваются численно, а не по алфавиту:

  • С 11.3 по 27.7: затронута. Обновляйтесь сейчас.
  • 27.8 или новее: уже исправлена. Сюда входит и 27.9, сохраняющая исправление.
  • Старше 11.3: этой проблемой не затронута. Небезопасной конструкции запроса в тех выпусках не было – идентификаторы сотрудников проходили через параметризованный конструктор запросов плагина. У столь старого выпуска хватает других причин для обновления, но это уведомление к ним не относится.
  • Не читайте номера версий как текст. У Bookly двузначный старший номер, поэтому текстовый порядок ошибается дважды: 3.3 выглядит больше 27.8, хотя гораздо старше, а 27.10 выглядит меньше 27.7, хотя новее. Сравнивайте число за числом.

О дополнениях Bookly. Платные расширения Bookly (Pro и различные пакеты bookly-addon-*) устанавливаются как отдельные плагины со своими номерами версий, а адреса их файлов могут нести версию основного плагина вместо собственной. Для этого уведомления важна версия основного плагина Bookly, полученная одним из двух способов выше, – а не число, считанное из файлов дополнения.

Если снаружи вы не видите файлов Bookly. У Bookly есть настройка, определяющая, грузятся ли его скрипты и стили на каждой странице или только на страницах с формой записи. Если у вас выбран второй вариант, снаружи видно значительно меньше. Эта настройка влияет только на то, что посетитель может увидеть, – она не определяет, присутствует ли уязвимость и достижима ли она. Проверьте версию в панели управления.

Как обновиться

Надёжнее всего обновляться средствами самого WordPress, предварительно сделав резервную копию:

  1. Сделайте резервную копию сайта (файлы и база данных) до любых изменений. Большинство хостингов предлагают копии в один клик, либо используйте плагин резервного копирования.
  2. В панели WordPress перейдите в Консоль, затем Обновления, либо в Плагины и Установленные плагины. Если обновление Bookly предлагается, установите его оттуда.
  3. Если удобнее командная строка, WP-CLI делает то же самое: wp plugin update bookly-responsive-appointment-booking-tool.
  4. Если обновление не появляется, последний выпуск можно взять прямо со страницы плагина в каталоге WordPress.org, Bookly, и обновиться через Плагины, Добавить плагин, Загрузить плагин.
  5. После обновления убедитесь по шагам выше, что номер версии новый (27.8 или выше), и проверьте, что форма записи и уже созданные записи работают нормально.

Если вы пользуетесь платными дополнениями Bookly, обновите их вместе с основным плагином – их выпуски обычно согласованы.

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

После обновления

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

Один последующий шаг всё же стоит именно выполнить, и он вытекает прямо из того, до чего могла дотянуться эта уязвимость. Поскольку хеши паролей WordPress были среди данных, которые мог вернуть запрос, а полученный ранее хеш остаётся полезным злоумышленнику и после вашего обновления, разумная мера предосторожности – после установки обновления сбросить пароли учётных записей администраторов. К этому естественно добавить два шага поменьше:

  • Просмотрите учётные записи администраторов и редакторов на предмет незнакомых – так же, как вы обычно проверяете доступ к сайту.
  • Перегенерируйте секретные ключи и «соли» WordPress в wp-config.php (новые значения – в один клик в официальном генераторе; их замена однократно завершит сеансы всех пользователей).

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

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

Чтобы полностью прояснить, на чём основано моё письмо: я читал только публичные файлы, которые ваш сайт и так отдаёт каждому посетителю, а именно публичный readme.txt плагина Bookly и вашу главную страницу. Я не обращался ни к панели управления WordPress, ни к базе данных, ни к какой-либо закрытой части сайта.

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

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

У меня нет вебмастера / я не справляюсь

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

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

Контакты

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

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

Источники

Официальные бюллетени и отслеживание

Разработчик / плагин