Vulnerabilidad en la implementación de PGJDBC del método "java.sql.ResultRow.refreshRow()" en el controlador JDBC de PostgreSQL (CVE-2022-31197)
Gravedad CVSS v3.1:
ALTA
Tipo:
CWE-89
Neutralización incorrecta de elementos especiales usados en un comando SQL (Inyección SQL)
Fecha de publicación:
03/08/2022
Última modificación:
07/11/2023
Descripción
El controlador JDBC de PostgreSQL (PgJDBC para abreviar) permite a los programas Java conectarse a una base de datos PostgreSQL usando código Java estándar e independiente de la base de datos. La implementación de PGJDBC del método "java.sql.ResultRow.refreshRow()" no realiza el escape de los nombres de las columnas, por lo que un nombre de columna malicioso que contenga un terminador de sentencia, por ejemplo ";", podría conllevar una inyección SQL. Esto podría conllevar a una ejecución de comandos SQL adicionales como usuario JDBC de la aplicación. Las aplicaciones de usuario que no invocan el método "ResultSet.refreshRow()" no están afectadas. Las aplicaciones de usuario que sí invocan ese método están afectadas si la base de datos subyacente que están consultando por medio de su aplicación JDBC puede estar bajo el control de un atacante. El ataque requiere que el atacante engañe al usuario para que ejecute SQL contra un nombre de tabla cuyos nombres de columna contengan el SQL malicioso y posteriormente invoque el método "refreshRow()" en el ResultSet. Tenga en cuenta que el usuario JDBC de la aplicación y el propietario del esquema no tienen por qué ser el mismo. Una aplicación JDBC que es ejecutado como un usuario privilegiado consultando esquemas de base de datos que pertenecen a usuarios menos privilegiados potencialmente maliciosos sería vulnerable. En esta situación, el usuario malicioso podría diseñar un esquema que causara que la aplicación ejecutara comandos como el usuario privilegiado. Las versiones parcheadas serán publicadas como "42.2.26" y "42.4.1". Es recomendado a usuarios actualizar. No se presentan mitigaciones conocidas para este problema
Impacto
Puntuación base 3.x
8.00
Gravedad 3.x
ALTA
Productos y versiones vulnerables
CPE | Desde | Hasta |
---|---|---|
cpe:2.3:a:postgresql:postgresql_jdbc_driver:*:*:*:*:*:*:*:* | 42.2.26 (excluyendo) | |
cpe:2.3:a:postgresql:postgresql_jdbc_driver:*:*:*:*:*:*:*:* | 42.3.0 (incluyendo) | 42.3.7 (excluyendo) |
cpe:2.3:a:postgresql:postgresql_jdbc_driver:42.4.0:-:*:*:*:*:*:* | ||
cpe:2.3:a:postgresql:postgresql_jdbc_driver:42.4.0:rc1:*:*:*:*:*:* | ||
cpe:2.3:a:postgresql:postgresql_jdbc_driver:42.4.1:rc1:*:*:*:*:*:* | ||
cpe:2.3:o:debian:debian_linux:10.0:*:*:*:*:*:*:* | ||
cpe:2.3:o:fedoraproject:fedora:35:*:*:*:*:*:*:* | ||
cpe:2.3:o:fedoraproject:fedora:36:*:*:*:*:*:*:* |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página
Referencias a soluciones, herramientas e información
- https://github.com/pgjdbc/pgjdbc/commit/739e599d52ad80f8dcd6efedc6157859b1a9d637
- https://github.com/pgjdbc/pgjdbc/security/advisories/GHSA-r38f-c4h4-hqq2
- https://lists.debian.org/debian-lts-announce/2022/10/msg00009.html
- https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/I6WHUADTZBBQLVHO4YG4XCWDGWBT4LRP/
- https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/UTFE6SV33P5YYU2GNTQZQKQRVR3GYE4S/