Повідомлення про безпеку Blog Floating Button
Якщо ви отримали від мене лист із посиланням на цю сторінку, то це тому, що ваш сайт,
вочевидь, використовує версію Blog Floating Button (плагін WordPress від
sunhaengsa / kuma-chan, який лежить у ваших файлах за шляхом
/wp-content/plugins/blog-floating-button/), яка потрапляє в діапазон, уражений відомою
проблемою безпеки. Ця сторінка пояснює, у чому полягає проблема, як перевірити, яка у вас
версія, як оновитися і що робити після цього.
Проблема має ідентифікатор CVE-2026-15383: це збережений міжсайтовий скриптинг без автентифікації у функції плагіна для відстеження кліків і звітності. Вона стосується кожного випуску до 1.4.21 і виправлена у 1.4.21, опублікованій 31 липня 2026 року. Якщо у вас працює будь-що старіше за 1.4.21, оновіть Blog Floating Button до 1.4.21 або новішої версії.
Один момент варто прояснити, бо він відрізняє цей випадок від деяких інших повідомлень, які я надсилав: безпечної старішої версії не існує. Це не вада, яку колись у ході розвитку плагіна внесли, а потім виправили. Відсутній захист був у кожному випуску, який плагін будь-коли публікував, аж до 1.4.20 включно, тож міркування «моя інсталяція надто стара, щоб її це стосувалося» тут не рятує. Єдині неуражені версії: 1.4.21 і новіші.
Це повідомлення також не залежить від того, як налаштований ваш сайт. Немає жодного параметра, який треба увімкнути, щоб уражений код був присутній.
Це вада плагіна, а не ядра WordPress. Повністю оновлений WordPress не захистить вас, якщо сам плагін Blog Floating Button має уражену версію.
Чи справжнє це повідомлення?
Так. Це добросовісне повідомлення в межах відповідального розкриття від незалежного дослідника безпеки. Я не прошу у вас грошей, паролів чи доступу до сайту і не намагався до нього проникнути, щось йому надіслати чи щось експлуатувати.
Я лише переглянув загальнодоступні файли, які ваш сайт віддає кожному відвідувачеві (так само, як публічною є ваша головна сторінка), і занотував номер версії, який публікує плагін. Я свідомо не надсилав нічого до функції відстеження в плагіні, і ця перевірка жодним чином не торкається ваших даних, вашої панелі адміністрування чи будь-якої закритої частини сайту (докладніше нижче, у розділі Що я робив і чого не робив).
Якщо ви хочете перевірити, хто я, контактні дані наведено внизу цієї сторінки та на сторінці Про мене.
Чому це важливо
Blog Floating Button додає до ваших записів і сторінок плаваючу кнопку та веде власний облік кліків і відвідувань, щоб ви могли переглянути їх пізніше у звіті аналітики доступу в панелі адміністрування WordPress. Обидві половини цієї функції тут задіяні.
В уражених версіях плагін приймає дані відстеження від кого завгодно, без потреби виконувати вхід, і зберігає частину того, що браузер відвідувача повідомив про себе, у власній таблиці бази даних рівно в тому вигляді, у якому воно надійшло, без очищення. Пізніше, коли екран звіту показує ці збережені рядки, він вписує їх у сторінку як є. Наслідок такий: текст, збережений анонімним відвідувачем, під час показу звіту може бути сприйнятий як код.
Питання про те, де саме цей код виконується, варто викласти точно, і це не те, на що натякає формулювання публічного бюлетеня. Екран звіту міститься в панелі адміністрування WordPress. Тобто код виконався б у браузері адміністратора, який виконав вхід і відкрив звіт доступу цього плагіна, а не в браузерах ваших звичайних відвідувачів. Якщо ви хвилювалися, що через це атакують людей, які переглядають ваш сайт, то ні, це не так, і я волію сказати про це прямо, ніж лишити вас із враженням, страшнішим за те, що дають факти.
Це також окреслює масштаб. Це справжня збережена вада без автентифікації, і виправити її варто без зволікань, але вона вужча за проблеми з перехопленням облікових записів і віддаленим виконанням коду, про які я пишу в інших місцях. Сама по собі вона не дає нікому облікового запису адміністратора і сама по собі не дає нікому контролю над вашим сервером. Щоб узагалі щось сталося, потрібно, аби адміністратор відкрив один конкретний екран.
Разом із тим самим випуском виходить і друге виправлення. У списку змін до 1.4.21 також зазначено, що там виправлено вразливість до SQL-ін’єкції в параметрах пошуку та фільтрації на екрані звіту. Наскільки мені відомо, для неї не опубліковано ані окремого бюлетеня, ані ідентифікатора CVE, тож я не буду приписувати їй ідентифікатор; я згадую про неї тому, що оновлення до 1.4.21 усуває і її. Той самий випуск додатково виправив проблему зі звітуванням про помилки, яка могла розкривати шляхи до файлів на сервері, а розробник провів перевірку екранування виводу та санітизації вхідних даних по всьому плагіну. Усе це означає одне: 1.4.21 є випуском безпеки, і його варто встановити, навіть якщо основна проблема здається вам не надто серйозною.
Я описую це на тому рівні, який потрібен власникові сайту, щоб діяти, і не далі. Я не публікую подробиць, які дозволили б комусь відтворити проблему, і прошу вас не пробувати це ні на власному сайті, ні на чужому. Прочитати номер своєї версії, як описано нижче, достатньо, щоб вирішити, що робити.
Якщо в моєму листі йшлося про цю проблему, це означає, що версія, про яку повідомляє ваш сайт, старіша за 1.4.21. Я не перевіряв, чи можна експлуатувати саме ваш сайт: усе, що я спостерігав, це версія.
Чи стосується це мене?
Усе зводиться до одного питання: яка версія Blog Floating Button у вас працює?
У панелі адміністрування WordPress (головне джерело):
- Увійдіть до консолі WordPress (зазвичай
вашдомен.ua/wp-admin). - Перейдіть до Плагіни, потім Встановлені плагіни.
- Знайдіть Blog Floating Button, запис, тека якого називається
blog-floating-button, і подивіться версію, показану під назвою.
З публічного маніфесту (без входу): відкрийте у браузері
вашдомен.ua/wp-content/plugins/blog-floating-button/readme.txt. Рядок Stable tag:
ближче до початку і є версією, про яку повідомляє ваша інсталяція; саме цей публічний файл я
й читав. Для цього плагіна він точно збігається з версією, показаною в панелі
адміністрування, у кожному опублікованому випуску.
Одна перевірка, яка для цього плагіна не працює, тож, будь ласка, не покладайтеся на неї.
Якщо ви звикли визначати версію плагіна за числом у ?ver=, доданим до скрипта чи стилю у
коді вашої сторінки, тут це введе вас в оману. Плагін не проставляє власну версію в цих
файлах, тож WordPress підставляє натомість версію ядра WordPress. Число на кшталт 6.8.5
чи 7.0.1 поряд із файлом цього плагіна є версією вашого WordPress, а не версією плагіна, і
порівнювати його з 1.4.21 не має сенсу. Користуйтеся екраном адміністрування або readme.txt.
Далі застосуйте правило, зважаючи на те, що версії порівнюють числами, а не за абеткою, тож 1.4.21 новіша за 1.4.9, хоча як текст виглядає меншою:
- Будь-що старіше за 1.4.21: уражена. Оновіть. Немає межі, нижче якої старіший випуск знову стає безпечним.
- 1.4.21 або новіша: уже виправлена.
Як оновитися
Плагін безкоштовний, досі публікується й активно підтримується, тож виправлення є звичайним оновленням. Найбезпечніший шлях: оновлюватися засобами самого WordPress, попередньо зробивши резервну копію.
- Зробіть резервну копію сайту (файлів і бази даних), перш ніж щось змінювати. Більшість хостинг-провайдерів пропонують резервне копіювання в один клік, або скористайтеся плагіном резервного копіювання для WordPress.
- У панелі адміністрування WordPress перейдіть до Консоль, потім Оновлення, або до Плагіни, потім Встановлені плагіни. Якщо оновлення Blog Floating Button є в переліку, встановіть його звідси.
- Якщо вам зручніше в командному рядку, WP-CLI робить те саме:
wp plugin update blog-floating-button. - Якщо оновлення не з’являється, ви можете взяти останній випуск безпосередньо зі сторінки плагіна в каталозі WordPress.org, Blog Floating Button, і оновитися через Плагіни, потім Додати плагін, потім Завантажити плагін.
- Після оновлення підтвердіть новий номер версії (1.4.21 або новіша) за кроками вище й перевірте, що ваша плаваюча кнопка досі відображається і працює як слід.
Поки ви там, варто пересвідчитися, що ядро WordPress та інші ваші плагіни оновлені, оскільки той самий принцип стосується їх усіх.
Після оновлення
Оновлення до 1.4.21 або новішої версії закриває проблему: екран звіту тепер очищає кожне значення перед показом, тож збережені дані відстеження показуються як текст, а не сприймаються як код.
Що вже могло статися, викладено обережно. Усе, що анонімний відвідувач зберіг до вашого оновлення, досі лежить у таблиці відстеження плагіна, але щось із цього могло спрацювати лише тоді, коли хтось із ваших адміністраторів справді відкривав звіт доступу плагіна, поки сайт працював на ураженій версії. Якщо ніхто цим екраном не користувався, нічого не мало нагоди виконатися. Оновлення зупиняє виконання надалі; воно не скасовує того, що вже виконалося.
Якщо ваші адміністратори таки регулярно користуються цим звітом або ви просто хочете бути ретельними, ось розумні й недорогі перевірки:
- Перегляньте облікові записи адміністраторів. У панелі адміністрування WordPress перейдіть до Користувачі, відфільтруйте за роллю Адміністратор і переконайтеся, що кожен запис у переліку належить людині, яка має мати такий доступ, і має ту адресу електронної пошти, яку повинна мати.
- Перегляньте нещодавні зміни користувачів, налаштувань і вмісту вашого сайту на предмет чогось незнайомого.
- Якщо щось виглядає не так, скидання паролів адміністраторів є розумним наступним кроком, а
перегенерація секретних ключів і «солей» WordPress у
wp-config.php(нові значення в одному кліку в офіційному генераторі секретних ключів) один раз завершує сеанси всіх користувачів.
Я не маю жодної інформації про те, чи справді щось сталося на вашому сайті, і не дивився. Це запобіжне повідомлення, а не звіт про інцидент.
Що я робив і чого не робив
Щоб бути цілком прозорим щодо перевірки, на якій ґрунтується мій лист: я читав лише публічні
файли, які ваш сайт і так віддає кожному відвідувачеві, а саме публічний файл readme.txt
плагіна і вашу головну сторінку. Я не звертався ні до панелі адміністрування WordPress,
ні до бази даних, ні до будь-якої закритої частини сайту, і я ніколи не відкривав екран звіту
вашого плагіна, чого й не зміг би зробити без облікового запису на вашому сайті.
Зокрема, я ніколи нічого не надсилав до функції відстеження в плагіні. Нічого не було надіслано, збережено, протестовано чи проексплуатовано. Тут це важить більше, ніж на більшості таких сторінок, бо функція відстеження є саме тим, чого стосується ця проблема, тож «я цього не торкався» і є всією різницею між розкриттям і вторгненням.
Я також свідомо не публікую подробиць, які допомогли б комусь скористатися цією проблемою. Опис вище зупиняється на рівні, потрібному власникові сайту, і я не даю посилань на код підтвердження концепції.
Це спостереження за версією: ваш сайт повідомляє версію, старішу за 1.4.21. Сайт із цього діапазону вже може бути захищений іншими засобами, наприклад брандмауером вебзастосунків або перенесеним виправленням. Це повідомлення не є твердженням про те, що ваш сайт можна було експлуатувати на момент моєї перевірки.
У мене немає вебмайстра / я не даю ради
Якщо сайтом опікуєтеся не ви, перешліть, будь ласка, цю сторінку тому, хто ним опікується (вашому розробнику, агенції або хостинг-провайдеру). Кроки вище він упізнає одразу.
Якщо ви ведете сайт самі й застрягли, я радо підкажу напрямок безкоштовно. Напишіть за контактами нижче.
Контакти
Evan Harris, дослідник безпеки
- Ел. пошта: security@mail.mcpsec.dev
- X: @Evan__Harris
- GitHub: eharris128
- LinkedIn: Evan Harris
Я звертаюся з такими питаннями винятково для того, щоб допомогти операторам захистити свої сайти. Якщо ви волієте більше не отримувати від мене листів, просто скажіть, і я це врахую.
Джерела
Офіційні бюлетені та відстеження
Розробник / плагін