Если вы получили от меня письмо со ссылкой на эту страницу, значит ваш сайт, по всей видимости, использует версию плагина SMS Alert (плагин WordPress, указанный в каталоге как “SMS Alert – SMS & OTP for WooCommerce, Order Notifications & Abandoned Cart Recovery”, от Cozy Vision Technologies, который лежит у вас в файлах по пути /wp-content/plugins/sms-alert/), попадающую в затронутый диапазон известной проблемы безопасности. На этой странице описано, в чём состоит проблема, как определить, применима ли она вообще к вашему сайту, и как обновиться. Везде далее речь идёт именно о плагине WordPress.

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

  1. на вашем сайте в настройках SMS Alert включена проверка по одноразовому коду (OTP) при сбросе пароля, и
  2. у атакуемой учётной записи сохранён номер телефона.

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

Проблема отслеживается как CVE-2026-11387: это захват учётной записи без аутентификации через процедуру сброса пароля плагина (CWE-640, слабое восстановление пароля). Она затрагивает версии с 3.0.0 по 3.9.5 и исправлена в 3.9.6. Если у вас установлена затронутая версия, обновите SMS Alert до 3.9.6 или новее. Более поздние выпуски 3.9.7 и 3.9.8 исправляют другие проблемы; оба безопасны в отношении именно этой проблемы, и 3.9.8 является текущим релизом. Уязвимость имеет оценку CVSS 9.8, и в открытом доступе есть демонстрационный код эксплуатации (proof-of-concept), поэтому я пишу вам, даже несмотря на то, что вопрос о настройках, поднятый выше, вполне может решить дело в вашу пользу.

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

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

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

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

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

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

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

SMS Alert отправляет SMS- и WhatsApp-уведомления для магазинов на WooCommerce, а также может ставить одноразовый код перед определёнными действиями пользователя. Один из процессов, которые он может так защитить, это восстановление по ссылке «Забыли пароль?»: посетитель запрашивает сброс, плагин отправляет одноразовый код на номер телефона, привязанный к учётной записи, и новый пароль должен устанавливаться только после того, как этот код будет введён верно.

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

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

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

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

Всё решают два вопроса, в этом порядке.

Первый: используете ли вы SMS Alert для подтверждения сброса пароля? Это решающий вопрос, и ответить на него можете только вы. Проверить свои собственные настройки совершенно безопасно, и в этом весь смысл данной страницы.

  • В консоли WordPress откройте меню SMS Alert и перейдите в его настройки, затем в раздел, отвечающий за проверку OTP. В этом разделе перечислены процессы, перед которыми можно поставить одноразовый код. Проверьте, есть ли среди включённых сброс пароля (иногда обозначается как «lost password» или «forgot password»).
  • Если эта опция не включена, эта проблема, весьма вероятно, не достигает вашего сайта, даже на затронутой версии. Обновление всё равно рекомендуется в рамках обычного планового обслуживания.
  • Если эта опция включена, проблема касается вас, и обновиться следует незамедлительно.

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

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

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

  1. Войдите в консоль WordPress (обычно по адресу yourdomain.com/wp-admin).
  2. Перейдите в Плагины, затем Установленные плагины.
  3. Найдите запись “SMS Alert – SMS & OTP for WooCommerce …“ (её папка sms-alert) и посмотрите версию, указанную под названием. Это и есть реальная установленная версия.

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

Чему не стоит доверять: числу после ?ver=, приписанному к клиентским скриптам и таблицам стилей плагина в исходном коде вашей страницы. SMS Alert проставляет версию этих файлов из внутренней константы, которая как минимум один раз отставала от фактического релиза: версия 3.5.0 была выпущена с файлами, помеченными как 3.4.9. Поэтому чтение версии таким способом может показать релиз старше того, что установлен у вас на самом деле, а на границе диапазона это превратило бы исправленную установку 3.9.6 в кажущуюся 3.9.5. Именно поэтому я не использовал этот способ, чтобы решить, кому писать, и именно поэтому вам стоит определять свою версию по экрану в панели управления или по строке в readme.txt.

Затем примените это правило, учитывая, что версии сравниваются численно, а не по алфавиту, то есть 3.9.10 будет новее, чем 3.9.9:

  • С 3.0.0 по 3.9.5: потенциально затронуто (в зависимости от ответа на вопрос о настройке OTP выше), обновляйтесь сейчас.
  • 3.9.6 или новее: уже исправлено. Сюда входят более поздние выпуски 3.9.7 и 3.9.8, устраняющие не связанные с этим проблемы; текущим релизом является 3.9.8.
  • Старше 3.0.0: это выходит за рамки того, о чём я готов делать какие-либо утверждения. Самый старый выпуск, который вендор всё ещё публикует, это 3.0.0, поэтому у меня нет возможности проверить что-либо ниже него, а я предпочитаю промолчать, чем обвинить версию, которую не могу проверить. На практике этот случай гипотетический: самая старая установка, которую я где-либо видел, относится к линейке 3.4.x.

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

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

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

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

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

Обновление до 3.9.6 или новее закрывает проблему, и для большинства сайтов на этом всё заканчивается. Эта страница является предупреждением на всякий случай, а не отчётом об инциденте: у меня нет возможности узнать, произошло ли что-то на вашем сайте, и я не проверял.

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

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

Если вы обнаружите что-то, что вас беспокоит, правильным ответом будет отнестись к этому так же, как к любому другому подозрению на несанкционированный доступ: смените пароли администраторов и подумайте о том, чтобы перегенерировать секретные ключи и «соли» в wp-config.php, что завершит все существующие сеансы. Если на вашем сайте никогда не была включена OTP-проверка при сбросе пароля, достаточно одного лишь обновления.

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

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

Я также намеренно не публикую подробности, которые помогли бы кому-то воспользоваться этой проблемой: страница выше описывает уязвимость на том уровне, который нужен владельцу сайта, и не глубже, и я не даю ссылку на общедоступный proof-of-concept код.

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

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

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

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

Контакты

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

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

Источники

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

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

</content> </invoke>