API de vulnerabilidades de PrestaShield
API JSON gratuita y de solo lectura sobre la mayor base de vulnerabilidades de PrestaShop: core y módulos, CVE y GHSA, con los rangos de versiones afectadas que necesitas para saber si una tienda está expuesta. Es la que alimenta el conector y el panel de PrestaShield, y puedes usarla tú también.
Lo básico
https://api.prestashield.com/v1 · JSON en UTF-8 · sin autenticación · CORS abierto (Access-Control-Allow-Origin: *) · OpenAPI 3.0.
POST /v1/check admite 60 peticiones por minuto y por IP. Las lecturas se cachean 5 minutos; cachea también en tu lado y manda un User-Agent descriptivo (por ejemplo MiHerramienta/1.2 (+https://ejemplo.com)).
Añade lang=es o lang=en (por defecto en) para recibir el titular, el resumen y los rangos afectados en ese idioma. El texto largo del aviso se sirve en el idioma de su fuente, casi siempre inglés, con traducción cuando existe.
Las versiones de PrestaShop tienen cuatro números en la rama 1.x (1.7.8.11) y tres desde la 8 (8.2.1, 9.1.5). La de un módulo es la que declare el módulo.
Endpoints
| Endpoint | Qué devuelve |
|---|---|
GET /v1/vulnerabilities?type=core&version=8.2.1 | Avisos del core que afectan a esa versión (todos los del core si no se indica version). |
GET /v1/vulnerabilities?type=module&slug=ps_facetedsearch&version=3.0.0 | Avisos de un módulo que afectan a esa versión. slug es su nombre técnico (la carpeta). |
GET /v1/vulnerabilities?type=php&version=8.2.30 | Avisos del propio intérprete PHP (recientes, graves, sin los que solo afectan a Windows) que afectan a esa versión. Se compara la parte numérica: «8.2.29-nmm1» vale. |
GET /v1/vulnerabilities/{slug|CVE|GHSA} | Un aviso con descripción, referencias, CWE y métricas CVSS. Vale cualquier identificador: cve-2026-44212, CVE-2026-44212, GHSA-w9f3-qc75-qgx9. |
POST /v1/check | Todo lo que afecta a una tienda en una sola llamada: el core, todos sus módulos y, si se envía php_version, el propio PHP. La forma recomendada de integrarse. |
GET /v1/catalog?page=1&per_page=100 | El catálogo completo con todo el detalle, paginado. Para builds y réplicas, no para consultar en cada petición. |
GET /v1/modules · GET /v1/modules/{slug} | Módulos con avisos y sus cifras; y todos los avisos de un módulo. |
GET /v1/connector/latest | Última versión del conector veoprestashield y su ZIP. |
Comprobar una tienda entera
curl -X POST https://api.prestashield.com/v1/check \
-H "Content-Type: application/json" \
-H "User-Agent: MyTool/1.0 (+https://example.com)" \
-d '{"ps_version":"8.2.1","php_version":"8.2.30","lang":"es","modules":[{"slug":"ps_facetedsearch","version":"3.0.0"},{"slug":"productcomments","version":"4.1.0"}]}'{
"core": [ { "slug": "cve-2026-44212", "cve": "CVE-2026-44212", "score": 9.3, "severity": "critical",
"affected": ["…"], "url": "https://www.prestashield.com/es/vulnerabilidades/cve-2026-44212/", "…": "…" } ],
"php": [ { "slug": "cve-2026-109618", "score": 9.2, "…": "…" } ],
"modules": { "ps_facetedsearch": [ { "slug": "cve-2026-54159", "score": 10, "…": "…" } ],
"productcomments": [ "…" ] },
"meta": { "ps_version": "8.2.1", "modules_checked": 2, "modules_vulnerable": 2, "generated_at": "2026-10-25T12:00:00+00:00" }
}Campos de un aviso
| Campo | Significado |
|---|---|
slug, cve, ghsa | Identificador estable (el de la URL) y los identificadores públicos a los que corresponde. Un GHSA que luego recibe CVE conserva su slug. |
type, module | core, module (más el nombre técnico) o php (el intérprete; los rangos son versiones de PHP). dependency y other existen para casos límite. |
score, severity | Puntuación base CVSS (la más alta disponible: v4 > v3.1 > v3.0) y su etiqueta: none, low (<4), medium (<7), high (<9), critical. |
ranges, affected | Rangos legibles por máquina y lo mismo en palabras. Un rango tiene unique (exactamente esa versión) o límites: start (incluido), included (tope incluido), excluded (tope excluido). Al comparar solo se evalúan los rangos de la rama mayor instalada cuando los hay: con «< 8.2.6» y «< 9.1.1», una tienda 8.2.7 no está afectada. |
has_patch, patches | Si existe corrección y, en avisos del core, módulos que lo parchean sin actualizar. |
back_office | Solo explotable con privilegios altos (una cuenta de empleado): menos urgente que un aviso del front. |
url | Ficha pública del aviso en www.prestashield.com, en el idioma pedido. |
description, references, weaknesses, metrics | Solo en los endpoints de detalle. description es HTML; metrics sigue la estructura de la NVD para todas las fuentes. |
De dónde salen los datos
Tres fuentes fundidas en una ficha por aviso: NVD (CVE, CVSS y rangos CPE; se refresca continuamente), los GitHub Security Advisories de la organización PrestaShop (los avisos del propio fabricante, también los que no tienen CVE) y Friends of Presta (avisos de módulos de terceros con el nombre técnico del módulo). Cada día entran avisos nuevos; los que no se pueden clasificar automáticamente se revisan a mano antes de publicarse.
¿Un error, un aviso que falta o un rango mal? Escribe a hola@kebes.es.
Endpoints antiguos (WordPress)
Los conectores instalados antes del cambio de API siguen llamando a /wp-json/wp/v2/vulnerability?vulnerability_core=true&version=… y ?vulnerability_module_slug=…&version=…. Esas URL siguen funcionando con la misma forma de respuesta (title.rendered, content.rendered, acf.base_score), ahora sobre esta base. Están obsoletas: toda integración nueva usa /v1.
Uso razonable y privacidad
La API es gratuita para cualquier uso, también comercial, mientras no la satures: cachea las respuestas, agrupa con /v1/check y usa /v1/catalog para réplicas. Por seguridad y control de uso registramos cada petición (endpoint, parámetros, dirección IP, dominio de origen y user agent). Los registros en bruto se borran a los 90 días; solo se conservan recuentos agregados sin direcciones IP. Base legal: interés legítimo (art. 6.1.f del RGPD).
Cambios
2026-10 · v1 — API nueva en un backend propio con un único motor de comparación de versiones (rangos por rama), tres fuentes fundidas, POST /v1/check, catálogo y especificación OpenAPI. Los endpoints de WordPress pasan a ser una capa de compatibilidad.