CVE-2024-11236
Critical · 9.8CVSS
9.8
EPSS
2.1%
Published
Nov 24, 2024
CISA due date
—
Cloudanix analysis
A flaw in older PHP versions on 32-bit computers lets attackers send specially crafted data that can take over the server.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Moderate
- Impact
- Remote Code Execution
- Component
- Library
- Class
- Buffer Overflow
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Uncontrolled long string inputs to ldap_escape() on 32-bit systems trigger an integer overflow that results in an out-of-bounds write.
Why it matters to the business
Attackers can achieve remote code execution on affected 32-bit PHP deployments, leading to full system compromise, data theft, or service disruption; the high CVSS and public disclosure increase urgency for organizations still running older 8.1/8.2/8.3 releases.
How an attack unfolds
An attacker supplies an excessively long string to any code path that calls ldap_escape() with attacker-controlled data; on 32-bit builds the integer overflow occurs during length calculations, allowing the subsequent write to corrupt adjacent memory and potentially hijack control flow.
How to fix it
Upgrade PHP to 8.1.31 or later, 8.2.26 or later, or 8.3.14 or later; apply the exact commits or packages listed for php/php-src (38123aca18c3c1bd1f109ec77af2f175d7afcf35) and any downstream distributions; disable 32-bit builds where possible or isolate affected services until patched.
How to confirm the fix worked
Verify running PHP version with 'php -v' or phpinfo(); confirm the patch commit is present in source; test that ldap_escape() no longer accepts inputs that previously caused overflow on 32-bit systems; re-scan with vulnerability assessment tools after upgrade.
Typical attack path
- Identify a web application or script that passes unsanitized input into ldap_escape() on a 32-bit PHP installation
- Craft a payload containing a string long enough to trigger the 32-bit integer overflow
- Send the payload via HTTP, CLI, or other entry point that reaches the vulnerable call
- Achieve out-of-bounds write and gain arbitrary code execution or crash the process
How to detect it
Search web server and application logs for unusually long strings passed to LDAP-related functions; monitor for segmentation faults or crashes in PHP processes handling LDAP escape operations; inspect core dumps or memory logs for signs of out-of-bounds writes around ldap_escape calls.
What your security team should do
- Immediately inventory all 32-bit PHP 8.1/8.2/8.3 installations and prioritize upgrade to the fixed releases
- Apply patches within the next 48 hours given the critical CVSS and public exploitability
- Review application code for direct or indirect calls to ldap_escape() with untrusted input
- Consider disabling LDAP functionality or moving to 64-bit deployments if upgrades cannot be completed quickly
The record
In PHP versions 8.1.* before 8.1.31, 8.2.* before 8.2.26, 8.3.* before 8.3.14, uncontrolled long string inputs to ldap_escape() function on 32-bit systems can cause an integer overflow, resulting in an out-of-bounds write.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Bitnami | libphp | 0 | 8.1.31 |
| Bitnami | php | 0 | 8.1.31 |
| Bitnami | php | 8.1.0 | 8.1.31 |
| Bitnami | php-min | 0 | 8.1.31 |
| Bitnami | php-min | 8.1.0 | 8.1.31 |
| Chainguard | php-8.1 | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-apache | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-bcmath | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-bcmath-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-bz2 | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-bz2-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-calendar | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-calendar-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-cgi | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-ctype | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-ctype-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-curl | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-curl-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-dbg | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-dev | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-doc | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-dom | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-dom-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-exif | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-exif-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-fileinfo | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-fileinfo-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-fpm | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-fpm-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-ftp | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-ftp-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-gd | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-gd-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-gettext | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-gettext-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-gmp | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-gmp-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-iconv | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-iconv-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-intl | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-intl-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-ldap | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-ldap-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-mbstring | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-mbstring-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-mysqli | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-mysqli-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-mysqlnd | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-mysqlnd-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-odbc | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-odbc-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-opcache | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-opcache-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-openssl | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-openssl-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-pcntl | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-pcntl-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-pdo | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-pdo-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-pdo_dblib | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-pdo_dblib-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-pdo_mysql | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-pdo_mysql-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-pdo_odbc | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-pdo_odbc-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-pdo_pgsql | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-pdo_pgsql-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-pdo_sqlite | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-pdo_sqlite-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-pear | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-pgsql | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-pgsql-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-phar | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-phar-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-posix | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-posix-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-simplexml | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-simplexml-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-soap | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-soap-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-sockets | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-sockets-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-sodium | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-sodium-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-sysvsem | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-sysvsem-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-sysvshm | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-sysvshm-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-xml | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-xml-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-xmlreader | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-xmlreader-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-xmlwriter | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-xmlwriter-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-xsl | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-xsl-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-zip | 0 | 8.1.31-r0 |
| Chainguard | php-8.1-zip-config | 0 | 8.1.31-r0 |
| Chainguard | php-8.2 | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-apache | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-bcmath | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-bcmath-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-bz2 | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-bz2-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-calendar | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-calendar-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-cgi | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-ctype | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-ctype-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-curl | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-curl-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-dbg | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-dev | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-doc | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-dom | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-dom-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-exif | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-exif-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-fileinfo | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-fileinfo-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-fpm | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-fpm-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-ftp | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-ftp-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-gd | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-gd-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-gettext | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-gettext-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-gmp | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-gmp-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-iconv | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-iconv-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-intl | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-intl-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-ldap | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-ldap-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-mbstring | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-mbstring-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-mysqli | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-mysqli-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-mysqlnd | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-mysqlnd-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-odbc | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-odbc-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-opcache | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-opcache-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-openssl | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-openssl-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-pcntl | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-pcntl-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-pdo | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-pdo-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-pdo_dblib | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-pdo_dblib-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-pdo_mysql | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-pdo_mysql-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-pdo_odbc | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-pdo_odbc-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-pdo_pgsql | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-pdo_pgsql-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-pdo_sqlite | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-pdo_sqlite-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-pear | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-pgsql | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-pgsql-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-phar | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-phar-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-posix | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-posix-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-simplexml | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-simplexml-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-soap | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-soap-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-sockets | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-sockets-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-sodium | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-sodium-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-sysvsem | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-sysvsem-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-sysvshm | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-sysvshm-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-xml | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-xml-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-xmlreader | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-xmlreader-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-xmlwriter | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-xmlwriter-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-xsl | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-xsl-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-zip | 0 | 8.2.26-r0 |
| Chainguard | php-8.2-zip-config | 0 | 8.2.26-r0 |
| Chainguard | php-8.3 | 0 | 8.3.14-r0 |
| Chainguard | php-8.3-apache | 0 | 8.3.14-r0 |
| Chainguard | php-8.3-bcmath | 0 | 8.3.14-r0 |
| Chainguard | php-8.3-bcmath-config | 0 | 8.3.14-r0 |
| Chainguard | php-8.3-bz2 | 0 | 8.3.14-r0 |
| Chainguard | php-8.3-bz2-config | 0 | 8.3.14-r0 |
| Chainguard | php-8.3-calendar | 0 | 8.3.14-r0 |
Related vulnerabilities
- CVE-2025-14177 In PHP versions:8.1.* before 8.1.34, 8.2.* before 8.2.30, 8.3.* before 8.3.29, 8.4.*… Also affects libphp
- CVE-2025-14180 In PHP versions 8.1.* before 8.1.34, 8.2.* before 8.2.30, 8.3.* before 8.3.29, 8.4.*… Also affects libphp
- CVE-2025-14178 In PHP versions:8.1.* before 8.1.34, 8.2.* before 8.2.30, 8.3.* before 8.3.29, 8.4.*… Also affects libphp
- CVE-2024-11233 In PHP versions 8.1.* before 8.1.31, 8.2.* before 8.2.26, 8.3.* before 8.3.14, due to an… Also affects libphp
- CVE-2024-11234 In PHP versions 8.1.* before 8.1.31, 8.2.* before 8.2.26, 8.3.* before 8.3.14, when using… Also affects libphp
- CVE-2024-8929 In PHP versions 8.1.* before 8.1.31, 8.2.* before 8.2.26, 8.3.* before 8.3.14, a hostile… Also affects libphp
- CVE-2024-8932 In PHP versions 8.1.* before 8.1.31, 8.2.* before 8.2.26, 8.3.* before 8.3.14… Also affects libphp
- CVE-2024-9026 In PHP versions 8.1.* before 8.1.30, 8.2.* before 8.2.24, 8.3.* before 8.3.12, when using… Also affects libphp