Of 19,000 PHP vulnerabilities, 35 are being exploited. Here they are.

We ranked every PHP engine, Composer and WordPress CVE by real-world exploitation (CISA KEV + EPSS) instead of CVSS. A quarter of 'critical' CVEs have under 1% exploitation probability; the bugs attackers actually use are listed below.

Published 2026-10-28 · data: phpwarden feed 2026.10.28.1 (generated 2026-10-27) · sources: OSV.dev, FriendsOfPHP, NVD, CISA KEV, FIRST EPSS

19,264CVEs in the feed
35in CISA KEV (exploited)
1,446CVSS 9.0+ "critical"
24%of those: EPSS under 1%

Why we counted

Every PHP dependency scanner we tried sorts findings by CVSS. That produces a wall of red: in this feed 5,708 of 19,264 CVEs are rated high or critical. Nobody fixes 5,708 things, so the list gets ignored, which is worse than no list at all. We wanted to know how much of that red is real.

So we took every advisory phpwarden knows about — 8,599 Composer package advisories, 12,328 WordPress plugin/theme/core advisories and the PHP engine CVEs — and joined each one to two signals of real-world exploitation: CISA's Known Exploited Vulnerabilities catalog (confirmed in-the-wild exploitation) and FIRST's EPSS (a daily-updated probability that a CVE will be exploited in the next 30 days). 17,929 of the 19,264 have an EPSS score.

1. The feed by CVSS severity

This is what a CVSS-sorted scanner sees. 30% of everything is "high" or "critical".

Critical1,526High4,182Medium11,894Low611No score1,051

2. The feed by actual exploitation

Exactly 35 of the 19,264 CVEs — 0.18% — are in CISA KEV. Widen the net to "EPSS says ≥10% chance of exploitation in the next 30 days" and you get 667 (3%). At ≥50% it is 226. The number of things a PHP team realistically needs to drop everything for is in the tens, not the thousands.

35CISA KEV
226EPSS ≥ 50%
667EPSS ≥ 10%
18,597EPSS < 10%

3. "Critical" is a weak predictor

There are 1,446 CVEs scored 9.0 or higher. 351 of them (24%) have an EPSS below 1% — attackers have shown essentially no interest. Only 270 (19%) clear a 10% EPSS. Meanwhile 156 CVEs with a CVSS under 7.0 ("medium" or lower) have an EPSS of 10% or more, and 5 of the 35 KEV entries are rated medium or carry no CVSS at all.

A few of the 9.0+ CVEs nobody is exploiting, to make the point concrete:

None of these is "safe" — a patch is still the right answer. But if you have one afternoon, it should not go to these.

4. The 35 that are actually being exploited

Ranked by EPSS. Every row links to its advisory page with affected and fixed versions.

CVEWhatAffectsSeverityEPSS
CVE-2017-9841Code Injection in PHPUnitphpunit/phpunitcritical 9.8100%
CVE-2026-109618Upload-progress use-after-free and remote process-memory disclosurePHP enginecritical 9.2100%
CVE-2026-109619Fatal-error backtrace use-after-free and OPcache type confusionPHP enginecritical 9.2100%
CVE-2024-34102Magento Open Source affected by an Improper Restriction of XML External Entity Reference ('XXE') vulnerabilitymagento/community-edition, magento/product-community-editioncritical 9.8100%
CVE-2018-7600A remote code execution vulnerability exists within multiple subsystems of Drupal 7.x and 8.x. This potentialldrupal/core, drupal/drupalcritical 9.8100%
CVE-2024-4577PHP-CGI argument injection to RCE on Windows via Best-Fit encodingPHP enginecritical 9.8100%
CVE-2021-3129Unauthenticated remote code execution via insecure file handling in debug modefacade/ignitioncritical 9.8100%
CVE-2025-32432Craft CMS Allows Remote Code Executioncraftcms/cmscritical 10.0100%
CVE-2019-11043PHP-FPM remote code execution via env_path_info buffer underflowPHP enginecritical 9.8100%
CVE-2016-10033Remote code execution via crafted Sender in the isMail transportphpmailer/phpmailercritical 9.8100%
CVE-2025-49113Roundcube Webmail Vulnerable to Authenticated RCE via PHP Object Deserializationroundcube/roundcubemailcritical 9.9100%
CVE-2022-24086Magento improper input validation vulnerabilitymagento/community-editioncritical 9.899%
CVE-2018-7602A remote code execution vulnerability exists within multiple subsystems of Drupal 7.x and 8.x. This potentialldrupal/core, drupal/drupalcritical 9.899%
CVE-2021-21311SSRF in adminervrana/adminerhigh 7.298%
CVE-2020-11738The Snap Creek Duplicator plugin before 1.3.28 for WordPress (and Duplicator Pro before 3.8.7.1) allows Directduplicator (WordPress plugin)high 7.598%
CVE-2024-56145Craft CMS has potential RCE when PHP `register_argc_argv` config setting is enabledcraftcms/cmscritical 9.897%
CVE-2020-25213Unauthenticated arbitrary file upload to RCE via the elFinder connectorwp-file-manager (WordPress plugin)critical 10.097%
CVE-2025-54068Livewire is vulnerable to remote command execution during component property update hydrationlivewire/livewirecritical 9.896%
CVE-2025-54236Magento Community Edition Improper Input Validation vulnerabilitymagento/community-edition, magento/project-community-editioncritical 9.195%
CVE-2019-6340Some field types do not properly sanitize data from non-form sources. This can lead to arbitrary PHP code execdrupal/core, drupal/drupalhigh 8.192%
CVE-2021-32648Account Takeover in Octobercmsoctober/systemhigh 8.290%
CVE-2026-9082Drupal core includes a database abstraction API to ensure that queries executed against the database are sanitdrupal/corecritical 9.889%
CVE-2020-35489Unrestricted file upload via unsanitised filenames (double extension)contact-form-7 (WordPress plugin)critical 10.089%
CVE-2024-58136yiisoft/yii2 Mishandles the Attaching of Behavior Defined by a `__class` Array Keyyiisoft/yii2critical 9.088%
CVE-2020-11023Potential XSS vulnerability in jQuerycomponents/jquerymedium 6.985%
CVE-2020-28949Potential file overwrite if archive filename starts with file://pear/archive_tarunknown 0.085%
CVE-2018-15133Laravel Framework RCE Vulnerabilitylaravel/frameworkhigh 8.177%
CVE-2019-9978The 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.173%
CVE-2020-36193Directory Traversal in Archive_Tarpear/archive_tarhigh 7.571%
CVE-2024-28000Unauthenticated privilege escalation to administrator via weak hash in the crawlerlitespeed-cache (WordPress plugin)critical 9.868%
CVE-2020-13671*Update November 18: Documented longer list of dangerous file extensions* Drupal core does not properly sanitdrupal/core, drupal/drupalhigh 8.836%
CVE-2025-23209Craft CMS has a potential RCE with a compromised security keycraftcms/cmshigh 8.022%
CVE-2026-63030WordPress 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 iWordPress corecritical 9.811%
CVE-2026-60137WordPress 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 authorWordPress coremedium 5.95%
CVE-2025-35939Craft CMS stores arbitrary content provided by unauthenticated users in session filescraftcms/cmsmedium 5.31%

