De 19,000 vulnerabilidades de PHP, 35 se están explotando. Aquí están.
Clasificamos cada CVE del motor de PHP, de Composer y de WordPress por explotación real (CISA KEV + EPSS) en lugar de por CVSS. Una cuarta parte de los CVE 'críticos' tiene una probabilidad de explotación inferior al 1%; los fallos que los atacantes usan de verdad están listados abajo.
Por qué hicimos el recuento
Todos los escáneres de dependencias de PHP que probamos ordenan los hallazgos por CVSS. Eso produce un muro de rojo: en este feed 5,708 de 19,264 CVE están clasificados como altos o críticos. Nadie corrige 5,708 cosas, así que la lista se ignora, lo cual es peor que no tener lista alguna. Queríamos saber cuánto de ese rojo es real.
Así que tomamos cada aviso que phpwarden conoce — 8,599 avisos de paquetes de Composer, 12,328 avisos de plugins/temas/núcleo de WordPress y los CVE del motor de PHP — y unimos cada uno a dos señales de explotación real: el catálogo de vulnerabilidades explotadas conocidas (Known Exploited Vulnerabilities) de CISA (explotación confirmada en entornos reales) y el EPSS de FIRST (una probabilidad actualizada a diario de que un CVE sea explotado en los próximos 30 días). 17,929 de los 19,264 tienen una puntuación EPSS.
1. El feed por severidad CVSS
Esto es lo que ve un escáner ordenado por CVSS. El 30% de todo es "alto" o "crítico".
2. El feed por explotación real
Exactamente 35 de los 19,264 CVE — 0.18% — están en CISA KEV. Si se amplía el criterio a "el EPSS indica una probabilidad ≥10% de explotación en los próximos 30 días", se obtienen 667 (3%). Con ≥50% son 226. La cantidad de cosas por las que un equipo de PHP necesita de forma realista dejarlo todo se cuenta por decenas, no por miles.
3. "Crítico" es un mal predictor
Hay 1,446 CVE con una puntuación de 9.0 o superior. 351 de ellos (24%) tienen un EPSS inferior al 1% — los atacantes no han mostrado prácticamente ningún interés. Solo 270 (19%) superan un EPSS del 10%. Mientras tanto, 156 CVE con un CVSS inferior a 7.0 ("medios" o menores) tienen un EPSS del 10% o más, y 5 de las 35 entradas KEV están clasificadas como medias o no tienen ningún CVSS.
Unos cuantos de los CVE de 9.0+ que nadie está explotando, para concretar la idea:
CVE-2019-3809— Moodle Blind SSRF Risk in /badges/mybackpack.php moodle/moodle CVSS 10.0, EPSS 0.84%CVE-2022-45822— Unauth. SQL Injection (SQLi) vulnerability in Advanced Booking Calendar plugin <= 1.7.1 on advanced-booking-calendar (WordPress plugin) CVSS 10.0, EPSS 0.81%CVE-2023-51419— Unrestricted Upload of File with Dangerous Type vulnerability in Bertha.Ai BERTHA AI. Your bertha-ai (WordPress plugin) CVSS 10.0, EPSS 0.63%CVE-2024-50496— Unrestricted Upload of File with Dangerous Type vulnerability in webandprint AR For WordPr ar (WordPress plugin) CVSS 10.0, EPSS 0.51%CVE-2024-8615— The JobSearch WP Job Board plugin for WordPress is vulnerable to arbitrary file uploads du jobsearch-wp-job-board (WordPress plugin) CVSS 10.0, EPSS 0.86%CVE-2025-46337— SQL injection in ADOdb PostgreSQL driver pg_insert_id() method adodb/adodb-php CVSS 10.0, EPSS 0.74%
Ninguno de estos es "seguro" — aplicar el parche sigue siendo lo correcto. Pero si solo dispone de una tarde, no debería dedicarla a estos.
4. Los 35 que se están explotando de verdad
Clasificados por EPSS. Cada fila enlaza con su página de aviso con las versiones afectadas y corregidas.
| CVE | Qué | Afecta a | Severidad | EPSS |
|---|---|---|---|---|
CVE-2017-9841 | Code Injection in PHPUnit | phpunit/phpunit | critical 9.8 | 100% |
CVE-2026-109618 | Upload-progress use-after-free and remote process-memory disclosure | PHP engine | critical 9.2 | 100% |
CVE-2026-109619 | Fatal-error backtrace use-after-free and OPcache type confusion | PHP engine | critical 9.2 | 100% |
CVE-2024-34102 | Magento Open Source affected by an Improper Restriction of XML External Entity Reference ('XXE') vulnerability | magento/community-edition, magento/product-community-edition | critical 9.8 | 100% |
CVE-2018-7600 | A remote code execution vulnerability exists within multiple subsystems of Drupal 7.x and 8.x. This potentiall | drupal/core, drupal/drupal | critical 9.8 | 100% |
CVE-2024-4577 | PHP-CGI argument injection to RCE on Windows via Best-Fit encoding | PHP engine | critical 9.8 | 100% |
CVE-2021-3129 | Unauthenticated remote code execution via insecure file handling in debug mode | facade/ignition | critical 9.8 | 100% |
CVE-2025-32432 | Craft CMS Allows Remote Code Execution | craftcms/cms | critical 10.0 | 100% |
CVE-2019-11043 | PHP-FPM remote code execution via env_path_info buffer underflow | PHP engine | critical 9.8 | 100% |
CVE-2016-10033 | Remote code execution via crafted Sender in the isMail transport | phpmailer/phpmailer | critical 9.8 | 100% |
CVE-2025-49113 | Roundcube Webmail Vulnerable to Authenticated RCE via PHP Object Deserialization | roundcube/roundcubemail | critical 9.9 | 100% |
CVE-2022-24086 | Magento improper input validation vulnerability | magento/community-edition | critical 9.8 | 99% |
CVE-2018-7602 | A remote code execution vulnerability exists within multiple subsystems of Drupal 7.x and 8.x. This potentiall | drupal/core, drupal/drupal | critical 9.8 | 99% |
CVE-2021-21311 | SSRF in adminer | vrana/adminer | high 7.2 | 98% |
CVE-2020-11738 | The Snap Creek Duplicator plugin before 1.3.28 for WordPress (and Duplicator Pro before 3.8.7.1) allows Direct | duplicator (WordPress plugin) | high 7.5 | 98% |
CVE-2024-56145 | Craft CMS has potential RCE when PHP `register_argc_argv` config setting is enabled | craftcms/cms | critical 9.8 | 97% |
CVE-2020-25213 | Unauthenticated arbitrary file upload to RCE via the elFinder connector | wp-file-manager (WordPress plugin) | critical 10.0 | 97% |
CVE-2025-54068 | Livewire is vulnerable to remote command execution during component property update hydration | livewire/livewire | critical 9.8 | 96% |
CVE-2025-54236 | Magento Community Edition Improper Input Validation vulnerability | magento/community-edition, magento/project-community-edition | critical 9.1 | 95% |
CVE-2019-6340 | Some field types do not properly sanitize data from non-form sources. This can lead to arbitrary PHP code exec | drupal/core, drupal/drupal | high 8.1 | 92% |
CVE-2021-32648 | Account Takeover in Octobercms | october/system | high 8.2 | 90% |
CVE-2026-9082 | Drupal core includes a database abstraction API to ensure that queries executed against the database are sanit | drupal/core | critical 9.8 | 89% |
CVE-2020-35489 | Unrestricted file upload via unsanitised filenames (double extension) | contact-form-7 (WordPress plugin) | critical 10.0 | 89% |
CVE-2024-58136 | yiisoft/yii2 Mishandles the Attaching of Behavior Defined by a `__class` Array Key | yiisoft/yii2 | critical 9.0 | 88% |
CVE-2020-11023 | Potential XSS vulnerability in jQuery | components/jquery | medium 6.9 | 85% |
CVE-2020-28949 | Potential file overwrite if archive filename starts with file:// | pear/archive_tar | unknown 0.0 | 85% |
CVE-2018-15133 | Laravel Framework RCE Vulnerability | laravel/framework | high 8.1 | 77% |
CVE-2019-9978 | The social-warfare plugin before 3.5.3 for WordPress has stored XSS via the wp-admin/admin-post.php?swp_debug= | social-warfare (WordPress plugin), social-warfare-pro (WordPress plugin) | medium 6.1 | 73% |
CVE-2020-36193 | Directory Traversal in Archive_Tar | pear/archive_tar | high 7.5 | 71% |
CVE-2024-28000 | Unauthenticated privilege escalation to administrator via weak hash in the crawler | litespeed-cache (WordPress plugin) | critical 9.8 | 68% |
CVE-2020-13671 | *Update November 18: Documented longer list of dangerous file extensions* Drupal core does not properly sanit | drupal/core, drupal/drupal | high 8.8 | 36% |
CVE-2025-23209 | Craft CMS has a potential RCE with a compromised security key | craftcms/cms | high 8.0 | 22% |
CVE-2026-63030 | WordPress 6.9.x before 6.9.5 and 7.0.x before 7.0.2 is affected by a REST API batch endpoint route confusion i | WordPress core | critical 9.8 | 11% |
CVE-2026-60137 | WordPress 6.8.x before 6.8.6, 6.9.x before 6.9.5, and 7.0.x before 7.0.2 does not properly sanitise the author | WordPress core | medium 5.9 | 5% |
CVE-2025-35939 | Craft CMS stores arbitrary content provided by unauthenticated users in session files | craftcms/cms | medium 5.3 | 1% |
Dónde se concentran
Por paquete: drupal/core (5), PHP engine (4), drupal/drupal (4), craftcms/cms (4), magento/community-edition (3), pear/archive_tar (2), WordPress core (2), phpunit/phpunit (1). Los núcleos de CMS dominan — Drupal, Craft, Magento, WordPress — porque un RCE no autenticado en un CMS merece automatizarse a escala de internet, y esos son precisamente los fallos que se automatizan.
Dos de ellos son dependencias de desarrollo
CVE-2017-9841 (phpunit/phpunit) and CVE-2021-3129 (facade/ignition) están en KEV con un EPSS cercano al 100%.
Ninguno debería existir en un servidor de producción: el eval-stdin.php de PHPUnit y la página de error de depuración de Ignition
solo son accesibles cuando se desplegaron paquetes de require-dev. Ejecutar composer install --no-dev en el paso de despliegue
elimina toda una clase de estos, y un escáner que comprueba si un paquete vulnerable es realmente
alcanzable desde su código le dirá cuáles de los demás importan.
El propio motor de PHP
4 CVE del motor están en KEV: CVE-2026-109618, CVE-2026-109619, CVE-2024-4577, CVE-2019-11043. Estos son aquellos en los que "qué
versión de PHP tienes" es toda la cuestión — y como PHP retroporta las correcciones por rama, la comprobación correcta es "¿está 8.2.x
en o por encima de la versión de corrección para 8.2?", no "¿estás en la última versión mayor?". Una rama que ha llegado al fin de su vida útil no tiene versión de corrección alguna.
5. Explotados, pero (todavía) no en KEV
KEV se cura manualmente y va con retraso; el EPSS se mueve a diario. Estos tienen el EPSS más alto de todo lo que no está en el catálogo. Si su escáner solo conoce KEV, no conoce estos.
| CVE | Qué | Afecta a | Severidad | EPSS |
|---|---|---|---|---|
CVE-2020-11022 | Potential XSS vulnerability in jQuery | athlon1600/youtube-downloader, components/jquery +1 | medium 6.9 | 99% |
CVE-2022-39986 | RaspAP Command Injection vulnerability | billz/raspap-webgui | critical 9.8 | 99% |
CVE-2022-24637 | Improper Privilege Management in Open Web Analytics | open-web-analytics/open-web-analytics | critical 9.8 | 99% |
CVE-2018-12613 | phpMyAdmin Improper Authentication | phpmyadmin/phpmyadmin | high 8.8 | 98% |
CVE-2023-6553 | The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and in | backup-backup (WordPress plugin) | critical 9.8 | 98% |
CVE-2022-21661 | WordPress is a free and open-source content management system written in PHP and paired with a MariaDB databas | WordPress core | high 8.0 | 98% |
CVE-2016-10045 | Remote code execution in PHPMailer | phpmailer/phpmailer | critical 9.8 | 98% |
CVE-2023-0315 | Froxlor vulnerable to Command Injection | froxlor/froxlor | high 8.8 | 98% |
CVE-2019-9194 | elFinder command injection vulnerability in the PHP connector | studio-42/elfinder | critical 9.8 | 97% |
CVE-2020-11530 | A blind SQL injection vulnerability is present in Chop Slider 3, a WordPress plugin. The vulnerability is intr | chop-slider (WordPress plugin) | critical 9.8 | 95% |
6. Cuándo se publicaron los fallos
2024 fue el año más grande del feed, impulsado por los avisos de plugins de WordPress. El volumen no es riesgo: la mayoría de los 35 CVE explotados tienen años. Los atacantes no necesitan fallos nuevos cuando los antiguos siguen funcionando en hosts sin parchear.
Qué hacer con esto
- Ordene por explotación, no por severidad. KEV primero, luego EPSS, luego CVSS. Ese es el orden que usa phpwarden, y es
el motivo por el que su modo CI tiene un ajuste
fail-on: exploiteden lugar de solo un umbral de CVSS. - Compruebe la alcanzabilidad. Un paquete vulnerable que nada de su código invoca tiene menor prioridad que uno en una
ruta de petición.
phpwarden deps composer.lockcomprueba si se referencia cada paquete vulnerable. - Despliegue sin dependencias de desarrollo. Dos de los CVE de PHP más explotados del planeta solo muerden si no lo hizo.
- Conozca la rama de su motor. 4 de los 35 son el propio PHP;
phpwarden scancompara su versión exacta con la versión de corrección de su rama.
Compruebe su propio proyecto con un solo comando
Cero dependencias, sin conexión, Apache-2.0. Clasifica por KEV → EPSS → CVSS y comprueba la alcanzabilidad.
composer require --dev phpwarden/phpwarden # PHP projects → vendor/bin/phpwarden
vendor/bin/phpwarden deps composer.lock # Composer
vendor/bin/phpwarden scan # PHP engine on this host
vendor/bin/phpwarden wordpress /var/www/html # WordPress core, plugins, themes
O en CI: uses: oroma-alfred/phpwarden-action@v1
con fail-on: exploited.
Método y advertencias
- Datos: el feed de phpwarden, versión 2026.10.28.1, construido a partir de OSV.dev, FriendsOfPHP/security-advisories y NVD (WordPress), enriquecido con CISA KEV y FIRST EPSS. 19,264 CVE distintos, 20,935 pares (paquete, CVE). Explórelo en /advisories.
- "Crítico" significa una puntuación base CVSS ≥ 9.0 según la registra el aviso de origen. 1,051 CVE no tienen puntuación.
- El EPSS es una probabilidad para los próximos 30 días, a la fecha del feed; cambia a diario. La pertenencia a KEV es a la fecha del feed.
- El EPSS y KEV miden la explotación en internet en general, no en su entorno. Un fallo no explotado en un objetivo de alto valor sigue siendo un fallo. Lo que se afirma aquí es sobre la prioridad, no sobre ignorar nada.
- Regenerar:
scripts/build_blog.pyen el repositorio de phpwarden.