CVE-2026-91768: 
PHP vulnerability analysis and mitigation

Overview

CVE-2026-91768 is an IPv6 access control bypass vulnerability in PHP-FPM's FastCGI client access check (listen.allowed_clients). The flaw causes the fcgi_is_allowed() function in main/fastcgi.c to compare only the first 12 bytes (96 bits) of a 16-byte IPv6 address instead of the full address, effectively widening every configured ACL entry to a /96 network prefix. It affects PHP-FPM versions prior to 8.2.34, 8.3.35, 8.4.26, and 8.5.11, and was disclosed on September 24, 2026. The CVSS v3.1 base score is 6.5 (Moderate) (GitHub Advisory).

Technical details

The root cause is an improper access control check (CWE-284) in fcgi_is_allowed() within main/fastcgi.c, where a hard-coded memcmp length of 12 is used for IPv6 address comparison instead of the required 16 bytes (sizeof(struct in6_addr)). This means any attacker whose IPv6 source address shares the first 96 bits with a legitimately allowed client address will pass the ACL check. The IPv4 branch correctly compares all 4 bytes, and the IN6_IS_ADDR_V4MAPPED branch legitimately uses a 12-byte offset for a different purpose — but that offset was incorrectly reused as the comparison length for plain IPv6 addresses. Allowed addresses are parsed correctly via inet_pton(AF_INET6, ...), so the truncation silently widens every configured entry to a /96 prefix without any visible configuration error. A proof-of-concept was confirmed against a real php-fpm instance: configuring listen.allowed_clients = ::2 and connecting from ::1 (which shares the first 96 bits) results in the connection being accepted and the PHP script executing (GitHub Advisory).

Impact

Successful exploitation allows an attacker with network adjacency to bypass the listen.allowed_clients ACL and reach the FastCGI endpoint, which in typical deployments means the ability to execute arbitrary PHP scripts in the FPM worker context. The primary impact is a high confidentiality risk, as unauthorized script execution can expose sensitive application data, configuration files, or environment variables. Integrity and availability are not directly impacted by the bypass itself. Deployments using Unix domain sockets, IPv4-only configurations, or an external firewall as the primary network boundary are not affected (GitHub Advisory).

Exploitability

A working proof-of-concept has been confirmed by the reporter against a real php-fpm instance, demonstrating that an attacker sourcing traffic from an IPv6 address sharing the first 96 bits with an allowed client can bypass the ACL. The CVE status is currently "Reserved" with limited public details, and there is no evidence of in-the-wild exploitation or threat actor attribution at this time. No EPSS score or CISA KEV catalog entry has been reported. The attack vector is Adjacent Network with no privileges or user interaction required (GitHub Advisory, Feedly).

Exploitation steps

  1. Reconnaissance: Identify a target server running PHP-FPM with FastCGI exposed over an IPv6 TCP socket (e.g., listen = [::1]:9000) and listen.allowed_clients configured with one or more IPv6 addresses.
  2. Determine allowed client prefix: Identify or guess an IPv6 address listed in listen.allowed_clients (e.g., ::2). Extract its first 96 bits (first 12 bytes), which is the effective ACL boundary due to the bug.
  3. Craft a source address: Obtain or spoof an IPv6 source address that shares the first 96 bits with the allowed address (e.g., ::1 shares the first 96 bits with ::2 since both are in the ::0/96 prefix).
  4. Send a FastCGI request: Using a FastCGI client tool (e.g., cgi-fcgi, fcgi-client, or a custom script), connect to the PHP-FPM listening socket from the crafted source address and send a valid FastCGI request specifying a target PHP script via SCRIPT_FILENAME.
  5. Achieve script execution: The partial memcmp passes the ACL check, and PHP-FPM executes the requested script in the FPM worker context, returning the output to the attacker (GitHub Advisory).

Indicators of compromise

  • Network: Unexpected FastCGI connections to PHP-FPM listening ports (default 9000) originating from IPv6 addresses not explicitly listed in listen.allowed_clients but sharing the same /96 prefix; unusual traffic patterns on FastCGI ports from non-web-server source addresses.
  • Logs: PHP-FPM access logs (/var/log/php-fpm/access.log) showing script execution requests from unexpected IPv6 source addresses; FPM error logs showing connections from addresses outside the expected allowed set.
  • Process: PHP-FPM worker processes executing scripts not triggered by the legitimate web server (e.g., nginx or Apache), particularly scripts that access sensitive files or spawn child processes.

Mitigation and workarounds

PHP has released patched versions that fix the comparison to use sizeof(client_sa.sa_inet6.sin6_addr) (all 16 bytes): 8.2.34, 8.3.35, 8.4.26, and 8.5.11. Upgrading to one of these versions is the recommended remediation. As a workaround for environments that cannot immediately upgrade, administrators should restrict FastCGI access using an external firewall or network-level controls rather than relying solely on listen.allowed_clients, or switch to Unix domain sockets which are not affected by this vulnerability (GitHub Advisory, PHP 8.4.26 NEWS).

Community reactions

The vulnerability was published by the PHP security team (bukka) on September 24, 2026, with fix credit to Alexandre Daubois (developer) and reporters iluuu1994 and iliaal. The Remi repository blog noted the patched releases for RHEL and Fedora shortly after disclosure. Security news outlet SecurityOnline.info covered the PHP vulnerability patch batch. Community discussion has been limited given the "Reserved" CVE status and moderate severity rating (Remi's Blog, SecurityOnline).

Additional resources

Linux Distribution fix status

Fix availability across major Linux distributions and their releases.

Debian

Affected

bookworm

php8.2

Affected

sid

php8.4

Affected

trixie

php8.4: 8.4.26-1~deb13u1

Fixed

Ubuntu

Unknown

bionic (esm-infra)

php7.2

Unknown

devel

php8.5

Unknown

focal (esm-infra)

php7.4

Unknown

jammy

php8.1

Unknown

noble

php8.3

Unknown

resolute

php8.5

Unknown

trusty (esm-infra-legacy)

php5

Unknown

xenial (esm-infra-legacy)

php7.0

Unknown

RHEL / CentOS

Affected

RHEL 8

php:7.4/php.src

Affected

RHEL 9

php.src

Affected

RHEL 10

php.src

Affected

Alpine

Fixed

edge

php83: 8.3.35-r0, 8.4.26-r0, 8.5.11-r0

Fixed

Source: This report was generated using AI

Related PHP vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-91768MEDIUM6.5
  • PHP logoPHP
  • php:7.4::php-common
NoYesSep 25, 2026
CVE-2026-91767MEDIUM6.5
  • PHP logoPHP
  • php-opcache
NoYesSep 25, 2026
CVE-2026-92842MEDIUM5.9
  • PHP logoPHP
  • php:8.2::php-process
NoYesSep 25, 2026
CVE-2026-91766MEDIUM5.9
  • PHP logoPHP
  • php8.4-fpm
NoYesSep 25, 2026
CVE-2026-91769MEDIUM4.3
  • PHP logoPHP
  • php-fpm
NoYesSep 25, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management