Если вы получили от меня письмо со ссылкой на эту страницу, то это потому, что ваш веб-сайт, судя по всему, работает на версии Welcart e-Commerce (бесплатного плагина электронной коммерции для WordPress от Welcart / Collne, который находится в ваших файлах по пути /wp-content/plugins/usc-e-shop/), попадающей в диапазон, затронутый известной проблемой безопасности. Эта страница объясняет, в чём заключается проблема, насколько она важна для вашего сайта, как прочитать вашу версию, не будучи введённым в заблуждение, и как обновиться.

Проблема - это CVE-2026-19914, неаутентифицированный хранимый межсайтовый скриптинг (XSS). Она затрагивает каждый выпуск вплоть до 2.12.1 включительно и исправлена в 2.12.2, выпущенной 31 августа 2026 года. Если вы используете 2.12.1 или что-либо более старое, обновите Welcart до 2.12.2 или новее. Проблеме присвоена оценка CVSS 7.2 (High) по шкале Wordfence. Мне не известно о каком-либо публичном коде эксплуатации для неё.

Нет ни одной более старой версии, которая была бы безопасной. Это не изъян, который появился где-то в середине истории плагина и был позже исправлен. Вывод без экранирования, лежащий в основе этой проблемы, присутствовал на протяжении всей истории плагина - я подтвердил, что он присутствует ещё в версии 1.7.0, - поэтому «моя установка слишком стара, чтобы быть затронутой» здесь не выход. Единственные версии, которые не затронуты, - это 2.12.2 и новее.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Всё сводится к одному вопросу: какую версию Welcart вы используете?

Из административной части WordPress (авторитетный источник):

  1. Войдите в вашу панель управления WordPress (обычно по адресу yourdomain.com/wp-admin).
  2. Перейдите в Плагины, затем Установленные плагины.
  3. Найдите Welcart e-Commerce, запись, папка которой - usc-e-shop, и посмотрите версию, показанную под её названием.

Из общедоступного манифеста (вход не требуется): откройте

yourdomain.com/wp-content/plugins/usc-e-shop/readme.txt

в браузере и прочитайте строку Stable tag: ближе к началу. Если этот адрес возвращает «не найдено», попробуйте README.txt с заглавными буквами - некоторые хостинги учитывают регистр, а несколько пакетов поставляют файл с заглавными буквами.

Из исходного кода вашей страницы (вход не требуется): просмотрите исходный код вашей главной страницы и найдите собственную таблицу стилей плагина точно по этому пути:

/wp-content/plugins/usc-e-shop/css/usces_default.css?ver=...

Номер ?ver=, прикреплённый к этому файлу, - это версия самого плагина, и это тот общедоступный источник, который я читал. Welcart загружает эту таблицу стилей на своих страницах магазина, поэтому страница магазина или корзины - надёжное место, чтобы её найти. Читайте версию только из usces_default.css: другие файлы, вписанные в вашу страницу, несут собственные, совершенно не связанные номера ?ver=, и чтение первого попавшегося может оставить вас с версией другого программного обеспечения. Если вы вообще не можете получить читаемый номер из исходного кода страницы, это обычное дело и ни о чём не говорит - плагины кэширования и оптимизации регулярно удаляют значение ?ver= из URL-адресов ресурсов, - поэтому используйте вместо этого readme.txt или экран администрирования.

Затем примените это правило и учтите, что версии сравниваются численно, а не по алфавиту, так что 2.12.1 новее, чем 2.9.1, хотя «12» и выглядит меньше, чем «9», как текст:

  • 2.12.1 или старше: затронута. Обновите до 2.12.2 или новее. Нет порога, ниже которого более старый выпуск снова становится безопасным.
  • 2.12.2 или новее: уже исправлена в том, что касается этой проблемы. Установка последней доступной версии - лучший выбор.

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

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

  1. Сделайте резервную копию вашего сайта (файлы и база данных) перед внесением изменений. Большинство хостинг-провайдеров предлагают резервное копирование в один клик, или используйте плагин резервного копирования WordPress.
  2. В администрировании WordPress перейдите в Консоль, затем Обновления, или в Плагины, затем Установленные плагины. Если обновление Welcart есть в списке, установите его отсюда.
  3. Если вы предпочитаете командную строку, WP-CLI делает то же самое: wp plugin update usc-e-shop (команда использует имя папки, а не отображаемое имя).
  4. Если обновление не появляется, вы можете получить последнюю версию непосредственно со страницы плагина в каталоге WordPress.org, Welcart e-Commerce, и обновиться через Плагины, затем Добавить новый плагин, затем Загрузить плагин.
  5. После обновления подтвердите новый номер версии (2.12.2 или новее) с помощью приведённых выше шагов и откройте недавний заказ в вашей административной части, чтобы убедиться, что экраны заказов по-прежнему отображаются нормально.

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

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

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

  • предупредительное уведомление, а не отчёт об инциденте: у меня нет никакой видимости того, произошло ли что-то на вашем сайте, и я не смотрел.

Одну небольшую вещь стоит сделать, пока обновление свежее:

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

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

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

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

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

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

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

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

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

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

Контакты

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

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

Источники

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

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