PHP corrige una inyección SQL crítica en la extensión PostgreSQL (CVE-2026-17543)

PHP acaba de corregir una inyección SQL de severidad alta que llevaba tiempo escondida en la extensión pgsql, la que se usa para hablar con PostgreSQL. El fallo tiene nombre oficial, CVE-2026-17543, y una puntuación CVSS 4.0 de 8.1: explotable de forma remota, sin autenticación, y según el propio aviso, trivial de aprovechar.

Lo más incómodo del bug es dónde vive: no está en el código de ninguna aplicación, sino en el propio runtime de PHP. Eso significa que proyectos que confiaban en las funciones de escape nativas de PHP como única defensa contra la inyección SQL estaban expuestos sin saberlo.

Dónde está el problema

El fallo afecta a php_pgsql_convert(), la función interna que usan pg_select(), pg_insert(), pg_update() y pg_delete(). Esta función sanea los valores que le llegan con PQescapeStringConn() y luego los envuelve en literales de tipo E'...' mediante php_pgsql_add_quotes().

El origen del problema es un escapado incorrecto de las barras invertidas en los parámetros que llegan del usuario. Con standard_conforming_strings activado en PostgreSQL, que es el valor por defecto desde la versión 9.1, las barras invertidas no se escapan de forma segura dentro de ese tipo de literal. El resultado es una inyección SQL directa con un payload relativamente sencillo.

PHP ha resuelto el problema cambiando a constantes de tipo string que no requieren ese escapado especial.

Versiones afectadas y parcheadas

El fallo afecta a todas las ramas activas de PHP anteriores a estas versiones, publicadas el 3 de agosto de 2026:

  • PHP 8.2.x anterior a 8.2.33
  • PHP 8.3.x anterior a 8.3.33
  • PHP 8.4.x anterior a 8.4.24
  • PHP 8.5.x anterior a 8.5.9

Si tu proyecto usa ext-pgsql para conectarse a PostgreSQL, actualizar no es opcional, es la única mitigación real, no hay forma de esquivar el fallo desde el código de la aplicación.

Además, más endurecimiento en las release candidate

Las release candidate PHP 8.4.25 RC1 y PHP 8.5.10 RC1, ya en pruebas, añaden una tanda de endurecimiento de pila (stack hardening) dirigida a funciones recursivas como array_walk_recursive(), array_replace_recursive(), compact(), count() con COUNT_RECURSIVE, e incluso métodos de comparación del DOM como DOMNode::normalize(). Estas funciones ahora limitan la profundidad de recursión para evitar desbordamientos de pila con entradas maliciosamente anidadas.

También se corrigen varios use-after-free en implode(), en la extensión XSL, en filtros de flujo definidos por el usuario y en sockets, además de una corrupción de heap en sesiones gestionadas con mod_mm.

Más detalles técnicos en el archivo de noticias oficial de PHP.

COMPARTE ESTA NOTICIA

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP