Уведомление о безопасности Premium Packages (WordPress Download Manager)
Если Вы получили от меня письмо со ссылкой на эту страницу, то потому, что Ваш сайт,
по всей видимости, использует уязвимую версию 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. Она показывает реальную установленную версию:
- Войдите в панель управления WordPress (обычно по адресу
yourdomain.com/wp-admin). - Перейдите в Plugins затем Installed Plugins.
- Найдите 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, предварительно создав резервную копию:
- Создайте резервную копию Вашего сайта (файлы и база данных) перед внесением изменений. Большинство хостинг-провайдеров предлагают резервное копирование в один клик, или используйте плагин резервного копирования WordPress.
- В административной панели WordPress перейдите в Dashboard затем Updates, или Plugins затем Installed Plugins. Если обновление Premium Packages указано в списке, установите его отсюда.
- Если Вы предпочитаете командную строку, WP-CLI делает то же самое:
wp plugin update wpdm-premium-packages. - Если обновление не появляется, Вы можете получить последний выпуск напрямую со страницы плагина в каталоге WordPress.org, Premium Packages, и обновить его через Plugins затем Add New Plugin затем Upload Plugin.
- После обновления подтвердите новый номер версии (7.0.5 или новее) в Plugins затем Installed Plugins, следуя приведённым выше шагам, и проверьте, что Ваши загрузки и функции магазина работают нормально.
Раз уж Вы этим занялись, стоит убедиться, что ядро WordPress, WordPress Download Manager и Ваши прочие плагины актуальны, поскольку тот же принцип применим ко всем из них.
После обновления
Обновление до 7.0.5 или новее закрывает проблему, и для большинства сайтов на этом задача завершена. Нет никаких признаков того, что эта уязвимость эксплуатировалась, поэтому никакие экстренные меры не подразумеваются: Вам не нужно считать свой сайт скомпрометированным, отключать его или принудительно сбрасывать пароли.
Поскольку уязвимость могла позволить неавторизованному посетителю действовать с учётной записью клиента или другой учётной записью, не являющейся администраторской, разумна одна рутинная последующая проверка: просмотрите недавнюю активность учётных записей клиентов и заказов на предмет чего-либо незнакомого, например заказов или изменений учётных записей, которые клиент не делал, или входов в систему, которые не согласуются с обычной активностью. Отнеситесь к этому как к обычной регулярной проверке, которую магазин проводит периодически, а не как к реагированию на инцидент. Если что-то всё же выглядит неправильно, применяются обычные шаги (сбросьте пароль этой учётной записи и разберите активность вместе с клиентом), и Вы можете обратиться ко мне с вопросами.
Что я делал и чего не делал
Чтобы быть полностью прозрачным относительно проверки, стоящей за моим письмом: я лишь
читал публичные файлы, которые Ваш сайт уже предоставляет каждому посетителю, а именно
публичный файл плагина readme.txt и Вашу главную страницу. Я не получал доступ к
Вашей административной панели WordPress, Вашей базе данных или какой-либо частной части
сайта. В частности, я не касался уязвимой конечной точки и ничего не тестировал и не
эксплуатировал.
Это наблюдение на основе версии: Ваш сайт сообщает о версии в затронутом диапазоне. Сайт в этом диапазоне может уже быть защищён иными средствами (например, межсетевым экраном веб-приложений или бэкпортированным исправлением), поэтому данное уведомление не является утверждением, что Ваш сайт был уязвим в момент моей проверки.
У меня нет веб-мастера / я застрял
Если Вы не тот человек, который обслуживает сайт, пожалуйста, перешлите эту страницу тому, кто это делает (Вашему веб-разработчику, агентству или хостинг-провайдеру). Они быстро узнают приведённые выше шаги.
Если Вы обслуживаете сайт самостоятельно и застряли, я с радостью бесплатно помогу Вам найти верное направление. Свяжитесь со мной, используя контактные данные ниже.
Контакты
Evan Harris, исследователь безопасности
- Электронная почта: security@mail.mcpsec.dev
- X: @Evan__Harris
- GitHub: eharris128
- LinkedIn: Evan Harris
Я обращаюсь по подобным вопросам исключительно для того, чтобы помочь операторам защитить их сайты. Если Вы предпочитаете, чтобы с Вами больше не связывались, просто сообщите мне об этом, и я это уважу.
Источники
Официальные уведомления и отслеживание
Производитель / плагин