Una falla en la extensión pgsql de PHP permite inyección SQL en aplicaciones que usan pg_insert(), pg_update(), pg_select() o pg_delete() con PostgreSQL. Afecta a sitios y sistemas en PHP 8.2, 8.3, 8.4 y 8.5 anteriores a las versiones corregidas. Actualiza PHP a 8.2.33, 8.3.33, 8.4.24 o 8.5.9 según la rama que uses.
Qué está pasando
La extensión pgsql de PHP, que conecta aplicaciones PHP con bases de datos PostgreSQL, tiene una falla en la función interna php_pgsql_convert(). Esta función se encarga de escapar los datos que entrega el usuario cuando la aplicación usa pg_insert(), pg_update(), pg_select() y pg_delete().
El problema es que los valores se escapan con PQescapeStringConn() y luego se envuelven en una cadena de tipo E'...'. Con standard_conforming_strings = on, que es el valor por defecto desde PostgreSQL 9.1, la barra invertida \ no se escapa. Así, un atacante puede incluir una barra antes de una comilla, cerrar la cadena antes de tiempo y agregar su propio código SQL a la consulta.
El aviso incluye un ejemplo en que un valor como zzz\' OR 1=1 -- hace que pg_select() devuelva todas las filas de la tabla. En la práctica, esto puede permitir leer, modificar o borrar datos a los que el usuario no debería tener acceso, dependiendo de cómo use la aplicación estas funciones.
La corrección cambia php_pgsql_convert() para que use cadenas sin escape en lugar de E'...', y está disponible en las versiones 8.2.33, 8.3.33, 8.4.24 y 8.5.9 de PHP.
Vulnerabilidades
| CVE | CVSS | Descripción |
|---|---|---|
| CVE-2026-17543 | — | Inyección SQL (CWE-89) en ext-pgsql: php_pgsql_convert() envuelve los valores en E'...' sin escapar la barra invertida cuando standard_conforming_strings = on, lo que permite romper la cadena en pg_insert(), pg_update(), pg_select() y pg_delete(). |
Productos afectados
| Producto | Versiones afectadas | Versión corregida |
|---|---|---|
| PHP ext-pgsql (rama 8.2) | < 8.2.33 | 8.2.33 |
| PHP ext-pgsql (rama 8.3) | < 8.3.33 | 8.3.33 |
| PHP ext-pgsql (rama 8.4) | < 8.4.24 | 8.4.24 |
| PHP ext-pgsql (rama 8.5) | < 8.5.9 | 8.5.9 |
Qué hacer ahora
- Actualiza PHP a la versión corregida de tu rama: 8.2.33, 8.3.33, 8.4.24 u 8.5.9.
- Verifica la versión instalada en cada servidor (por ejemplo, con
php -v) y si la extensiónpgsqlestá cargada (conphp -m). - Después de actualizar, reinicia el servicio que ejecuta PHP (PHP-FPM o el servidor web) y confirma que la nueva versión quedó activa.
Te ayudamos a revisar sin costo si tus servidores o equipos usan una versión afectada por esta alerta, y qué conviene hacer primero.
Parte por identificar qué aplicaciones usan PHP con PostgreSQL; si tu sitio usa MySQL u otra base de datos, esta falla no te afecta directamente. Dentro de las que sí usan PostgreSQL, prioriza las expuestas a Internet y las que manejan datos de clientes, y pídele a tu equipo de desarrollo o proveedor que revise si el código usa pg_insert(), pg_update(), pg_select() o pg_delete() con datos que vienen de formularios o parámetros.
Algo que suele pasarse por alto: muchos servidores tienen más de una versión de PHP instalada, o usan los paquetes de la distribución Linux, que a veces aplican el parche sin cambiar el número de versión. Revisa cada servidor y cada versión de PHP en uso, y consulta el aviso de seguridad de tu distribución para confirmar qué paquete incluye la corrección.
Cómo te ayuda UpTech
Cerberus WAF bloquea los ataques web más comunes (inyección SQL, XSS, SSRF, XXE) y los escáneres de vulnerabilidades antes de que lleguen a tu aplicación.
Conocer el servicio → Servicios Gestionados TICon Gestión de Parches, las actualizaciones de seguridad de sistemas operativos y aplicaciones se aplican de forma programada, sin depender de que alguien lea esta alerta a tiempo.
Conocer el servicio → Servicios Gestionados TICon el inventario automatizado de hardware y software sabes de inmediato qué equipos tienen la versión afectada.
Conocer el servicio →Referencias
- https://github.com/php/php-src/security/advisories/GHSA-7qpv-r5mr-78m4
- https://www.cve.org/CVERecord?id=CVE-2026-17543