
StyleSmuggler (CVE-2026-75650) toolkit IOC per Magento Open Source e Adobe Commerce. Rileva negozi compromessi, implant Rust, web shell PHP, artefatti di persistenza e indicatori noti di compromissione.
Zero-day Magento · Zero-day Adobe Commerce · CVE-2026-75650 · APSB26-146 · VULN-39341 · RCE non autenticato · malware Magento · rimozione backdoor Magento · vulnerabilità Magento 2.4.9 · implant Rust · iniezione stili GraphQL · web shell PHP
Indicatori di compromissione della community, uno scanner di compromissione e indicazioni di mitigazione/patch per StyleSmuggler (CVE-2026-75650) — la RCE non autenticata su Magento Open Source / Adobe Commerce divulgata da Sansec il 5 settembre 2026, con sfruttamento in natura confermato a partire dal 4 settembre 2026. Adobe ha pubblicato una correzione ufficiale, APSB26-146, il 7 settembre 2026. Se hai cercato "StyleSmuggler IOC", "CVE-2026-75650", "APSB26-146", "VULN-39341", "malware Magento fc-cache", "backdoor Magento chronyd", "gvfsd-user Magento" o "RCE GraphQL styles Magento", questo è il repository che fa per te.
Questo è esclusivamente un toolkit difensivo. Contiene firme di rilevamento, uno scanner di compromissione e regole di hardening/blocco costruite a partire da report di incidenti pubblicati e di prima mano. Non contiene codice di exploit, un trigger proof-of-concept o qualsiasi cosa che generi il payload dell'attacco. Se stai cercando quello, sei nel repository sbagliato — vai a fare patch e a cacciare minacce.
| Vulnerabilità | StyleSmuggler (nome di Sansec) — CVE-2026-75650 |
| Vendor | Adobe (Magento Open Source, Adobe Commerce) |
| CVE | CVE-2026-75650, assegnata il 2026-09-07 |
| Bollettino Adobe | APSB26-146, pubblicato il 2026-09-07 20:20 UTC, Priorità 1 (massima) |
| Richiesto anche | APSB26-138 — l'aggiornamento Commerce regolare di Adobe di settembre 2026, rilasciato il 2026-09-08. Adobe dichiara che VULN-39341 deve essere applicata in aggiunta a questo, non al posto di esso. |
| CVSS | 10.0 (3.1 e 4.0) — Critica |
| CWE | CWE-1336, Neutralizzazione impropria di elementi speciali usati in un motore di template |
| Patch ufficiale | Rilasciata. Hotfix VULN-39341. La copertura non è universale — vedi la tabella sotto. |
| Autenticazione richiesta | Nessuna — non autenticato |
| Versioni interessate | Riprodotta da Sansec su Magento Open Source pulito 2.4.7, 2.4.8, 2.4.9; la prima vittima confermata eseguiva 2.4.6-p15 completamente patchata (sulle patch precedenti) |
| Sfruttamento | Attivo dal 2026-09-04 22:20 UTC; continuato fino al rilascio della patch; un secondo attaccante, non correlato, si è unito il 2026-09-07 |
| Varianti note dell'implant Rust | [kworker/u:8:0] (4 set) → fc-cache v2.1.4 (6 set) → chronyd v2.1.5 (7 set) — stesso operatore, stesso ID agente, versioni incrementali |
| Secondo attaccante, non correlato | Web shell PHP in pub/media/catalog/product/cache/, preceduto da una sonda di ricognizione con esfiltrazione DNS — indipendente dall'implant Rust, confermato il 2026-09-07 |
| Vettori di consegna noti | Parametro GraphQL styles[]; codice store non valido registrato in var/log/system.log; file caricato tramite le opzioni personalizzate del cliente di Magento; iniezione dell'header Store: del secondo attaccante non correlato |
| Impatto | Esecuzione di codice remoto → backdoor persistente basata su Rust, web shell PHP indipendente, raccolta di sessioni Redis, esposizione di credenziali/segreti tramite app/etc/env.php |
| Prodotto | Coperto da APSB26-146 | Nessuna correzione ufficiale |
|---|---|---|
| Adobe Commerce (incl. B2B, Cloud) | 2.4.4 – 2.4.9 | sotto 2.4.4 |
| Adobe Commerce B2B | 1.3.3 – 1.5.3 | sotto 1.3.3 |
| Magento Open Source | solo 2.4.6 – 2.4.9 | 2.4.5 e precedenti |
Se sei su una versione più vecchia e non supportata, Adobe non ti sta fornendo una
correzione anche se sei altrettanto sfruttabile. Vedi docs/PATCHING.md
per le tue opzioni.
Queste informazioni cambiano rapidamente. Verifica incrociata con le fonti primarie
prima di agire: l'advisory di Sansec e
il bollettino di Adobe.
Vedi docs/TIMELINE.md per un registro continuo e cita le tue fonti
quando aggiorni qualcosa qui.
Il parametro GraphQL styles di Magento e il suo scanner di file basato su
dependency-injection vengono abusati come una primitiva di esecuzione differita basata su
file in due fasi, piuttosto che come un singolo punto di iniezione evidente:
var/log/system.log tramite un codice store non valido che
Magento registra testualmente, o var/report/<hash>), introdotti di nascosto tramite il
parametro GraphQL styles[], un header di richiesta mutato o (per il secondo attaccante
non correlato sotto) l'header Store:.getProcessedTemplate
di Magento) percorre un percorso di codice che consente allo scanner DI/codice di Magento
di fare include() del file avvelenato, eseguendo il PHP dell'attaccante. Non devi aprire
l'email — il rendering lato server è sufficiente — e la catena può attivarsi anche quando
la consegna dell'email stessa fallisce.Un segnale di allarme precoce facile, senza strumenti: un'email "Promemoria pagamento
transazione non riuscita" illeggibile nella tua casella di posta con tag {{var ...}}
grezzi e non renderizzati e un indirizzo cliente che termina in .invalid. Questo è spesso
il primo segno visibile, prima che qualcuno controlli un log.
Gli aggiornamenti di Sansec hanno confermato un secondo percorso di sfruttamento indipendente per la stessa campagna con implant Rust: anche gli store che avevano spostato l'archiviazione delle sessioni da Redis al database sono stati comunque compromessi — il secondo tentativo dello stesso operatore è riuscito secondi dopo usando un file caricato tramite la funzionalità opzioni personalizzate del cliente di Magento. Spostare l'archiviazione delle sessioni non è una soluzione di per sé.
Separatamente, il 7 settembre, Sansec ha trovato un attaccante completamente non
correlato che usa lo stesso identico punto di ingresso di StyleSmuggler per un payload
molto più semplice: una web shell PHP lasciata nella cache delle immagini dei prodotti di
Magento (pub/media/catalog/product/cache/ss_<10hex>/sync_<10hex>.php), preceduta da una
sonda di ricognizione che nasconde il suo payload nell'header HTTP Store: ed esfiltra i
suoi risultati tramite DNS piuttosto che una risposta HTTP. Questo è "tooling pronto
all'uso", secondo Sansec — non una campagna sostenuta — ma significa che un singolo host
vulnerabile può portare due intrusioni non correlate attraverso un'unica falla. Pulire
l'implant Rust non significa che il tuo store sia pulito.
Anche l'implant Rust si è evoluto: la build originale che si mascherava da
[kworker/u:8:0] (4 set) è stata seguita da una build v2.1.4 che si mascherava da
fc-cache (6 set) che fa beaconing camuffato da traffico NTP, e poi da un redeploy v2.1.5
che si mascherava da chronyd (7 set) dello stesso implant, stesso ID agente — prova
che l'attaccante sta iterando attivamente per eludere qualsiasi rilevamento tu pubblichi.
Sansec dichiara di non aver ancora visto prove che questo implant sia stato armato oltre
la persistenza/ricognizione — non leggerlo come rassicurazione dato il web shell funzionante
dell'attaccante non correlato sullo stesso percorso di accesso.
Vedi docs/FAQ.md per risposte rapide,
docs/VULNERABILITY.md per l'analisi tecnica completa e le fonti,
docs/PATCHING.md per applicare la correzione ufficiale di Adobe, e
docs/INCIDENT_RESPONSE.md per cosa fare se lo scanner trova
qualcosa.
1. Applica la patch, se la tua versione è coperta:
# Vedi docs/PATCHING.md per il processo completo — non è un comando singolo, richiede
# le credenziali del repository Adobe e il tooling di gestione patch del tuo progetto.
2. Scansiona per compromissioni esistenti indipendentemente dallo stato della patch — la patch ferma il nuovo sfruttamento, non pulisce una backdoor o una web shell esistente:
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
Oppure la versione Python per output strutturato (JSON), ad es. per alimentare un SIEM:
sudo python3 scripts/stylesmuggler_scan.py --magento-root /var/www/html --json report.json
Entrambi gli script sono sola lettura per impostazione predefinita — rilevano e
riportano, non uccidono processi o eliminano file a meno che tu non passi --remediate,
perché una pulizia prematura distrugge le prove forensi (vedi
docs/INCIDENT_RESPONSE.md).
[kworker/u:8:0]: ~/.local/share/.gvfsd/gvfsd-user, i suoi file di lock, /tmp/.kw_*, /tmp/.gvfsd_*fc-cache v2.1.4 (6 set): ~/.cache/fontconfig/fc-cache, /tmp/.fc_<8hex>.lockchronyd v2.1.5 (7 set): /tmp/.chrony-<8hex>/chronydgvfsd-user, due volte all'ora (13,43 * * * *) per fc-cache[kworker/u:8:0], fc-cache o chronyd che non è
di proprietà di root (o, per fc-cache/chronyd, non corrisponde al binario di sistema reale)/proc/<pid>/exe (i due possono
differire — è stato osservato che l'implant si aggiorna in memoria)var/log/system.log, var/report/) per PHP iniettato,
le due forme note di header trigger (X-TRACE-<10hex> e X-<12hex>), e i marcatori di
campagna del secondo attaccante non correlato (ss5_/ss6_<hex>) e il dominio canary DNS
(oast.site)MG<20hex>::...::/MG<20hex>) lasciati nei
log quando il payload è effettivamente eseguitopub/media — che non dovrebbero mai contenere PHP eseguibile su uno store
Magento configurato correttamente — che corrispondono al pattern di drop della web shell del
secondo attaccantefc-cache/chronyd verso ntp.timesync.to:123/UDP (e
fallback), e le sue chiamate HTTP semplici a servizi pubblici di lookup IP127.0.0.1:6379, con zero traffico C2 in uscita — una rete silenziosa
non è una rete pulita) — e nota che spostare le sessioni da Redis da solo non chiude il
secondo vettore di sfruttamento basato su caricamento fileElenco completo degli indicatori con fonti: iocs/.
docs/PATCHING.md per gli identificativi, dove
ottenerlo e come applicarlo. Questa è ora la priorità, prima delle mitigazioni
provvisorie sotto.mitigations/:
styles[] di GraphQL
(nginx /
Apache)pub/media/pub/static
(nginx /
Apache) — difesa mirata
contro la tecnica della web shell del secondo attaccante non correlatomitigations/README.md per i limiti di ambito —
nessuna di queste chiude il vettore delle opzioni personalizzate del cliente o la
consegna tramite header Store: del secondo attaccante.app/etc/env.php. Come minimo, dopo il
contenimento: svuota l'archiviazione delle sessioni (Redis e/o DB), ruota la crypt/key
di Magento, tutte le password admin (e invalida le sessioni admin esistenti), la password
del database, ogni chiave API del fornitore di pagamento e altra credenziale di
integrazione in env.php, e qualsiasi chiave SSH/deploy che l'utente del sito poteva
leggere. Controlla anche la tabella admin_user per un account rogue e le directory
pub/media/ / pub/static/ / dei temi per web shell rilasciate — sia quelle dell'implant
Rust sia quelle del secondo attaccante non correlato — prima di considerare uno store
pulito. Passaggi ordinati completi: docs/INCIDENT_RESPONSE.md.docs/ Analisi della vulnerabilità, timeline, FAQ, guida alla patch, playbook IR
iocs/ Hash, IP, domini, percorsi file, YARA, regole Suricata/IDS
scripts/ stylesmuggler_scan.sh / .py, helper di pulizia crontab
mitigations/ regole nginx / Apache / ModSecurity / fail2ban
CVE-2026-75650, APSB26-146, VULN-39341, zero-day Magento 2026, zero-day Adobe Commerce, patch StyleSmuggler, vulnerabilità GraphQL Magento, RCE parametro styles Magento, malware gvfsd-user, backdoor Magento fc-cache, malware Magento chronyd, malware processo kworker Magento, dirottamento sessione Redis Magento, RCE non autenticato Magento settembre 2026, exploit Magento 2.4.9, rimozione backdoor Adobe Commerce, web shell Magento pub/media, eComscan StyleSmuggler, Sansec Shield StyleSmuggler.
Ogni indicatore in questo repository risale a una fonte pubblicata e citata — principalmente
l'advisory di Sansec (aggiornata almeno fino al 2026-09-07 20:50 UTC), il bollettino
APSB26-146 di Adobe e analisi di incident response della community da parte di responder che
hanno gestito infezioni live. Vedi la citazione in fondo a ogni file in iocs/.
Non trattare nulla qui come esaustivo o definitivo. Gli IOC (header trigger, stringhe user-agent, travestimenti dell'implant e ora i marcatori di campagna di un secondo attaccante) sono già cambiati più volte entro giorni dalla divulgazione; aspettati che cambino di nuovo. Abbina forme e comportamenti, non solo stringhe letterali, ovunque gli script te lo consentano.
Hai visto una variante, un nuovo hash, un nuovo indirizzo sorgente o un falso positivo? Apri un issue o una PR con ciò che hai osservato e come lo hai osservato. Per favore:
MIT per il codice in questo repository (vedi LICENSE). I dati degli indicatori
sono forniti "così come sono" per uso difensivo, con le fonti annotate ovunque.
Questo è tooling difensivo non ufficiale costruito dalla community, non un prodotto Adobe o Sansec, e non è affiliato a nessuno dei due. È fornito senza garanzia. La patch ufficiale di Adobe (APSB26-146) è stata rilasciata, ma la copertura è limitata a versioni di prodotto specifiche — controlla il bollettino di sicurezza di Adobe direttamente prima di presumere che la tua installazione sia coperta o corretta.