Sur 19,000 vulnérabilités PHP, 35 sont exploitées. Les voici.
Nous avons classé chaque CVE du moteur PHP, de Composer et de WordPress selon son exploitation réelle (CISA KEV + EPSS) plutôt que selon le CVSS. Un quart des CVE « critiques » ont une probabilité d'exploitation inférieure à 1 % ; les failles réellement utilisées par les attaquants sont listées ci-dessous.
Pourquoi nous avons compté
Chaque scanner de dépendances PHP que nous avons essayé trie les résultats par CVSS. Cela produit un mur de rouge : dans ce flux, 5,708 des 19,264 CVE sont notées élevées ou critiques. Personne ne corrige 5,708 choses, alors la liste est ignorée, ce qui est pire qu'une absence de liste. Nous voulions savoir quelle part de ce rouge est réelle.
Nous avons donc pris chaque avis que phpwarden connaît — 8,599 avis de paquets Composer, 12,328 avis d'extensions/thèmes/cœur WordPress et les CVE du moteur PHP — et relié chacun à deux signaux d'exploitation réelle : le catalogue Known Exploited Vulnerabilities de la CISA (exploitation confirmée dans la nature) et l'EPSS de FIRST (une probabilité, mise à jour quotidiennement, qu'une CVE soit exploitée dans les 30 prochains jours). 17,929 des 19,264 ont un score EPSS.
1. Le flux par gravité CVSS
Voici ce que voit un scanner trié par CVSS. 30% de l'ensemble est « élevé » ou « critique ».
2. Le flux par exploitation réelle
Exactement 35 des 19,264 CVE — soit 0.18% — figurent dans CISA KEV. Élargissez le filet à « l'EPSS indique ≥ 10 % de chance d'exploitation dans les 30 prochains jours » et vous obtenez 667 (3%). À ≥ 50 %, il y en a 226. Le nombre de choses pour lesquelles une équipe PHP doit réalistement tout laisser tomber se compte en dizaines, pas en milliers.
3. « Critique » est un faible prédicteur
Il y a 1,446 CVE notées 9.0 ou plus. 351 d'entre elles (24%) ont un EPSS inférieur à 1 % — les attaquants n'y ont montré pour ainsi dire aucun intérêt. Seules 270 (19%) dépassent un EPSS de 10 %. En parallèle, 156 CVE avec un CVSS inférieur à 7.0 (« moyen » ou moins) ont un EPSS de 10 % ou plus, et 5 des 35 entrées KEV sont notées moyennes ou ne portent aucun CVSS.
Quelques-unes des CVE notées 9.0+ que personne n'exploite, pour rendre la chose concrète :
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%
Aucune n'est « sans danger » — un correctif reste la bonne réponse. Mais si vous n'avez qu'un après-midi, il ne devrait pas leur être consacré.
4. Les 35 qui sont réellement exploitées
Classées par EPSS. Chaque ligne renvoie à sa page d'avis avec les versions affectées et corrigées.
| CVE | Nature | Concerne | Gravité | 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% |
Où elles se concentrent
Par paquet : 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). Les cœurs de CMS dominent — Drupal, Craft, Magento, WordPress — car une RCE non authentifiée dans un CMS vaut la peine d'être automatisée à l'échelle d'internet, et ce sont précisément ces failles qui sont automatisées.
Deux d'entre elles sont des dépendances de développement
CVE-2017-9841 (phpunit/phpunit) and CVE-2021-3129 (facade/ignition) figurent dans KEV avec un EPSS proche de 100 %.
Ni l'une ni l'autre ne devrait exister sur un serveur de production : eval-stdin.php de PHPUnit et la page d'erreur de débogage d'Ignition
ne sont accessibles que lorsque des paquets require-dev ont été déployés. composer install --no-dev dans votre étape de
déploiement élimine toute une catégorie de ces failles, et un scanner qui vérifie si un paquet vulnérable est réellement
atteignable depuis votre code vous dira lesquelles du reste comptent.
Le moteur PHP lui-même
4 CVE du moteur figurent dans KEV : CVE-2026-109618, CVE-2026-109619, CVE-2024-4577, CVE-2019-11043. Ce sont celles où « quelle
version de PHP utilisez-vous » est toute la question — et comme PHP rétroporte les correctifs branche par branche, le bon contrôle est « votre 8.2.x
est-il au niveau ou au-dessus de la version corrective pour 8.2 », pas « êtes-vous sur la dernière version majeure ». Une branche en fin de vie n'a aucune version corrective.
5. Exploitées, mais pas (encore) dans KEV
KEV est sélectif et accuse un retard ; l'EPSS évolue chaque jour. Celles-ci ont le plus haut EPSS de tout ce qui ne figure pas dans le catalogue. Si votre scanner ne connaît que KEV, il ne connaît pas celles-ci.
| CVE | Nature | Concerne | Gravité | 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. Quand les failles ont été publiées
2024 a été l'année la plus chargée du flux, portée par les avis d'extensions WordPress. Le volume n'est pas le risque : la plupart des 35 CVE exploitées ont plusieurs années. Les attaquants n'ont pas besoin de nouvelles failles tant que les anciennes fonctionnent encore sur des hôtes non corrigés.
Quoi en faire
- Triez par exploitation, pas par gravité. KEV d'abord, puis EPSS, puis CVSS. C'est l'ordre qu'utilise phpwarden, et c'est
pourquoi son mode CI dispose d'un réglage
fail-on: exploitedplutôt que d'un simple seuil CVSS. - Vérifiez l'atteignabilité. Un paquet vulnérable qu'aucune partie de votre code n'appelle est moins prioritaire qu'un paquet sur un
chemin de requête.
phpwarden deps composer.lockvérifie si chaque paquet vulnérable est référencé. - Déployez sans les dépendances de développement. Deux des CVE PHP les plus exploitées au monde ne mordent que si vous ne l'avez pas fait.
- Connaissez la branche de votre moteur. 4 des 35 concernent PHP lui-même ;
phpwarden scancompare votre version exacte à la version corrective de votre branche.
Vérifiez votre propre projet en une commande
Zéro dépendance, hors ligne, Apache-2.0. Classe par KEV → EPSS → CVSS et vérifie l'atteignabilité.
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
Ou en CI : uses: oroma-alfred/phpwarden-action@v1
avec fail-on: exploited.
Méthode et réserves
- Données : le flux phpwarden, version 2026.10.28.1, construit à partir d'OSV.dev, FriendsOfPHP/security-advisories et NVD (WordPress), enrichi avec CISA KEV et FIRST EPSS. 19,264 CVE distinctes, 20,935 paires (paquet, CVE). Parcourez-le sur /advisories.
- « Critique » signifie un score CVSS de base ≥ 9.0 tel qu'enregistré par l'avis source. 1,051 CVE n'ont aucun score.
- L'EPSS est une probabilité pour les 30 prochains jours, à la date du flux ; il change chaque jour. L'appartenance à KEV est à la date du flux.
- L'EPSS et KEV mesurent l'exploitation sur internet au sens large, pas dans votre environnement. Une faille non exploitée sur une cible de grande valeur reste une faille. Le propos ici porte sur la priorité, pas sur l'idée d'ignorer quoi que ce soit.
- Régénérer :
scripts/build_blog.pydans le dépôt phpwarden.