Якщо ви отримали від мене листа з посиланням на цю сторінку, то тому, що ваш сайт, судячи з усього, використовує версію плагіна ProfilePress (плагін WordPress, який досі постачається під назвою теки wp-user-avatar, від ProperFraction), яка потрапляє в уражений діапазон відомої проблеми безпеки. На цій сторінці пояснюється, у чому полягає проблема, як з’ясувати, чи стосується вона взагалі вашого сайту, і як оновитися.

Спершу примітка про назву, бо вона збиває людей з пантелику: цей плагін почав своє життя як WP User Avatar і зберіг той slug під час зміни назви, тож у ваших файлах він міститься за адресою /wp-content/plugins/wp-user-avatar/, тоді як адміністрування WordPress наводить його під повною поточною назвою, “Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress”. WP User Avatar і ProfilePress: це той самий плагін. Це плагін WordPress від початку й до кінця.

Перш за все, найважливіший факт про це повідомлення: версія в ураженому діапазоні сама по собі не означає, що ваш сайт вразливий. Проблему, описану нижче, можна експлуатувати лише тоді, коли ProfilePress публікує реєстраційну форму на фронтенді, яка містить поле вибору ролі (шорткод [reg-select-role] або поле “reg-select-role” у конструкторі форм із перетягуванням), налаштовану певним чином. Якщо ваш сайт не пропонує публічну самостійну реєстрацію або ваші реєстраційні форми не дозволяють відвідувачу обрати роль, він, найпевніше, не є вразливим навіть на ураженій версії. Я можу прочитати версію вашого плагіна з публічних файлів, але не бачу ваших реєстраційних форм, тому це повідомлення є запобіжним попередженням, а не підтвердженим висновком щодо вашого сайту.

Ця проблема: CVE-2026-12497, неавтентифіковане підвищення привілеїв в обробнику реєстрації на фронтенді плагіна (CWE-269, неналежне керування привілеями). Орган, який присвоїв CVE, не опублікував оцінку серйозності, і я її не вигадую; для оцінювання важливо те, що вона неавтентифікована, але обмежена неадміністративною роллю й залежить від конфігурації реєстрації, описаної вище. Вона зачіпає версії з 3.0.0 до 4.16.17 і усунена у версії 4.16.18. Якщо ви використовуєте уражену версію, оновіть ProfilePress до 4.16.18 або новішої (поточний випуск: 4.16.19). Немає жодних ознак того, що цю проблему десь експлуатують.

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

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

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

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

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

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

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

ProfilePress є широко використовуваним плагіном членства, реєстрації користувачів і входу для WordPress (близько 100 000 активних встановлень). Серед іншого, він дозволяє сайту публікувати реєстраційні форми на фронтенді, щоб відвідувачі могли створювати власні облікові записи, і ці форми можуть за бажанням містити поле, яке дозволяє відвідувачу обрати, яку роль матиме його новий обліковий запис.

В уражених версіях обробник реєстрації визначає ролі, які форма пропонує, і ролі, які вона прийме, використовуючи два різні фрагменти коду. Для деяких допустимих конфігурацій поля ролі код, що обчислює прийнятні ролі, не зчитує список ролей форми й непомітно повертається до прийняття будь-якої редагованої ролі (тобто будь-якої ролі, крім адміністратора). Оскільки до того ж немає nonce, який захищав би публічний обробник реєстрації, неавтентифікований відвідувач може надіслати роль на власний вибір і бути зареєстрованим з вищою роллю, ніж пропонувала форма, наприклад Editor або Author замість призначеного Subscriber.

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

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

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

Це визначають два питання, у такому порядку.

