Якщо ви отримали від мене лист із посиланням на цю сторінку, то це тому, що ваш сайт, вочевидь, використовує версію Simple Membership (плагін членства для WordPress від smp7 / wp.insider, який лежить у ваших файлах за шляхом /wp-content/plugins/simple-membership/), яка потрапляє в діапазон, уражений відомою проблемою безпеки. Ця сторінка пояснює, у чому полягає проблема, як перевірити, яка версія у вас встановлена, як оновитися, і який подальший крок після цього має найбільше значення.

Проблема має ідентифікатор CVE-2026-15930: це захоплення облікового запису адміністратора без автентифікації через власну форму реєстрації членства плагіна. Вона стосується кожного випуску до 4.7.8 і виправлена у 4.7.8. Якщо у вас працює версія старіша за 4.7.8, оновіть Simple Membership до 4.7.8 або новішої версії (4.7.9 вийшла пізніше і зберігає це виправлення, тож вона теж підходить).

Одну річ варто прояснити, оскільки вона відрізняється від деяких інших повідомлень, які я надсилав: тут немає жодної старішої версії, яка була б безпечною. Це не вада, яку внесли в якийсь момент, а потім виправили. Вона була в плагіні від його найпершого опублікованого випуску аж до 4.7.7 включно, тож аргумент “моя версія занадто стара, щоб постраждати” тут не спрацює. Єдині версії, яких це не стосується, це 4.7.8 і новіші.

Це повідомлення також не залежить від того, як налаштований ваш сайт. Немає жодного параметра, який треба вмикати: коли плагін активовано, він публікує сторінку membership-registration зі своєю формою реєстрації, тож стандартна інсталяція відкриває цю форму відвідувачам, які не увійшли в систему. Якщо у вас версія старіша за 4.7.8, оновлення варто зробити невідкладно.

Це вада плагіна, а не ядра WordPress. Повністю оновлений WordPress не захистить вас, якщо сам плагін Simple Membership має уражену версію.

Чи справжнє це повідомлення?

Так. Це добросовісне повідомлення в межах відповідального розкриття від незалежного дослідника безпеки. Я не прошу у вас грошей, паролів чи доступу до сайту і не намагався до нього проникнути, щось йому надіслати чи щось на ньому проексплуатувати.

Я лише переглянув загальнодоступні файли, які ваш сайт віддає кожному відвідувачеві (так само, як публічною є ваша головна сторінка), і занотував номер версії, який публікує плагін. Я свідомо не надсилав вашу форму реєстрації і нічого їй не передавав, і ця перевірка жодним чином не торкається ваших даних, вашої панелі адміністрування чи будь-якої закритої частини сайту (докладніше нижче, у розділі Що я робив і чого не робив).

Якщо ви хочете перевірити, хто я, контактні дані наведено внизу цієї сторінки та на сторінці Про мене.

Чому це важливо

Simple Membership додає до сайту WordPress рівні членства та захищений контент, а також дає відвідувачам публічну форму реєстрації, щоб вони могли самостійно оформити членство. Саме ця форма і є точкою входу тут.

В уражених версіях плагін не перевіряв, чи WordPress справді створив новий обліковий запис, перш ніж зберегти надіслані дані. Коли запитувану реєстрацію не вдавалося створити як справді новий обліковий запис, бо обране ім’я збігалося з уже наявним обліковим записом, плагін однаково продовжував і записував надіслані дані в цей наявний обліковий запис. Практичний наслідок такий: електронна адреса та пароль, введені в публічну форму реєстрації, стають реквізитами входу облікового запису, який уже був на сайті. На практиці обліковим записом, що зрештою перезаписується, виявляється початковий адміністратор сайту, а це передає контроль над сайтом тому, хто заповнив форму.

Варто прямо сказати дві речі. По-перше, вхід у систему не потрібен і нічого не має бути неправильно налаштовано: досить анонімного відвідувача і сторінки реєстрації, яку плагін публікує сам по собі. По-друге, наслідком є адміністративний контроль, а не обмежений витік даних, тому рекомендація тут полягає в тому, щоб оновитися невідкладно, а не відкладати це до наступного планового обслуговування.

