Если Вы получили от меня письмо со ссылкой на эту страницу, то потому, что Ваш сайт, по всей видимости, использует уязвимую версию Premium Packages (плагин WordPress wpdm-premium-packages, дополнение к WordPress Download Manager от Shahjada / wpdownloadmanager.com). На этой странице объясняется, почему это важно и как это исправить.

Данное уведомление касается уязвимости CVE-2026-15348, обхода аутентификации без предварительной авторизации в обработчике загрузок плагина, который может позволить неавторизованному посетителю войти в систему как клиент или другая учётная запись, не являющаяся администраторской, в Вашем магазине. Она затрагивает версии с 4.7.0 по 7.0.4 и устранена в версии 7.0.5. Если Вы используете затронутую версию, обновите Premium Packages до 7.0.5 или новее.

Несколько слов о срочности, поскольку она находится между другими моими уведомлениями: эта проблема вообще не требует входа в систему (она полностью не требует авторизации), поэтому оперативное обновление имеет смысл. В то же время это уязвимость доступа к учётным записям, затрагивающая владельцев заказов, не являющихся администраторами, а не захват сервера или полных прав администратора, и нет никаких признаков того, что она эксплуатируется (её нет в каталоге известных эксплуатируемых уязвимостей CISA (Known Exploited Vulnerabilities), и мне не известно ни об одном отчёте об эксплуатации). Эта страница является предупредительным уведомлением, а не отчётом об инциденте. Обновление закрывает проблему, и никакие экстренные меры не подразумеваются.

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

Является ли это сообщение подлинным?

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

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

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

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

Premium Packages представляет собой дополнение к WordPress Download Manager (около 2 000 активных установок), которое позволяет сайту продавать цифровые продукты и загрузки. В затронутых версиях обработчик download() плагина срабатывает на неавторизованный запрос. Он декодирует контролируемый злоумышленником параметр URL (wpdmppdl), который лишь закодирован в base64, без подписи и без nonce, подтверждающих подлинность запроса, а затем выдаёт файлы cookie для входа в WordPress после проверки «домена», у которой обе стороны предоставляются злоумышленником (так что проверка тривиально удовлетворяется). Этот класс ошибок представляет собой обход аутентификации: побочный путь выдаёт авторизованную сессию, так и не проверив, кто выполняет запрос.

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

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

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

Затронут ли я? Как проверить свою версию

Это единственная часть данного уведомления, которая отличается от других, что я отправляю, потому что публичные поля версии этого плагина ненадёжны, так что стоит прочитать внимательно.

Авторитетная проверка производится в административной панели WordPress. Она показывает реальную установленную версию:

  1. Войдите в панель управления WordPress (обычно по адресу yourdomain.com/wp-admin).
  2. Перейдите в Plugins затем Installed Plugins.
  3. Найдите Premium Packages и запишите версию, указанную под его названием.

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

  • Любая версия ниже 7.0.5: затронута, обновитесь сейчас.
  • 7.0.5 или новее: уже исправлена.

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

  • Строка «Stable tag:» в публичном файле readme.txt плагина отстаёт от его собственного кода. Сайт, использующий последний уязвимый выпуск (7.0.4), публикует, например, Stable tag: 7.0.3. Так что публичный readme является надёжным сигналом «исправлено» только тогда, когда в нём указано 7.0.5 или выше. Более низкий номер не надёжно сообщает Вам Ваш точный выпуск; относитесь ко всему ниже 7.0.5 как к «проверьте wp-admin и обновитесь».
  • Не судите о своей версии по номеру ?ver= в URL скриптов или стилей плагина. В выпуске безопасности 7.0.5 плагин заморозил свою внутреннюю константу версии на 7.0.4, так что исправленный сайт 7.0.5 всё равно отдаёт ресурсы с меткой ?ver=7.0.4; а ?ver= у файла CSS на самом деле является версией ядра WordPress, а не плагина. Ни то, ни другое не отражает реальную версию плагина. Используйте wp-admin.

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

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

  1. Создайте резервную копию Вашего сайта (файлы и база данных) перед внесением изменений. Большинство хостинг-провайдеров предлагают резервное копирование в один клик, или используйте плагин резервного копирования WordPress.
  2. В административной панели WordPress перейдите в Dashboard затем Updates, или Plugins затем Installed Plugins. Если обновление Premium Packages указано в списке, установите его отсюда.
  3. Если Вы предпочитаете командную строку, WP-CLI делает то же самое: wp plugin update wpdm-premium-packages.
  4. Если обновление не появляется, Вы можете получить последний выпуск напрямую со страницы плагина в каталоге WordPress.org, Premium Packages, и обновить его через Plugins затем Add New Plugin затем Upload Plugin.
  5. После обновления подтвердите новый номер версии (7.0.5 или новее) в Plugins затем Installed Plugins, следуя приведённым выше шагам, и проверьте, что Ваши загрузки и функции магазина работают нормально.

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

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

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

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

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

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

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

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

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

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

Контакты

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

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

Источники

Официальные уведомления и отслеживание

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