Where they cluster

Composer packages24WordPress plugins/themes/core7PHP engine4

By package: 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). CMS cores dominate — Drupal, Craft, Magento, WordPress — because an unauthenticated RCE in a CMS is worth automating at internet scale, and those are exactly the bugs that get automated.

Two of them are dev dependencies

CVE-2017-9841 (phpunit/phpunit) and CVE-2021-3129 (facade/ignition) are in KEV with an EPSS near 100%. Neither should exist on a production server: PHPUnit's eval-stdin.php and Ignition's debug error page are only reachable when require-dev packages were deployed. composer install --no-dev in your deploy step removes an entire class of these, and a scanner that checks whether a vulnerable package is actually reachable from your code will tell you which of the rest matter.

The PHP engine itself

4 engine CVEs are in KEV: CVE-2026-109618, CVE-2026-109619, CVE-2024-4577, CVE-2019-11043. These are the ones where "which PHP version are you on" is the whole question — and because PHP backports fixes per branch, the right check is "is 8.2.x at or above the fixed release for 8.2", not "are you on the latest major". An end-of-life branch has no fixed release at all.

5. Exploited, but not (yet) in KEV

KEV is curated and lags; EPSS moves daily. These have the highest EPSS of anything not in the catalog. If your scanner only knows about KEV, it does not know about these.

CVEWhatAffectsSeverityEPSS
CVE-2020-11022Potential XSS vulnerability in jQueryathlon1600/youtube-downloader, components/jquery +1medium 6.999%
CVE-2022-39986RaspAP Command Injection vulnerabilitybillz/raspap-webguicritical 9.899%
CVE-2022-24637Improper Privilege Management in Open Web Analyticsopen-web-analytics/open-web-analyticscritical 9.899%
CVE-2018-12613phpMyAdmin Improper Authenticationphpmyadmin/phpmyadminhigh 8.898%
CVE-2023-6553The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and inbackup-backup (WordPress plugin)critical 9.898%
CVE-2022-21661WordPress is a free and open-source content management system written in PHP and paired with a MariaDB databasWordPress corehigh 8.098%
CVE-2016-10045Remote code execution in PHPMailerphpmailer/phpmailercritical 9.898%
CVE-2023-0315Froxlor vulnerable to Command Injectionfroxlor/froxlorhigh 8.898%
CVE-2019-9194elFinder command injection vulnerability in the PHP connectorstudio-42/elfindercritical 9.897%
CVE-2020-11530A blind SQL injection vulnerability is present in Chop Slider 3, a WordPress plugin. The vulnerability is intrchop-slider (WordPress plugin)critical 9.895%

6. When the bugs were published

20155942016337201750720184862019711202070320211,77620222,30520232,48320244,26620251,20120261,624

2024 was the biggest year in the feed, driven by WordPress plugin advisories. Volume is not risk: most of the 35 exploited CVEs are years old. Attackers do not need new bugs when old ones still work on unpatched hosts.

What to do with this

  1. Sort by exploitation, not severity. KEV first, then EPSS, then CVSS. That is the order phpwarden uses, and it is why its CI mode has a fail-on: exploited setting instead of just a CVSS threshold.
  2. Check reachability. A vulnerable package that nothing in your code calls is a lower priority than one on a request path. phpwarden deps composer.lock checks whether each vulnerable package is referenced.
  3. Deploy without dev dependencies. Two of the most-exploited PHP CVEs on earth only bite if you did not.
  4. Know your engine branch. 4 of the 35 are PHP itself; phpwarden scan compares your exact version against the fixed release of your branch.

Check your own project in one command

Zero dependencies, offline, Apache-2.0. Ranks by KEV → EPSS → CVSS and checks reachability.

pipx install phpwarden
phpwarden deps composer.lock        # Composer
phpwarden scan                      # PHP engine on this host
phpwarden wordpress /var/www/html   # WordPress core, plugins, themes

Or in CI: uses: primeagent001-bot/phpwarden-action@v1 with fail-on: exploited.

Method and caveats