Я описую це на тому рівні, який потрібен власникові сайту, щоб діяти, і не далі. Я не публікую подробиць, які дозволили б комусь відтворити проблему, і прошу вас не пробувати це ні на власному сайті, ні на чужому. Перевірка номера вашої версії, як описано нижче, дає все, що потрібно, щоб вирішити, що робити.

Якщо в моєму листі йшлося про цю проблему, це означає, що версія, про яку повідомляє ваш сайт, старіша за 4.7.8. Я не перевіряв, чи можна експлуатувати саме ваш сайт; усе, що я спостерігав, це версія.

Чи стосується це мене?

Усе зводиться до одного питання: яка версія Simple Membership у вас працює? Вам не обов’язково вірити мені на слово, і є три способи це перевірити. На відміну від деяких плагінів, про які я пишу, тут усі три способи заслуговують на довіру, бо всі вони показують те саме базове число версії.

У панелі адміністрування WordPress (головне джерело):

  1. Увійдіть до консолі WordPress (зазвичай за адресою yourdomain.com/wp-admin).
  2. Перейдіть до Плагіни, потім Встановлені плагіни.
  3. Знайдіть Simple Membership, запис, тека якого називається simple-membership, і подивіться версію, показану під назвою.

З публічного маніфесту (без входу): відкрийте в браузері yourdomain.com/wp-content/plugins/simple-membership/readme.txt. Рядок Stable tag: біля початку файлу і є версією, яку показує ваша інсталяція, і це той самий публічний файл, який читав я.

З вихідного коду сторінки (без входу): перегляньте вихідний код будь-якої сторінки на своєму сайті і знайдіть таблицю стилів плагіна, css/swpm.common.css, за шляхом /wp-content/plugins/simple-membership/. Число ?ver=, додане до неї, є версією плагіна, проставленою з власної константи версії плагіна, тож для цього плагіна це надійне значення, а не оманливе.

Далі застосуйте це правило, зважаючи на те, що версії порівнюються числово, а не за алфавітом, тож 4.7.10 буде новішою за 4.7.8, навіть попри те, що текстово вона виглядає меншою:

  • Будь-що старіше за 4.7.8: уражено. Оновіться зараз. Немає жодної межі, нижче якої старіший випуск знову ставав би безпечним.
  • 4.7.8 або новіша: уже виправлено. Це стосується і 4.7.9, яка зберігає це виправлення.

Зауваження щодо додатків Simple Membership. Платні додатки плагіна встановлюються як окремі плагіни, у власних теках, з власними лініями версій. Номер версії додатка нічого не каже про цю проблему. Значення має саме версія основного плагіна Simple Membership, тека simple-membership, яку можна визначити будь-якою з трьох перевірок вище.

Як оновитися

Найбезпечніший шлях: оновлюватися засобами самого WordPress, попередньо зробивши резервну копію:

  1. Зробіть резервну копію сайту (файлів і бази даних), перш ніж щось змінювати. Більшість хостинг-провайдерів пропонують резервне копіювання в один клік, або скористайтеся плагіном резервного копіювання для WordPress.
  2. У панелі адміністрування WordPress перейдіть до Консоль, потім Оновлення, або до Плагіни, потім Встановлені плагіни. Якщо оновлення Simple Membership є в переліку, встановіть його звідси.
  3. Якщо вам зручніше в командному рядку, WP-CLI робить те саме: wp plugin update simple-membership.
  4. Якщо оновлення не з’являється, ви можете взяти останній випуск безпосередньо зі сторінки плагіна в каталозі WordPress.org, Simple Membership, і оновитися через Плагіни, потім Додати плагін, потім Завантажити плагін.
  5. Після оновлення підтвердіть новий номер версії (4.7.8 або новіша) за кроками вище й перевірте, що ваша форма реєстрації, рівні членства та захищений контент досі працюють нормально.

Якщо ви користуєтеся платними додатками Simple Membership, оновлюйте їх разом з основним плагіном, оскільки їхні випуски зазвичай узгоджені між собою.

Поки ви там, варто пересвідчитися, що ядро WordPress та інші ваші плагіни оновлені, оскільки той самий принцип стосується їх усіх.