Перше: чи публікуєте ви реєстраційну форму ProfilePress, яка дозволяє відвідувачу обрати роль? Це вирішальне питання, і лише ви можете на нього відповісти.

  • Якщо ваш сайт не пропонує публічну самостійну реєстрацію або його реєстраційні форми не містять поля вибору ролі (шорткод [reg-select-role] або поле “reg-select-role” у конструкторі форм), ви, найпевніше, не є вразливими, навіть на ураженій версії. Оновлення все одно рекомендується як звичайне обслуговування.
  • Якщо ваш сайт справді публікує реєстраційну форму на фронтенді з полем вибору ролі, проблема стосується вас, і вам слід оновитися невідкладно.
  • Щоб перевірити: в адмініструванні WordPress перегляньте свої реєстраційні форми ProfilePress на предмет поля ролі або відкрийте одну зі своїх сторінок реєстрації у вікні приватного перегляду й подивіться, чи пропонується відвідувачу, який не увійшов у систему, вибір ролі облікового запису.

Друге: яку версію ви використовуєте? Вам не обов’язково вірити мені на слово, а для цього плагіна версія повідомляється надійно.

З адміністративної панелі WordPress (авторитетно):

  1. Увійдіть до панелі керування WordPress (зазвичай за адресою yourdomain.com/wp-admin).
  2. Перейдіть до Plugins потім Installed Plugins.
  3. Знайдіть запис, наведений як “Paid Membership Plugin … ProfilePress” (його тека: wp-user-avatar), і запишіть версію, показану під його назвою. Це справжня встановлена версія.

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

Невелике попередження, якщо ви з тих, хто зчитує номери версій з URL-адрес ресурсів: оцінюйте версію за власним значенням ?ver= плагінового frontend.min.js або frontend.min.css, яке і є версією ProfilePress. Не зчитуйте її з вбудованого select2/select2.min.css, чиє значення ?ver= (наприклад 7.0.2) є власною версією бібліотеки select2 і не має жодного стосунку до версії плагіна.

Потім застосуйте це правило і зверніть увагу, що версії порівнюються чисельно, а не за алфавітом:

  • З 3.0.0 до 4.16.17: потенційно уражена (з урахуванням наведеного вище питання про реєстраційну форму), оновіться зараз.
  • 4.16.18 або новіша: уже виправлена. Це охоплює поточний випуск 4.16.19.
  • Старіша за 3.0: ця проблема її не зачіпає. Вразливий обробник реєстрації вперше з’явився зі зміною назви на ProfilePress 3.0; раніша лінійка “WP User Avatar” 1.x і 2.x, призначена лише для аватарів, не мала функції реєстрації й не містить його. (На практиці майже кожна поточна установка є випуском лінійки 4.16.x.)

Як оновитися

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

  1. Створіть резервну копію вашого сайту (файли та база даних) перед внесенням змін. Більшість хостинг-провайдерів пропонують резервне копіювання в один клік, або скористайтеся плагіном резервного копіювання WordPress.
  2. В адмініструванні WordPress перейдіть до Dashboard потім Updates або Plugins потім Installed Plugins. Якщо оновлення ProfilePress вказано у списку, встановіть його звідси.
  3. Якщо ви віддаєте перевагу командному рядку, WP-CLI робить те саме: wp plugin update wp-user-avatar (команда використовує назву теки, wp-user-avatar).
  4. Якщо там не з’являється оновлення, ви можете отримати останній випуск безпосередньо зі сторінки плагіна в каталозі WordPress.org, ProfilePress, і оновити через Plugins потім Add New Plugin потім Upload Plugin.
  5. Після оновлення підтвердьте новий номер версії (4.16.18 або новіша; поточний випуск: 4.16.19), дотримуючись наведених вище кроків, і перевірте, що ваші сторінки реєстрації та входу працюють нормально.

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

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

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

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

  • Перегляньте нещодавні реєстрації користувачів на предмет будь-якого облікового запису, створеного з несподівано високою роллю (наприклад Editor або Author, якого ви не впізнаєте), у звичайний спосіб, у який ви переглядали б активність сайту, і скоригуйте або видаліть усе, що виглядає недоречно.

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

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

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

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

У мене немає вебмайстра / я застряг

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

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

Контакти

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

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

Джерела

Офіційні повідомлення та відстеження

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