Изтекъл ключ на Cloudflare удари 100 000 сайта

Маркетинг платформата Brevo (бившата Sendinblue) публикува на 17 септември подробен post-mortem, в който признава, че един-единствен API ключ за Cloudflare, зашит в кода на приложението ѝ, е дал на атакуващите контрол върху съдържанието, което компанията сервира на собствените си домейни и на скриптовете, вградени в сайтовете на клиентите ѝ. Според BleepingComputer и изследователите от Sansec засегнатите сайтове са над 100 000, а инжектираният код е сервирал ClickFix примамки и бекдор за WordPress.
Един ключ, пълни права
Ключът е бил дълготраен и с пълни права върху акаунта — тоест позволявал е създаване на Workers, маршрути и DNS записи във всички зони на Brevo. Именно затова атаката не е изисквала проникване в самата инфраструктура на компанията: всичко се е случило на ръба на CDN мрежата, докато сървърите на Brevo са сервирали напълно чисто съдържание.
Злонамереният Worker е правел и нещо допълнително — премахвал е header-и за сигурност, включително Content-Security-Policy. Точно това е позволило подмяната да остане незабелязана достатъчно дълго. Brevo допуска, че ключът е изтекъл още в края на август, но не го потвърждава категорично; Sansec отбелязва, че SSL сертификатът за cdn.sendibt1.com е издаден на 25 август.
Хронологията на 14 септември
Всички часове са в UTC, по данни на самата Brevo:
- 14:23 — атакуващият създава първия си хост в домейн на Brevo
- 14:28 — Worker-ът е качен и тестван върху домейни с нисък трафик
- 14:42 — маршрутът е насочен към brevo.com
- 15:01 — започва реалното въздействие върху трафика
- 16:07 — скриптът е обновен, за да удари вградените JavaScript файлове и sibforms.com
- 19:33 — екипът по сигурността отваря инцидент
- 20:30 — Worker-ът е премахнат, ключът — отменен, инжекциите спират
Общо около пет часа и половина. Засегнати са страници на brevo.com, sendinblue.com, поддомейните login, account, my и onboarding, както и sibforms.com. От вградените компоненти са пипнати скриптът за формите, widget-ът Conversations и SDK loader-ът — тоест точно нещата, които клиентите слагат на своите сайтове.
Две различни примамки
Кодът е разпознавал кой е от другата страна и е действал по два сценария.
Обикновените посетители са виждали фалшива страница за проверка от типа „потвърдете, че не сте робот“, следвана от ClickFix инструкции — класическата схема, при която жертвата сама копира команда и я изпълнява на Windows. Този подход е популярен именно защото заобикаля почти всяка защита на браузъра: потребителят изпълнява командата доброволно.
Вторият сценарий е за WordPress. Ако скриптът засечеше влязъл администратор, той се опитваше да качи плъгин от cdn10.sendibt1.com/p/wm.zip през /wp-admin/update.php?action=upload-plugin. Плъгинът се представя за „Web Media Optimizer“, инсталира се в директорията за must-use плъгини (за да не може да бъде деактивиран от админ панела), звъни на glegchner.com/ads.php и носи зашити в кода данни за администраторски достъп.
Снимка: BleepingComputer
Индикаторите за компрометиране включват следните хостове, които от 15 септември вече не се резолвят:
cdn.sendibt1.com
cdn2-11.sendibt1.com
cdn10.sendibt1.com
glegchner.com/ads.php
Мащабът
Sansec отчита 2 549 доклада за нарушения на CSP от 12 наблюдавани сайта и посочва сред засегнатите имена като eBay, Louis Vuitton, Michelin и Amnesty International. Цифрата „над 100 000“ идва от броя сайтове с вграден компонент на Brevo, а не от броя доказано заразени машини — реално пострадалите зависят от това колко посетители са изпълнили командата.
Brevo уточнява, че app.brevo.com, API-то, изпращането на имейли и клиентските данни не са засегнати. Компанията е премахнала Worker-а и маршрутите, отменила е ключа и производните от него креденшъли, изчистила е кешовете на ръба и е извадила зашития ключ от кода. Предстоят HashiCorp Vault за управление на тайните, автоматични известия при промени в Cloudflare одита и проверка на целостта на версионираните файлове.
Контекст
Това е вторият инцидент за Brevo за седмица. На 10 септември компанията обяви пробив през SSO, който първоначално засягаше шепа акаунти, но по-късните оценки говорят за над сто клиентски профила — сред жертвите беше и Trezor, чиито потребители получиха стотици хиляди фишинг имейла през Brevo.
Изводът е познат, но тук е показан в чист вид: в supply-chain атаките пробивът рядко е при вас. Достатъчно е една чужда тайна да е на грешното място в чужд код — същият модел видяхме и при Plugin4Shell в кодиращите AI агенти. Ако поддържате сайт с вграден скрипт на Brevo, проверете директорията mu-plugins, потребителите с администраторски права и датите на файловете около 14 септември.
Харесва ви? Отбележете ни и ще ни виждате по-нагоре в Google.
Предпочитан източник в Google