Уведомление о безопасности Bookly
Если вы получили от меня письмо со ссылкой на эту страницу, значит ваш сайт, по всей
видимости, использует версию 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 (главный источник):
- Войдите в консоль WordPress (обычно
вашдомен.ru/wp-admin). - Перейдите в Плагины, затем Установленные плагины.
- Найдите 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, предварительно сделав резервную копию:
- Сделайте резервную копию сайта (файлы и база данных) до любых изменений. Большинство хостингов предлагают копии в один клик, либо используйте плагин резервного копирования.
- В панели WordPress перейдите в Консоль, затем Обновления, либо в Плагины и Установленные плагины. Если обновление Bookly предлагается, установите его оттуда.
- Если удобнее командная строка, WP-CLI делает то же самое:
wp plugin update bookly-responsive-appointment-booking-tool. - Если обновление не появляется, последний выпуск можно взять прямо со страницы плагина в каталоге WordPress.org, Bookly, и обновиться через Плагины, Добавить плагин, Загрузить плагин.
- После обновления убедитесь по шагам выше, что номер версии новый (27.8 или выше), и проверьте, что форма записи и уже созданные записи работают нормально.
Если вы пользуетесь платными дополнениями Bookly, обновите их вместе с основным плагином – их выпуски обычно согласованы.
Заодно стоит убедиться, что ядро WordPress и остальные плагины актуальны: тот же принцип относится ко всем.
После обновления
Переход на 27.8 или новее закрывает проблему, и признаков её эксплуатации где-либо нет, поэтому никакого экстренного реагирования не подразумевается: считать сайт скомпрометированным или отключать его не нужно.
Один последующий шаг всё же стоит именно выполнить, и он вытекает прямо из того, до чего могла дотянуться эта уязвимость. Поскольку хеши паролей WordPress были среди данных, которые мог вернуть запрос, а полученный ранее хеш остаётся полезным злоумышленнику и после вашего обновления, разумная мера предосторожности – после установки обновления сбросить пароли учётных записей администраторов. К этому естественно добавить два шага поменьше:
- Просмотрите учётные записи администраторов и редакторов на предмет незнакомых – так же, как вы обычно проверяете доступ к сайту.
- Перегенерируйте секретные ключи и «соли» WordPress в
wp-config.php(новые значения – в один клик в официальном генераторе; их замена однократно завершит сеансы всех пользователей).
Отнеситесь к этому как к обычной гигиене безопасности, а не как к реагированию на инцидент.
Что я делал и чего не делал
Чтобы полностью прояснить, на чём основано моё письмо: я читал только публичные файлы, которые
ваш сайт и так отдаёт каждому посетителю, а именно публичный readme.txt плагина Bookly и
вашу главную страницу. Я не обращался ни к панели управления WordPress, ни к базе данных,
ни к какой-либо закрытой части сайта.
В частности, я никогда ничего не отправлял ни в вашу форму записи, ни по затронутому пути запроса – ничего не отправлялось, не тестировалось и не эксплуатировалось. Здесь это весит больше, чем на большинстве подобных страниц: уязвимость и есть неаутентифицированный запрос по этому пути, поэтому «я его не трогал» – вся разница между раскрытием и вторжением.
Это наблюдение по версии: ваш сайт сообщает версию из затронутого диапазона. Сайт в этом диапазоне может быть уже защищён иначе – например, межсетевым экраном уровня приложений или перенесённым исправлением. Это уведомление не утверждает, что ваш сайт был уязвим в момент проверки.
У меня нет вебмастера / я не справляюсь
Если сайтом занимаетесь не вы, перешлите, пожалуйста, эту страницу тому, кто им занимается (вашему разработчику, агентству или хостинг-провайдеру). Шаги выше он узнает сразу.
Если вы ведёте сайт сами и застряли, я с удовольствием подскажу направление бесплатно. Напишите по контактам ниже.
Контакты
Evan Harris, исследователь безопасности
- Эл. почта: security@mail.mcpsec.dev
- X: @Evan__Harris
- GitHub: eharris128
- LinkedIn: Evan Harris
Я обращаюсь по таким вопросам исключительно ради того, чтобы помочь операторам защитить свои сайты. Если вы предпочитаете больше не получать от меня писем, просто сообщите – я это учту.
Источники
Официальные бюллетени и отслеживание
Разработчик / плагин