StyleSmuggler (CVE-2026-75650) kit de IOC para Magento Open Source y Adobe Commerce. Detecta tiendas comprometidas, implantes en Rust, webshells en PHP, artefactos de persistencia e indicadores de compromiso conocidos.
Día cero de Magento · Día cero de Adobe Commerce · CVE-2026-75650 · APSB26-146 · VULN-39341 · RCE no autenticado · malware de Magento · eliminación de backdoor de Magento · vulnerabilidad de Magento 2.4.9 · implante Rust · inyección de estilos GraphQL · web shell PHP
Indicadores de compromiso comunitarios, un escáner de compromiso y orientación de mitigación/parcheo para StyleSmuggler (CVE-2026-75650) — el RCE no autenticado de Magento Open Source / Adobe Commerce divulgado por Sansec el 5 de septiembre de 2026, con explotación activa confirmada desde el 4 de septiembre de 2026. Adobe publicó un parche oficial, APSB26-146, el 7 de septiembre de 2026. Si buscaste "StyleSmuggler IOC", "CVE-2026-75650", "APSB26-146", "VULN-39341", "malware Magento fc-cache", "backdoor Magento chronyd", "gvfsd-user Magento" o "RCE GraphQL styles de Magento", este es el repositorio que buscas.
Este es solo un kit defensivo. Contiene firmas de detección, un escáner de compromiso y reglas de endurecimiento/bloqueo construidas a partir de informes de incidentes publicados de primera mano. No contiene código de explotación, un desencadenante de prueba de concepto ni nada que genere la carga útil del ataque. Si buscas eso, estás en el repositorio equivocado — ve a parchear y a cazar en su lugar.
| Vulnerabilidad | StyleSmuggler (nombre de Sansec) — CVE-2026-75650 |
| Proveedor | Adobe (Magento Open Source, Adobe Commerce) |
| CVE | CVE-2026-75650, asignado el 2026-09-07 |
| Boletín de Adobe | APSB26-146, publicado el 2026-09-07 20:20 UTC, Prioridad 1 (la más alta) |
| También requerido | APSB26-138 — la actualización regular de Commerce de Adobe de septiembre de 2026, publicada el 2026-09-08. Adobe indica que VULN-39341 debe aplicarse además de esta, no en su lugar. |
| CVSS | 10.0 (3.1 y 4.0) — Crítico |
| CWE | CWE-1336, Neutralización incorrecta de elementos especiales utilizados en un motor de plantillas |
| Parche oficial | Publicado. Hotfix VULN-39341. La cobertura no es universal — consulta la tabla a continuación. |
| Autenticación requerida | Ninguna — no autenticado |
| Versiones afectadas | Reproducido por Sansec en Magento Open Source 2.4.7, 2.4.8, 2.4.9 limpios; la primera víctima confirmada ejecutaba 2.4.6-p15 totalmente parcheado (con parches anteriores) |
| Explotación | Activa desde el 2026-09-04 22:20 UTC; continuó hasta el lanzamiento del parche; un segundo atacante no relacionado se unió el 2026-09-07 |
| Variantes conocidas del implante Rust | [kworker/u:8:0] (4 sept) → fc-cache v2.1.4 (6 sept) → chronyd v2.1.5 (7 sept) — mismo operador, mismo ID de agente, versiones incrementándose |
| Segundo atacante no relacionado | Web shell PHP en pub/media/catalog/product/cache/, precedido por una sonda de reconocimiento con exfiltración por DNS — independiente del implante Rust, confirmado el 2026-09-07 |
| Vectores de entrega conocidos | Parámetro styles[] de GraphQL; código de tienda no válido registrado en var/log/system.log; archivo subido mediante las opciones personalizadas del cliente de Magento; inyección del encabezado Store: del segundo atacante no relacionado |
| Impacto | Ejecución remota de código → backdoor persistente basado en Rust, web shell PHP independiente, recolección de sesiones de Redis, exposición de credenciales/secretos a través de app/etc/env.php |
| Producto | Cubierto por APSB26-146 | Sin parche oficial |
|---|---|---|
| Adobe Commerce (incl. B2B, Cloud) | 2.4.4 – 2.4.9 | por debajo de 2.4.4 |
| Adobe Commerce B2B | 1.3.3 – 1.5.3 | por debajo de 1.3.3 |
| Magento Open Source | solo 2.4.6 – 2.4.9 | 2.4.5 e inferiores |
Si estás en una versión más antigua y no soportada, Adobe no te enviará un parche aunque
seas igualmente explotable. Consulta docs/PATCHING.md para tus opciones.
Esta información cambia rápido. Contrasta con las fuentes primarias antes de
actuar: el aviso de Sansec y
el boletín de Adobe.
Consulta docs/TIMELINE.md para un registro continuo y cita tus fuentes cuando
actualices cualquier cosa aquí.
El propio parámetro styles de GraphQL de Magento y su escaneo de archivos basado en inyección de dependencias
se abusan como una primitiva de ejecución diferida basada en archivos de dos etapas, en lugar de un
único punto de inyección obvio:
var/log/system.log mediante un código de tienda no válido que Magento registra textualmente, o
var/report/<hash>), introducidos de contrabando a través del parámetro styles[] de GraphQL, un
encabezado de solicitud mutado o (para el segundo atacante no relacionado a continuación) el encabezado Store:.getProcessedTemplate de Magento) recorre
una ruta de código que permite que el propio escáner de código/DI de Magento include() el archivo envenenado,
ejecutando el PHP del atacante. No necesitas abrir el correo — renderizarlo
del lado del servidor es suficiente — y la cadena puede activarse incluso cuando falla la entrega del correo.Una señal de alerta temprana fácil, sin herramientas: un correo electrónico corrupto de "Recordatorio de transacción de pago fallida"
en tu bandeja de entrada con etiquetas {{var ...}} crudas y sin renderizar y una dirección de cliente
que termina en .invalid. Esto suele ser la primera señal visible, antes de que alguien revise un registro.
Las actualizaciones de Sansec confirmaron una segunda ruta de explotación independiente para la misma campaña del implante Rust: incluso las tiendas que movieron el almacenamiento de sesiones fuera de Redis y hacia la base de datos seguían comprometidas — el segundo intento del mismo operador tuvo éxito segundos después usando un archivo subido mediante la función de opciones personalizadas del cliente de Magento en su lugar. Mover el almacenamiento de sesiones no es un parche por sí solo.
Por separado, el 7 de septiembre, Sansec encontró un atacante completamente no relacionado usando
el mismo punto de entrada de StyleSmuggler para una carga útil mucho más simple: una web shell PHP colocada
en la caché de imágenes de productos de Magento
(pub/media/catalog/product/cache/ss_<10hex>/sync_<10hex>.php), precedida por una
sonda de reconocimiento que oculta su carga útil en el encabezado HTTP Store: y exfiltra
sus hallazgos a través de DNS en lugar de una respuesta HTTP. Esto es "herramientas estándar", según
Sansec — no una campaña sostenida — pero significa que un solo host vulnerable puede albergar
dos intrusiones no relacionadas a través de una sola falla. Limpiar el implante Rust no
significa que tu tienda esté limpia.
El implante Rust en sí también ha evolucionado: la compilación original que se hacía pasar por [kworker/u:8:0]
(4 sept) fue seguida por una compilación que se hacía pasar por fc-cache v2.1.4 (6 sept) que
hace balizamiento disfrazado de tráfico NTP, y luego un redespliegue que se hacía pasar por chronyd v2.1.5
(7 sept) del mismo implante, mismo ID de agente — evidencia de que el atacante está iterando
activamente para evadir cualquier detección que publiques. Sansec afirma que aún no ha visto
evidencia de que este implante se haya armado más allá de persistencia/reconocimiento — no lo leas como
tranquilidad dado el web shell funcional del atacante no relacionado en la misma ruta de acceso.
Consulta docs/FAQ.md para respuestas rápidas,
docs/VULNERABILITY.md para el informe técnico completo y
las fuentes, docs/PATCHING.md para aplicar el parche oficial de Adobe, y
docs/INCIDENT_RESPONSE.md para saber qué hacer si el escáner
encuentra algo.
1. Parchea, si tu versión está cubierta:
# Consulta docs/PATCHING.md para el proceso completo — esto no es un comando de una línea, requiere
# credenciales del repositorio de Adobe y las herramientas de gestión de parches de tu proyecto.
2. Escanea en busca de compromiso existente independientemente del estado del parche — parchear detiene la nueva explotación, no limpia un backdoor o 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
O la versión en Python para salida estructurada (JSON), p. ej., para alimentar un SIEM:
sudo python3 scripts/stylesmuggler_scan.py --magento-root /var/www/html --json report.json
Ambos scripts son de solo lectura por defecto — detectan e informan, no matan
procesos ni eliminan archivos a menos que pases --remediate, porque la limpieza prematura
destruye evidencia forense (consulta docs/INCIDENT_RESPONSE.md).
[kworker/u:8:0]: ~/.local/share/.gvfsd/gvfsd-user, sus archivos de bloqueo, /tmp/.kw_*, /tmp/.gvfsd_*fc-cache v2.1.4 (6 sept): ~/.cache/fontconfig/fc-cache, /tmp/.fc_<8hex>.lockchronyd v2.1.5 (7 sept): /tmp/.chrony-<8hex>/chronydgvfsd-user, dos veces por hora (13,43 * * * *) para fc-cache[kworker/u:8:0], fc-cache o chronyd que
no es propiedad de root (o, para fc-cache/chronyd, no coincide con el binario real del sistema)/proc/<pid>/exe en vivo (los dos pueden
diferir — se ha observado que el implante se actualiza a sí mismo en memoria)var/log/system.log, var/report/) en busca de PHP inyectado,
las dos formas conocidas de encabezados desencadenantes (X-TRACE-<10hex> y X-<12hex>), y los
marcadores de campaña del segundo atacante no relacionado (ss5_/ss6_<hex>) y el dominio
canario DNS (oast.site)MG<20hex>::...::/MG<20hex>) dejados en
los registros cuando la carga útil realmente se ejecutópub/media — que nunca deberían contener PHP ejecutable en una
tienda Magento configurada correctamente — que coincidan con el patrón de colocación del web shell del segundo atacantefc-cache/chronyd hacia ntp.timesync.to:123/UDP (y
respaldos), y sus llamadas HTTP simples a servicios públicos de consulta de IP127.0.0.1:6379, con cero tráfico C2 saliente — una red silenciosa no es una
limpia) — y ten en cuenta que mover las sesiones fuera de Redis por sí solo no cierra el segundo
vector de explotación basado en subida de archivosLista completa de indicadores con fuentes: iocs/.
docs/PATCHING.md para los identificadores, dónde obtenerlo
y cómo aplicarlo. Esta es ahora la prioridad, por delante de las mitigaciones provisionales
siguientes.mitigations/:
styles[] de GraphQL
(nginx /
Apache)pub/media/pub/static
(nginx /
Apache) — defensa dirigida
contra la técnica de web shell del segundo atacante no relacionadomitigations/README.md para las limitaciones de alcance —
ninguna de estas cierra el vector de opciones personalizadas del cliente ni la entrega
mediante el encabezado Store: del segundo atacante.app/etc/env.php. Como mínimo, después de la contención: vacía el almacenamiento de sesiones
(Redis y/o BD), rota la crypt/key de Magento, todas las contraseñas de administrador (e
invalida las sesiones de administrador existentes), la contraseña de la base de datos, cada clave de API
del proveedor de pagos y otras credenciales de integración en env.php, y cualquier clave SSH/despliegue
que el usuario del sitio pudiera leer. También verifica la tabla admin_user en busca de una cuenta rogue y
los directorios pub/media/ / pub/static/ / de temas en busca de webshells colocadas — tanto las del
implante Rust como las del segundo atacante no relacionado — antes de considerar una tienda
limpia. Pasos ordenados completos: docs/INCIDENT_RESPONSE.md.docs/ Informe de vulnerabilidad, cronología, FAQ, guía de parcheo, manual de IR
iocs/ Hashes, IPs, dominios, rutas de archivo, YARA, reglas Suricata/IDS
scripts/ stylesmuggler_scan.sh / .py, helper de limpieza de crontab
mitigations/ reglas nginx / Apache / ModSecurity / fail2ban
CVE-2026-75650, APSB26-146, VULN-39341, día cero de Magento 2026, día cero de Adobe Commerce, parche StyleSmuggler, vulnerabilidad GraphQL de Magento, RCE del parámetro styles de Magento, malware gvfsd-user, backdoor Magento fc-cache, malware Magento chronyd, malware del proceso kworker de Magento, secuestro de sesión Redis de Magento, RCE no autenticado de Magento septiembre 2026, exploit de Magento 2.4.9, eliminación de backdoor de Adobe Commerce, web shell pub/media de Magento, eComscan StyleSmuggler, Sansec Shield StyleSmuggler.
Cada indicador en este repositorio se remonta a una fuente publicada y citada — principalmente
el aviso de Sansec (actualizado al menos hasta el 2026-09-07 20:50 UTC), el boletín APSB26-146
de Adobe, e informes comunitarios de respuesta a incidentes de respondedores que manejaron infecciones
en vivo. Consulta la cita al final de cada archivo en iocs/.
No trates nada aquí como exhaustivo o definitivo. Los IOC (encabezados desencadenantes, cadenas de user-agent, disfraces de implantes y ahora los marcadores de campaña de un segundo atacante) ya han cambiado múltiples veces en días desde la divulgación; espera que cambien de nuevo. Compara formas y comportamientos, no solo cadenas literales, siempre que los scripts te lo permitan.
¿Has visto una variante, un hash nuevo, una dirección de origen nueva o un falso positivo? Abre un issue o PR con lo que observaste y cómo lo observaste. Por favor:
MIT para el código en este repositorio (consulta LICENSE). Los datos de indicadores se proporcionan
"tal cual" para uso defensivo, con las fuentes indicadas en todo momento.
Esto es una herramienta defensiva no oficial construida por la comunidad, no un producto de Adobe o Sansec, y no está afiliada a ninguno de los dos. Se proporciona sin garantía. El parche oficial de Adobe (APSB26-146) se ha publicado, pero la cobertura se limita a versiones de producto específicas — consulta el boletín de seguridad de Adobe directamente antes de asumir que tu instalación está cubierta o parcheada.