
StyleSmuggler (CVE-2026-75650) kit de IOC para Magento Open Source e Adobe Commerce. Detecte lojas comprometidas, implantes Rust, web shells PHP, artefatos de persistência e indicadores de comprometimento conhecidos.
Zero-day Magento · Zero-day Adobe Commerce · CVE-2026-75650 · APSB26-146 · VULN-39341 · RCE não autenticado · malware Magento · remoção de backdoor Magento · vulnerabilidade Magento 2.4.9 · implante Rust · injeção de estilos GraphQL · web shell PHP
Indicadores de comprometimento comunitários, um scanner de comprometimento e orientações de mitigação/correção para o StyleSmuggler (CVE-2026-75650) — o RCE não autenticado do Magento Open Source / Adobe Commerce divulgado pela Sansec em 5 de setembro de 2026, com exploração ativa confirmada desde 4 de setembro de 2026. A Adobe publicou uma correção oficial, APSB26-146, em 7 de setembro de 2026. Se você pesquisou por "StyleSmuggler IOC", "CVE-2026-75650", "APSB26-146", "VULN-39341", "malware Magento fc-cache", "backdoor Magento chronyd", "gvfsd-user Magento" ou "RCE GraphQL styles Magento", este é o repositório que você procura.
Este é apenas um kit defensivo. Ele contém assinaturas de detecção, um scanner de comprometimento e regras de endurecimento/bloqueio construídas a partir de relatórios de incidentes publicados em primeira mão. Ele não contém código de exploração, um gatilho de prova de conceito ou qualquer coisa que gere o payload do ataque. Se você procura isso, está no repositório errado — vá corrigir e caçar em vez disso.
| Vulnerabilidade | StyleSmuggler (nome da Sansec) — CVE-2026-75650 |
| Fornecedor | Adobe (Magento Open Source, Adobe Commerce) |
| CVE | CVE-2026-75650, atribuído em 07/09/2026 |
| Boletim Adobe | APSB26-146, publicado em 07/09/2026 20:20 UTC, Prioridade 1 (mais alta) |
| Também necessário | APSB26-138 — atualização regular de setembro de 2026 da Adobe Commerce, lançada em 08/09/2026. A Adobe afirma que o VULN-39341 deve ser aplicado em adição a esta, não em seu lugar. |
| CVSS | 10.0 (3.1 e 4.0) — Crítico |
| CWE | CWE-1336, Neutralização inadequada de elementos especiais usados em um mecanismo de template |
| Correção oficial | Enviada. Hotfix VULN-39341. A cobertura não é universal — veja a tabela abaixo. |
| Autenticação necessária | Nenhuma — não autenticado |
| Versões afetadas | Reproduzido pela Sansec em Magento Open Source 2.4.7, 2.4.8, 2.4.9 limpos; a primeira vítima confirmada executava 2.4.6-p15 totalmente corrigida (com patches anteriores) |
| Exploração | Ativa desde 04/09/2026 22:20 UTC; continuou até o lançamento do patch; um segundo atacante, não relacionado, juntou-se em 07/09/2026 |
| Variantes conhecidas do implante Rust | [kworker/u:8:0] (4 de set.) → fc-cache v2.1.4 (6 de set.) → chronyd v2.1.5 (7 de set.) — mesmo operador, mesmo ID de agente, versões incrementando |
| Segundo atacante, não relacionado | Web shell PHP em pub/media/catalog/product/cache/, precedido por uma sonda de reconhecimento com exfiltração via DNS — independente do implante Rust, confirmado em 07/09/2026 |
| Vetores de entrega conhecidos | Parâmetro styles[] do GraphQL; código de loja inválido registrado em var/log/system.log; arquivo enviado via opções personalizadas do cliente do Magento; injeção no cabeçalho Store: do segundo atacante não relacionado |
| Impacto | Execução remota de código → backdoor persistente baseado em Rust, web shell PHP independente, coleta de sessões Redis, exposição de credenciais/segredos via app/etc/env.php |
| Produto | Coberto pelo APSB26-146 | Sem correção oficial |
|---|---|---|
| Adobe Commerce (incl. B2B, Cloud) | 2.4.4 – 2.4.9 | abaixo de 2.4.4 |
| Adobe Commerce B2B | 1.3.3 – 1.5.3 | abaixo de 1.3.3 |
| Magento Open Source | apenas 2.4.6 – 2.4.9 | 2.4.5 e abaixo |
Se você está em uma versão mais antiga e sem suporte, a Adobe não está enviando uma correção para você, mesmo que você seja igualmente explorável. Veja docs/PATCHING.md para suas opções.
Esta informação muda rapidamente. Verifique cruzadamente as fontes primárias antes de agir: o aviso da Sansec e o boletim da Adobe. Veja docs/TIMELINE.md para um registro contínuo e cite suas fontes ao atualizar qualquer coisa aqui.
O próprio parâmetro styles do GraphQL do Magento e seu scanner de arquivos baseado em injeção de dependência são abusados como uma primitiva de execução adiada baseada em arquivo em dois estágios, em vez de um único ponto de injeção óbvio:
var/log/system.log via um código de loja inválido que o Magento registra literalmente, ou var/report/<hash>), contrabandeados através do parâmetro styles[] do GraphQL, um cabeçalho de requisição mutado ou (para o segundo atacante, não relacionado, abaixo) o cabeçalho Store:.getProcessedTemplate do Magento) percorre um caminho de código que permite que o próprio scanner DI/código do Magento execute include() no arquivo envenenado, executando o PHP do atacante. Você não precisa abrir o e-mail — renderizá-lo no lado do servidor é suficiente — e a cadeia pode disparar mesmo quando a entrega do e-mail falha.Um sinal de alerta precoce fácil, sem ferramentas: um e-mail distorcido de "Payment Transaction Failed Reminder" em sua caixa de entrada com tags {{var ...}} brutas e não renderizadas e um endereço de cliente terminando em .invalid. Este é frequentemente o primeiro sinal visível, antes que alguém verifique um log.
As atualizações da Sansec confirmaram um segundo caminho de exploração independente para a mesma campanha de implante Rust: mesmo lojas que moveram o armazenamento de sessões do Redis para o banco de dados ainda foram comprometidas — a segunda tentativa do mesmo operador teve sucesso segundos depois usando um arquivo enviado através do recurso de opções personalizadas do cliente do Magento. Mover o armazenamento de sessões não é uma correção por si só.
Separadamente, em 7 de setembro, a Sansec encontrou um atacante completamente não relacionado usando exatamente o mesmo ponto de entrada do StyleSmuggler para um payload muito mais simples: um web shell PHP depositado no cache de imagens de produtos do próprio Magento (pub/media/catalog/product/cache/ss_<10hex>/sync_<10hex>.php), precedido por uma sonda de reconhecimento que esconde seu payload no cabeçalho HTTP Store: e exfiltra suas descobertas via DNS em vez de uma resposta HTTP. Isso é "ferramenta pronta para uso", segundo a Sansec — não uma campanha sustentada — mas significa que um único host vulnerável pode carregar duas intrusões não relacionadas através de uma única falha. Limpar o implante Rust não significa que sua loja está limpa.
O próprio implante Rust também evoluiu: a construção original disfarçada de [kworker/u:8:0] (4 de set.) foi seguida por uma construção disfarçada de fc-cache v2.1.4 (6 de set.) que faz beaconing disfarçado de tráfego NTP, e depois um reimplante disfarçado de chronyd v2.1.5 (7 de set.) do mesmo implante, mesmo ID de agente — evidência de que o atacante está iterando ativamente para evadir qualquer detecção que você publique. A Sansec afirma que ainda não viu evidências de que este implante foi armado além de persistência/reconhecimento — não leia isso como garantia, dado o web shell funcional do atacante não relacionado no mesmo caminho de acesso.
Veja docs/FAQ.md para respostas rápidas, docs/VULNERABILITY.md para o relatório técnico completo e fontes, docs/PATCHING.md para aplicar a correção oficial da Adobe e docs/INCIDENT_RESPONSE.md para o que fazer se o scanner encontrar algo.
1. Corrija, se sua versão estiver coberta:
# Veja docs/PATCHING.md para o processo completo — isto não é um comando único, requer
# credenciais do repositório Adobe e as ferramentas de gerenciamento de patches do seu projeto.
2. Verifique comprometimento existente independentemente do status do patch — corrigir interrompe nova exploração, não limpa um backdoor ou web shell existente:
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
Ou a versão Python para saída estruturada (JSON), por exemplo, para alimentar um SIEM:
sudo python3 scripts/stylesmuggler_scan.py --magento-root /var/www/html --json report.json
Ambos os scripts são somente leitura por padrão — eles detectam e relatam, não matam processos nem excluem arquivos a menos que você passe --remediate, porque a limpeza prematura destrói evidências forenses (veja docs/INCIDENT_RESPONSE.md).
[kworker/u:8:0]: ~/.local/share/.gvfsd/gvfsd-user, seus arquivos de bloqueio, /tmp/.kw_*, /tmp/.gvfsd_*fc-cache v2.1.4 (6 de set.): ~/.cache/fontconfig/fc-cache, /tmp/.fc_<8hex>.lockchronyd v2.1.5 (7 de set.): /tmp/.chrony-<8hex>/chronydgvfsd-user, duas vezes por hora (13,43 * * * *) para fc-cache[kworker/u:8:0], fc-cache ou chronyd que não é propriedade de root (ou, para fc-cache/chronyd, não corresponde ao binário real do sistema)/proc/<pid>/exe ao vivo (os dois podem diferir — o implante foi observado se atualizando em memória)var/log/system.log, var/report/) para PHP injetado, as duas formas conhecidas de cabeçalho de gatilho (X-TRACE-<10hex> e X-<12hex>) e os marcadores de campanha do segundo atacante, não relacionado (ss5_/ss6_<hex>) e o domínio canário DNS (oast.site)MG<20hex>::...::/MG<20hex>) deixados nos logs quando o payload realmente executoupub/media — que nunca devem conter PHP executável em uma loja Magento configurada corretamente — correspondendo ao padrão de entrega do web shell do segundo atacantefc-cache/chronyd para ntp.timesync.to:123/UDP (e alternativas), e suas chamadas HTTP simples para serviços públicos de consulta de IP127.0.0.1:6379, com zero tráfego C2 de saída — uma rede silenciosa não é uma rede limpa) — e note que mover sessões do Redis sozinho não fecha o segundo vetor de exploração baseado em upload de arquivoLista completa de indicadores com fontes: iocs/.
docs/PATCHING.md para identificadores, onde obtê-lo e como aplicá-lo. Esta é agora a prioridade, à frente das mitigações provisórias abaixo.mitigations/:
styles[] do GraphQL (nginx / Apache)pub/media/pub/static (nginx / Apache) — defesa direcionada contra a técnica de web shell do segundo atacante, não relacionadomitigations/README.md para limitações de escopo — nenhuma destas fecha o vetor de opções personalizadas do cliente ou a entrega pelo cabeçalho Store: do segundo atacante.app/etc/env.php. No mínimo, após a contenção: limpe o armazenamento de sessões (Redis e/ou banco de dados), rotacione a crypt/key do Magento, todas as senhas de administrador (e invalide as sessões de administrador existentes), a senha do banco de dados, cada chave de API do provedor de pagamento e outra credencial de integração em env.php, e quaisquer chaves SSH/implantação que o usuário do site pudesse ler. Verifique também a tabela admin_user para uma conta rogue e pub/media/ / pub/static/ / diretórios de tema para web shells depositados — tanto do implante Rust quanto do segundo atacante, não relacionado — antes de considerar uma loja limpa. Passos ordenados completos: docs/INCIDENT_RESPONSE.md.docs/ Relatório da vulnerabilidade, cronologia, FAQ, guia de correção, manual de resposta a incidentes
iocs/ Hashes, IPs, domínios, caminhos de arquivo, YARA, regras Suricata/IDS
scripts/ stylesmuggler_scan.sh / .py, auxiliar de limpeza do crontab
mitigations/ regras nginx / Apache / ModSecurity / fail2ban
CVE-2026-75650, APSB26-146, VULN-39341, zero-day Magento 2026, zero-day Adobe Commerce, patch StyleSmuggler, vulnerabilidade GraphQL Magento, RCE parâmetro styles Magento, malware gvfsd-user, backdoor Magento fc-cache, malware Magento chronyd, malware processo kworker Magento, sequestro de sessão Redis Magento, RCE não autenticado Magento setembro 2026, exploit Magento 2.4.9, remoção de backdoor Adobe Commerce, web shell Magento pub/media, eComscan StyleSmuggler, Sansec Shield StyleSmuggler.
Cada indicador neste repositório remonta a uma fonte publicada e citada — principalmente o aviso da Sansec (atualizado pelo menos até 07/09/2026 20:50 UTC), o boletim APSB26-146 da Adobe e relatórios comunitários de resposta a incidentes de respondedores que lidaram com infecções ao vivo. Veja a citação no rodapé de cada arquivo em iocs/.
Não trate nada aqui como exaustivo ou final. IOCs (cabeçalhos de gatilho, strings de user-agent, disfarces de implante e agora os marcadores de campanha de um segundo atacante) já mudaram várias vezes dentro de dias da divulgação; espere que mudem novamente. Corresponda formas e comportamentos, não apenas strings literais, onde quer que os scripts permitam.
Viu uma variante, um novo hash, um novo endereço de origem ou um falso positivo? Abra uma issue ou PR com o que você observou e como observou. Por favor:
MIT para o código neste repositório (veja LICENSE). Os dados de indicadores são fornecidos "como estão" para uso defensivo, com fontes anotadas ao longo do texto.
Esta é uma ferramenta defensiva não oficial, construída pela comunidade, não um produto Adobe ou Sansec, e não é afiliada a nenhum dos dois. É fornecida sem garantia. O patch oficial da Adobe (APSB26-146) foi lançado, mas a cobertura é limitada a versões específicas de produto — verifique o boletim de segurança da Adobe diretamente antes de presumir que sua instalação está coberta ou corrigida.