
StyleSmuggler (CVE-2026-75650) — набор инструментов IOC для Magento Open Source и Adobe Commerce. Обнаружение скомпрометированных магазинов, Rust-имплантов, PHP-веб-шеллов, артефактов персистентности и известных индикаторов компрометации.
Magento zero-day · Adobe Commerce zero-day · CVE-2026-75650 · APSB26-146 · VULN-39341 · unauthenticated RCE · Magento malware · Magento backdoor removal · Magento 2.4.9 vulnerability · Rust implant · GraphQL styles injection · PHP web shell
Индикаторы компрометации сообщества, сканер компрометации и рекомендации по смягчению последствий/устранению уязвимости для StyleSmuggler (CVE-2026-75650) — неаутентифицированной RCE в Magento Open Source / Adobe Commerce, раскрытой Sansec 5 сентября 2026 года, с подтверждённой эксплуатацией в дикой природе с 4 сентября 2026 года. Adobe опубликовала официальное исправление, APSB26-146, 7 сентября 2026 года. Если вы искали «StyleSmuggler IOC», «CVE-2026-75650», «APSB26-146», «VULN-39341», «Magento fc-cache malware», «Magento chronyd backdoor», «gvfsd-user Magento» или «Magento GraphQL styles RCE», — это тот самый репозиторий.
Это только оборонительный инструментарий. Он содержит сигнатуры обнаружения, сканер компрометации и правила усиления/блокировки, созданные на основе опубликованных отчётов об инцидентах из первых рук. Он не содержит эксплойт-код, proof-of-concept триггер или что-либо, что генерирует атакующую нагрузку. Если вы ищете это — вы не в том репозитории: идите патчить и охотиться.
| Уязвимость | StyleSmuggler (название Sansec) — CVE-2026-75650 |
| Вендор | Adobe (Magento Open Source, Adobe Commerce) |
| CVE | CVE-2026-75650, присвоен 2026-09-07 |
| Бюллетень Adobe | APSB26-146, опубликован 2026-09-07 20:20 UTC, Priority 1 (наивысший) |
| Также требуется | APSB26-138 — регулярное обновление Commerce от Adobe за сентябрь 2026 года, выпущено 2026-09-08. Adobe заявляет, что VULN-39341 должен применяться в дополнение к нему, а не вместо него. |
| CVSS | 10.0 (3.1 и 4.0) — Critical |
| CWE | CWE-1336, Improper Neutralization of Special Elements Used in a Template Engine |
| Официальный патч | Выпущен. Горячий фикс VULN-39341. Покрытие не универсально — см. таблицу ниже. |
| Требуется аутентификация | Нет — неаутентифицированная |
| Затронутые версии | Воспроизведено Sansec на чистых Magento Open Source 2.4.7, 2.4.8, 2.4.9; первая подтверждённая жертва работала на 2.4.6-p15 с полным набором предыдущих патчей |
| Эксплуатация | Активна с 2026-09-04 22:20 UTC; продолжалась до выпуска патча; второй, несвязанный атакующий присоединился 2026-09-07 |
| Известные варианты Rust-импланта | [kworker/u:8:0] (4 сент.) → fc-cache v2.1.4 (6 сент.) → chronyd v2.1.5 (7 сент.) — тот же оператор, тот же ID агента, версии инкрементируются |
| Второй, несвязанный атакующий | PHP web shell в pub/media/catalog/product/cache/, которому предшествовал DNS-экфильтрирующий разведывательный зонд — независим от Rust-импланта, подтверждён 2026-09-07 |
| Известные векторы доставки | Параметр GraphQL styles[]; недопустимый код магазина, записываемый в var/log/system.log; файл, загружаемый через пользовательские опции клиента Magento; инъекция заголовка Store: у несвязанного второго атакующего |
| Воздействие | Удалённое выполнение кода → постоянный бэкдор на Rust, независимый PHP web shell, сбор сессий Redis, раскрытие учётных данных/секретов через app/etc/env.php |
| Продукт | Покрыт APSB26-146 | Нет официального исправления |
|---|---|---|
| Adobe Commerce (вкл. B2B, Cloud) | 2.4.4 – 2.4.9 | ниже 2.4.4 |
| Adobe Commerce B2B | 1.3.3 – 1.5.3 | ниже 1.3.3 |
| Magento Open Source | только 2.4.6 – 2.4.9 | 2.4.5 и ниже |
Если вы используете более старую, неподдерживаемую версию, Adobe не выпустит для вас
исправление, даже если вы так же уязвимы. См. docs/PATCHING.md
для ваших вариантов.
Эта информация быстро меняется. Перепроверяйте по первоисточникам перед
действиями: рекомендация Sansec и
бюллетень Adobe.
См. docs/TIMELINE.md для журнала событий и указывайте источники,
когда обновляете что-либо здесь.
Собственный параметр GraphQL styles в Magento и его сканирование файлов на основе
внедрения зависимостей используются как двухэтапный, файловый примитив отложенного
выполнения, а не как единая очевидная точка инъекции:
var/log/system.log через недопустимый код магазина,
который Magento записывает дословно, или var/report/<hash>), протаскиваемые через
параметр GraphQL styles[], мутированный заголовок запроса или (для второго,
несвязанного атакующего ниже) заголовок Store:.getProcessedTemplate в Magento)
проходит по пути кода, который позволяет собственному DI/код-сканеру Magento
выполнить include() отравленного файла, запуская PHP атакующего. Вам не нужно
открывать письмо — рендеринга на стороне сервера достаточно — и цепочка может
сработать, даже если доставка почты не удалась.Простой признак раннего предупреждения без инструментов: искажённое письмо
«Payment Transaction Failed Reminder» в вашем почтовом ящике с сырыми,
неотрендеренными тегами {{var ...}} и адресом клиента, заканчивающимся на .invalid.
Это часто первый видимый признак, до того как кто-либо проверит журнал.
Обновления Sansec подтвердили второй, независимый путь эксплуатации для той же кампании с Rust-имплантом: даже магазины, перенёсшие хранение сессий с Redis на базу данных, всё равно были скомпрометированы — вторая попытка того же оператора увенчалась успехом через несколько секунд, используя файл, загруженный через функцию пользовательских опций клиента Magento. Перенос хранения сессий сам по себе не является исправлением.
Отдельно, 7 сентября, Sansec обнаружил совершенно несвязанного атакующего,
использующего ту же самую точку входа StyleSmuggler для гораздо более простой
нагрузки: PHP web shell, размещённый в собственном кеше изображений продуктов Magento
(pub/media/catalog/product/cache/ss_<10hex>/sync_<10hex>.php), которому предшествовал
разведывательный зонд, скрывающий свою нагрузку в HTTP-заголовке Store: и
экфильтрирующий результаты через DNS, а не через HTTP-ответ. По словам Sansec, это
«готовый инструментарий» — не устойчивая кампания — но это означает, что один уязвимый
хост может нести два несвязанных вторжения через одну уязвимость. Очистка
Rust-импланта не означает, что ваш магазин чист.
Сам Rust-имплант также эволюционировал: за оригинальной сборкой, маскирующейся под
[kworker/u:8:0] (4 сент.), последовала сборка v2.1.4, маскирующаяся под fc-cache
(6 сент.), которая передаёт сигналы, замаскированные под NTP-трафик, а затем
повторное развёртывание v2.1.5, маскирующееся под chronyd (7 сент.), того же
импланта, с тем же ID агента — доказательство того, что атакующий активно
итерирует, чтобы обойти любые публикуемые вами обнаружения. Sansec заявляет, что пока
не видел доказательств того, что этот имплант был вооружён за пределами
постоянства/разведки — не воспринимайте это как успокоение, учитывая работающий
web shell несвязанного атакующего на том же пути доступа.
См. docs/FAQ.md для быстрых ответов,
docs/VULNERABILITY.md для полного технического описания и
источников, docs/PATCHING.md для применения официального
исправления Adobe и docs/INCIDENT_RESPONSE.md для того,
что делать, если сканер что-то найдёт.
1. Установите патч, если ваша версия покрыта:
# См. docs/PATCHING.md для полного процесса — это не однострочная команда, требуются
# учётные данные репозитория Adobe и инструменты управления патчами вашего проекта.
2. Просканируйте на предмет существующей компрометации независимо от статуса патча — патчинг останавливает новую эксплуатацию, но не очищает существующий бэкдор или web shell:
git clone https://github.com/jithinkrishnanrs/stylesmuggler-ioc-toolkit.git
cd stylesmuggler-ioc-toolkit
sudo bash scripts/stylesmuggler_scan.sh --magento-root /var/www/html
Или версия на Python для структурированного (JSON) вывода, например, для передачи в SIEM:
sudo python3 scripts/stylesmuggler_scan.py --magento-root /var/www/html --json report.json
Оба скрипта по умолчанию только для чтения — они обнаруживают и сообщают, но не
убивают процессы и не удаляют файлы, если вы не передадите --remediate, потому что
преждевременная очистка уничтожает криминалистические доказательства (см.
docs/INCIDENT_RESPONSE.md).
[kworker/u:8:0]: ~/.local/share/.gvfsd/gvfsd-user, его файлы блокировок, /tmp/.kw_*, /tmp/.gvfsd_*fc-cache v2.1.4 (6 сент.): ~/.cache/fontconfig/fc-cache, /tmp/.fc_<8hex>.lockchronyd v2.1.5 (7 сент.): /tmp/.chrony-<8hex>/chronydgvfsd-user, дважды в час (13,43 * * * *)
для fc-cache[kworker/u:8:0], fc-cache или chronyd,
который не принадлежит root (или, для fc-cache/chronyd, не совпадает с реальным
системным бинарником)/proc/<pid>/exe (они могут
отличаться — наблюдалось, что имплант обновляет себя в памяти)var/log/system.log, var/report/) на
предмет внедрённого PHP, двух известных форм триггерных заголовков (X-TRACE-<10hex>
и X-<12hex>), а также маркеров кампании второго, несвязанного атакующего
(ss5_/ss6_<hex>) и DNS-canary домена (oast.site)MG<20hex>::...::/MG<20hex>),
оставленные в журналах, когда нагрузка действительно выполниласьpub/media — которых никогда не должно быть в правильно
настроенном магазине Magento — соответствующие паттерну сброса web shell вторым
атакующимfc-cache/chronyd, замаскированные под NTP, на
ntp.timesync.to:123/UDP (и запасные варианты), а также её обычные HTTP-вызовы
к публичным сервисам определения IP127.0.0.1:6379 с нулевым исходящим C2-трафиком — тихая сеть
не означает чистую) — и обратите внимание, что перенос сессий с Redis сам по себе
не закрывает второй вектор эксплуатации через загрузку файловПолный список индикаторов с источниками: iocs/.
docs/PATCHING.md для идентификаторов,
где его получить и как применить. Теперь это приоритет, опережающий временные меры
ниже.mitigations/:
styles[] в GraphQL
(nginx /
Apache)pub/media/pub/static
(nginx /
Apache) — точечная защита
от техники web shell второго, несвязанного атакующегоmitigations/README.md для ограничений области
действия — ни одна из этих мер не закрывает вектор пользовательских опций
клиента или доставку через заголовок Store: второго атакующего.app/etc/env.php. Как минимум,
после сдерживания: очистите хранилище сессий (Redis и/или БД), ротируйте
crypt/key Magento, все пароли администраторов (и аннулируйте существующие
административные сессии), пароль базы данных, все API-ключи платёжных провайдеров
и другие интеграционные учётные данные в env.php, а также любые SSH/деплой-ключи,
которые мог прочитать пользователь сайта. Также проверьте таблицу admin_user на
наличие подставного аккаунта и pub/media/ / pub/static/ / каталоги тем на
предмет размещённых web shell — как Rust-импланта, так и несвязанного второго
атакующего — прежде чем считать магазин чистым. Полный упорядоченный список шагов:
docs/INCIDENT_RESPONSE.md.docs/ Описание уязвимости, хронология, FAQ, руководство по патчингу, IR playbook
iocs/ Хэши, IP-адреса, домены, пути к файлам, YARA, правила Suricata/IDS
scripts/ stylesmuggler_scan.sh / .py, вспомогательный скрипт очистки crontab
mitigations/ Правила nginx / Apache / ModSecurity / fail2ban
CVE-2026-75650, APSB26-146, VULN-39341, Magento zero-day 2026, Adobe Commerce zero-day, StyleSmuggler patch, Magento GraphQL vulnerability, Magento styles parameter RCE, gvfsd-user malware, fc-cache Magento backdoor, chronyd Magento malware, Magento kworker process malware, Magento Redis session hijack, Magento unauthenticated RCE September 2026, Magento 2.4.9 exploit, Adobe Commerce backdoor removal, Magento pub/media web shell, eComscan StyleSmuggler, Sansec Shield StyleSmuggler.
Каждый индикатор в этом репозитории восходит к цитируемому, опубликованному источнику —
в первую очередь к рекомендации Sansec (обновлявшейся как минимум до 2026-09-07
20:50 UTC), бюллетеню Adobe APSB26-146 и отчётам сообщества об инцидентах от
реагирующих, которые обрабатывали живые заражения. См. цитату внизу каждого файла
в iocs/.
Не рассматривайте что-либо здесь как исчерпывающее или окончательное. IOC (триггерные заголовки, строки user-agent, маскировки импланта и теперь маркеры кампании второго атакующего) уже менялись несколько раз в течение дней после раскрытия; ожидайте, что они изменятся снова. Сопоставляйте формы и поведение, а не только буквальные строки, везде, где скрипты вам это позволяют.
Видели вариант, новый хэш, новый адрес источника или ложное срабатывание? Откройте issue или PR с тем, что вы наблюдали и как вы это наблюдали. Пожалуйста:
MIT для кода в этом репозитории (см. LICENSE). Данные индикаторов
предоставляются «как есть» для оборонительного использования, с указанием источников
по всему тексту.
Это неофициальный, созданный сообществом оборонительный инструментарий, а не продукт Adobe или Sansec, и он не аффилирован ни с одним из них. Он предоставляется без гарантий. Официальный патч Adobe (APSB26-146) выпущен, но покрытие ограничено конкретными версиями продуктов — проверяйте бюллетень безопасности Adobe напрямую, прежде чем предполагать, что ваша установка покрыта или исправлена.