Після оновлення

Оновлення до 4.7.8 або новішої версії закриває проблему. Тут є один подальший крок, який важливіший за звичайне прибирання, і його варто прочитати, навіть якщо ви впевнені, що нічого не сталося.

Звичайна порада тут не спрацює. Коли люди перевіряють сайт після вади захоплення контролю, вони шукають незнайомі нові облікові записи адміністратора. Ця перевірка тут нічого не покаже, бо жодного нового облікового запису не створюється. Обліковий запис, що вже існував, перезаписується, тож кількість адміністраторів не змінюється і в списку не з’являється жодне незнайоме ім’я. Змінюються реквізити входу облікового запису, який ви вже знаєте. Тож:

  • Перевірте електронну адресу кожного облікового запису адміністратора. У панелі адміністрування WordPress перейдіть до Користувачі, відфільтруйте за Адміністратор і переконайтеся, що кожен із них досі має ту електронну адресу, яку повинен мати. Обліковий запис адміністратора, чия електронна адреса вже не належить потрібній людині, і є ознакою цієї проблеми.
  • Скиньте паролі облікових записів адміністраторів, а також будь-яких інших важливих облікових записів. Зробіть це, навіть якщо всі електронні адреси виглядають правильними.
  • Розумним додатковим кроком буде також перегенерувати секретні ключі та “солі” WordPress у wp-config.php (нові значення доступні в один клік в офіційному генераторі секретних ключів; їх заміна одноразово завершує сеанси всіх користувачів).

Зверніть увагу, що оновлення закриває діру, але не скасовує доступ, який уже було отримано. Якщо хтось захопив обліковий запис до того, як ви оновилися, він і після цього продовжує володіти цими реквізитами входу, і саме тому скидання паролів вище має таке значення. Якщо ви знайдете щось, що вас турбує, поводьтеся з цим так само, як і з будь-яким іншим підозрюваним несанкціонованим доступом.

Я не маю жодної інформації про те, чи щось справді сталося на вашому сайті, і не дивився. Це запобіжне повідомлення, а не звіт про інцидент.

Що я робив і чого не робив

Щоб бути цілком прозорим щодо перевірки, на якій ґрунтується мій лист: я читав лише два публічні файли, які ваш сайт і так віддає кожному відвідувачеві, а саме публічний файл readme.txt плагіна та вашу головну сторінку. Я не звертався ні до панелі адміністрування WordPress, ні до бази даних, ні до будь-якої закритої частини сайту.

Зокрема, я ніколи не надсилав вашу форму реєстрації і нічого їй не передавав. Нічого не було надіслано, протестовано чи проексплуатовано. Тут це важить більше, ніж на більшості таких сторінок, бо форма реєстрації є саме тим, чого стосується ця проблема, тож “я цього не торкався” і є всією різницею між розкриттям і вторгненням.

Я також свідомо не публікую подробиць, які допомогли б комусь скористатися цією проблемою. Опис вище зупиняється на рівні, потрібному власникові сайту, і я не даю посилань на код підтвердження концепції.

Це спостереження за версією: ваш сайт повідомляє версію, старішу за 4.7.8. Сайт у цьому діапазоні може вже бути захищений іншими засобами, наприклад брандмауером вебзастосунків або перенесеним у старішу версію виправленням. Це повідомлення не є твердженням про те, що ваш сайт можна було експлуатувати на момент моєї перевірки.

У мене немає вебмайстра / я не даю ради

Якщо сайтом опікуєтеся не ви, перешліть, будь ласка, цю сторінку тому, хто ним опікується (вашому розробнику, агенції або хостинг-провайдеру). Кроки вище він упізнає одразу.

Якщо ви ведете сайт самі й застрягли, я радо підкажу напрямок безкоштовно. Напишіть за контактами нижче.

Контакти

Evan Harris, дослідник безпеки

Я звертаюся з такими питаннями винятково для того, щоб допомогти операторам захистити свої сайти. Якщо ви волієте більше не отримувати від мене листів, просто скажіть, і я це врахую.

Джерела

Офіційні бюлетені та відстеження

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