Reads the actual serving paths (web server → SAPI/FPM pool → PHP build) and effective configuration of server php7403-u20-fpm-userini, determines whether the conditions for both vulnerabilities hold, and lists the remediation for administrators at file and line level. The check was performed non-destructively.
01 Executive Summary
1 serving paths · 2 verdicts
| Reachable | The preconditions of the attack path confirmed by the document hold given this server's SAPI and effective configuration. |
| Mitigated (temporary) | A temporary mitigation from the document is applied at a stage before request parsing. This is a measure until the upgrade. |
| Undetermined | Not concluded due to insufficient evidence or unreadable configuration. This is not "unreachable". |
| Patched | At or above the fixed version, or the package changelog records a backport. |
02 Scope
Verdicts per web server → SAPI/FPM pool → PHP build
| ID | Target | Version verdict | Running | Web server |
|---|---|---|---|---|
| U01 | PHP 7.4 FPM pool [www] 7.4.3-4ubuntu2.29 | PHP 7.4 has no official fixed release; only a source backport exists (PHP_취약점_동향_2026-10.en.md:69). No CVE backport recorded in changelog (/usr/share/doc/php7.4-fpm/changelog.Debian.gz). | running 2026-10-23 21:50:32 | nginx lab-php7.4.localhost |
03 Findings
CVSS v4.0 9.2 · two CVEs × serving paths
| CVE | Target | Verdict | Confidence | Fixed version | Rationale |
|---|---|---|---|---|---|
| CVE-2026-109618 | U01 | Undetermined | medium | none (EOL) | FPM terminates the worker on startup failure, which blocks this path, but analysis suggests it may be vulnerable after startup, so it cannot be declared unreachable (DOC:44). |
| CVE-2026-109619 | U01 | Reachable | high | none (EOL) | session.upload_progress is enabled (PHP default), so the session lifecycle path holds even without session_start(). Applies to both mod_php and FPM (DOC:54). |
SAPI=fpm, memory_limit=128M (/etc/php/7.4/fpm/php.ini:409)
SAPI=fpm, session.upload_progress.enabled=1 (PHP default)
04 Remediation
By priority · file and line level
Check the package source for security updates; if there are none, move to a supported branch.
zcat /usr/share/doc/php7.4-fpm/changelog.Debian.gz | grep -E 'CVE-2026-109618|CVE-2026-109619'
Add to the [www] section of /etc/php/7.4/fpm/pool.d/www.conf: php_admin_value[session.upload_progress.enabled] = 0 ※ ini_set() and .user.ini have no effect
sudo systemctl restart php7.4-fpm sudo python3 php2shell_host.py # re-run the check to confirm the verdict changed
Add to the [www] section of /etc/php/7.4/fpm/pool.d/www.conf: php_admin_value[memory_limit] = -1 memory_limit=-1 removes the per-request cap, so also set a service-level memory cap: sudo systemctl edit php7.4-fpm [Service] MemoryMax=<value for this server's memory> (do not use RLIMIT_AS/RLIMIT_DATA)
sudo systemctl restart php7.4-fpm sudo python3 php2shell_host.py # re-run the check to confirm the verdict changed
Remove the line and move the setting to the pool/php.ini level.
sudo python3 php2shell_host.py # re-run the check to confirm the verdict changed
/etc/php/7.4/fpm/php.ini:379: expose_php = Off
sudo systemctl restart php7.4-fpm curl -sI https://<host>/ | grep -i x-powered-by # should print nothing
05 Compromise & Appendix
Items to review, not verdicts · disclosure of the check method
These may be legitimate changes from deployments. Compare with the deployment history and check any files that cannot be explained.
1 files 2026-10-23 01:52 /var/www/html/index.php
find /var/www/html -name '*.php' -newermt 2026-10-17 -ls
| Non-destructive | 0 commands executed · 0 network requests · writes only to the report directory (/tmp/php2shell_report) |
| Files read | 40 (full list in report.json) |
| Files not read | 0 |
| Limitations | Effective values are based on configuration files, and whether a restart applied them is estimated from file modification times. Apache php_* directives are treated globally. RHEL-family package versions, php-cgi/LiteSpeed/FrankenPHP, and exploitation success conditions (AC:H/AT:P) are not assessed. |
06 Operating Guidance
Today · This week · Upgrade path · When upgrading is impossible
Most people already know that upgrading is the answer. The problem is how to handle the running server until then.