Skip to content

PHP critical RCE vulnerabilities (CVE-2026-109618 / CVE-2026-109619) #8256

Closed

Description

@stephdl

Two critical PHP bugs allow remote code execution without logging in. Exploit code is public. See the PHP security advisory of 2026-10-21.

  • CVE-2026-109618, RCE via OOM corruption: an out-of-memory error can stop PHP while request data is only half set up. Request cleanup then uses the broken data.
  • CVE-2026-109619, RCE via stale global state: state from a freed request can be reused by the next request in the same worker. The session upload progress handler is one confirmed path.

All PHP web setups are affected: PHP-FPM, Apache mod_php (highest risk), php-cgi.

Fixed releases: PHP 8.5.12, 8.4.27, 8.3.36, 8.2.35. PHP 7.4, 8.0 and 8.1 get no official release. The PHP team only published source backports for them (PHP-7.4-CVE-2026-109618-109619, PHP-8.0-..., PHP-8.1-... branches in php-src).

This issue tracks all NethServer 8 applications that run PHP, in two scenarios:

  1. Update: a fixed PHP exists for the branch. Rebuild on it and release. This is the only full fix.
  2. Mitigate: no fixed PHP is available (PHP 7.4, 8.0, 8.1, or an upstream image not yet patched). Mitigations reduce exposure but do not make the application safe.

session.upload_progress.enabled = Off stays in every application in both scenarios. None of the applications below use this feature, and it does not conflict with the fix.

Steps to reproduce

  • Install one of the applications listed below
  • Inside its PHP container run php -v and php -i | grep upload_progress.enabled

Expected behavior

  • Scenario 1: PHP 8.2.35, 8.3.36, 8.4.27, 8.5.12 or later, and session.upload_progress.enabled => Off => Off
  • Scenario 2: the mitigation settings below are active, and the user is told to move to a supported PHP version

Actual behavior

Vulnerable PHP version (8.4.26 in the Nextcloud and Roundcube images, 8.5.4 in Piler). Upload progress was already turned off in some applications (see below).

Scenario 1: update

Bump the base image or PHP packages, rebuild, release.

Scenario 2: mitigate

Put the settings in php.ini, the FPM pool (php_admin_value / php_admin_flag) or the Apache config, so they apply before the request is read. Do not use ini_set() or .user.ini. Restart all workers.

Always:

session.upload_progress.enabled = Off
; PHP 8.5 only
fatal_error_backtraces = Off

Where the application allows it:

  • post_max_size = 8M if the application needs no file uploads, 32M if it does. Keep upload_max_filesize below it.
  • memory_limit = -1 only if the container has a memory limit. Without one, a single request can use all the node memory. Not applied by default.

Applications:

Forge applications (lower priority)

Same two scenarios.

Scenario 1, update:

  • WordPress
  • Passbolt
  • DokuWiki
  • Web server: PHP-FPM images 8.2, 8.3, 8.4, 8.5
  • LAMP: rebuild on patched distribution packages
  • LDAP Account Manager: when the upstream image is patched
  • MariaDB (phpMyAdmin): when the upstream image is patched
  • Wordpress

Scenario 2, mitigate:

  • Web server: PHP-FPM images 7.4, 8.0, 8.1. Turn off upload progress by default in the pool; users can turn it back on in their .custom pool file. Tell users to move to PHP 8.2 or later. Optionally, build these images from the php-src backport branches.
  • LDAP Account Manager: until the patched upstream image is out
  • MariaDB (phpMyAdmin): until the patched upstream image is out

NethServer 7

No fixed PHP exists for the NS7 runtimes (PHP 5.4, 5.6, 7.2, 7.3, 8.0), so only scenario 2 applies. All PRs (branch php_mitigation, php_mitigation_2 for Roundcube) were tested on a NS7 machine. Besides session.upload_progress.enabled = Off, NS7 also gets:

  • Apache rejects multipart requests without a Content-Length (chunked), which skip the post_max_size check (GHSA-w8hw)
  • pm.max_requests = 1 in every PHP-FPM pool, and one request per process in Server Manager, to break the same-worker chain (GHSA-6wmf)

Tell users to move to NethServer 8: this is a mitigation only.

See also

Activity

  1. self-assigned this
    on Oct 21, 2026
  2. added this to the NethServer 8.11 milestone on Oct 21, 2026
  3. added theissue type on Oct 21, 2026
  4. moved this from ToDo to In Progress in NethServeron Oct 21, 2026
  5. changed the title [-]PHP session upload progress memory bug (CVE-2026-109618 / CVE-2026-109619)[/-] [+]PHP critical RCE vulnerabilities (CVE-2026-109618 / CVE-2026-109619)[/+] on Oct 21, 2026
  6. nethbot commented on Oct 21, 2026

    @nethbot
    Member

    in 7.9.2009/testing:

  7. Anton-Barinov commented on Oct 21, 2026

    @Anton-Barinov
  8. 62 remaining items

  9. nethbot commented on Oct 22, 2026

    @nethbot
  10. nethbot commented on Oct 22, 2026

    @nethbot
    Member

    in 7.9.2009/updates:

  11. nethbot commented on Oct 22, 2026

    @nethbot
  12. nethbot commented on Oct 22, 2026

    @nethbot
    Member

    in 7.9.2009/updates:

  13. gsanchietti commented on Oct 22, 2026

    @gsanchietti
    Member

    in 7.9.2009/updates:

    • nethserver-freepbx-14.3.4-1.ns7
  14. stephdl commented on Oct 22, 2026

    @stephdl
    Author
  15. moved this from In Progress to Done in NethServeron Oct 22, 2026
  16. stephdl commented on Oct 22, 2026

    @stephdl
    Author

    webserver upgraded to https://github.com/NethServer/ns8-webserver/releases/tag/1.4.3
    docker.io/library/php:8.5.12-fpm-bookworm
    docker.io/library/php:8.4.27-fpm-bookworm
    docker.io/library/php:8.3.36-fpm-bookworm
    docker.io/library/php:8.2.35-fpm-bookworm

  17. gsanchietti commented on Oct 23, 2026

    @gsanchietti
    Member

    nethserver-tancredi-1.18.2-1.ns7.noarch.rpm has been released on nethesis-updates.

    It sets pm.max_requests = 1 in the Tancredi PHP-FPM pool (nethesis/nethserver-tancredi#159). It also includes the upload progress, file upload and multipart blocks from nethesis/nethserver-tancredi#158.

  18. stephdl commented on Oct 23, 2026

    @stephdl
    Author

    NS8 piler 1.3.2 ships a PHP that is fixed for CVE-2026-109618 and CVE-2026-109619.

    I checked it on a test node running piler 1.3.2. Inside the piler-server container, php8.5-fpm and php8.5-common are 8.5.4-0ubuntu1.5.

    Ubuntu keeps PHP at 8.5.4 for the whole life of 26.04 and does not move to 8.5.12. It backports security fixes as patches. Package 8.5.4-0ubuntu1.5 in resolute-security carries the patch for both CVEs. So "PHP 8.5.4" does not mean vulnerable, the package version is what counts.

    As extra hardening, 1.3.2 also turns off session.upload_progress.enabled and fatal_error_backtraces.

    Release: https://github.com/NethServer/ns8-piler/releases/tag/1.3.2
    Package: https://launchpad.net/ubuntu/+source/php8.5/8.5.4-0ubuntu1.5
    CVE tracker: https://ubuntu.com/security/CVE-2026-109618
    CVE tracker: https://ubuntu.com/security/CVE-2026-109619

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions