Lanzamiento de PostgreSQL 13.3, 12.7, 11.12, 10.17 y 9.6.22
El Grupo Global de Desarrollo de PostgreSQL ha lanzado una actualización para todas las versiones soportadas de nuestro sistema de base de datos, incluyendo la 13.3, 12.7, 11.12, 10.17 y 9.6.22. Con este lanzamiento se solucionan tres vulnerabilidades de seguridad y se corrigen más de 45 errores reportados en los últimos tres meses.
Para consultar la lista completa de los cambios, revisa las notas de la versión.
Problemas de seguridad
CVE-2021-32027: Desbordamiento de búfer producido por un desbordamiento de enteros en los cálculos de subscripción del array.
Versiones afectadas: 9.6 – 13. El equipo de seguridad no suele realizar pruebas en versiones no soportadas, pero se trata de un problema antiguo.
Al modificar ciertos valores de array SQL, la falta de comprobaciones de límites permite a los usuarios autenticados de la base de datos escribir bytes de forma arbitraria en una amplia zona de la memoria del servidor.
El proyecto PostgreSQL agradece a Tom Lane por reportar este problema.
CVE-2021-32028: Divulgación de memoria en INSERT ... ON CONFLICT ... DO UPDATE
Versiones afectadas: 9.6 – 13. El equipo de seguridad no suele realizar pruebas en versiones no soportadas. Esta funcionalidad apareció por primera vez en 9.5.
Utilizando un comando INSERT ... ON CONFLICT ... DO UPDATE
en una tabla creada de cierta forma a propósito, un atacante puede leer de forma arbitraria bytes de memoria del servidor. La configuración por defecto permite a cualquier usuario autenticado de la base de datos crear objetos requeridos y completar sin problema un ataque. Un usuario que carezca de los privilegios CREATE
y TEMPORARY
en todas las bases de datos y del privilegio CREATE
en todos los esquemas no puede realizar dicho ataque.
El proyecto PostgreSQL agradece a Andres Freund por reportar este problema.
CVE-2021-32029: Divulgación de memoria en tablas particionadas UPDATE ... RETURNING
Versiones afectadas: 11 – 13
Utilizando intencionalmente el comando UPDATE ... RETURNING
en una tabla particionada creada a propósito, un atacante puede leer de forma arbitraria bytes de memoria del servidor. La configuración por defecto permite a cualquier usuario autenticado de la base de datos crear objetos requeridos y completar sin problema un ataque. Un usuario que carezca de los privilegios CREATE
y TEMPORARY
en todas las bases de datos y del privilegio CREATE
en todos los esquemas no puede realizar dicho ataque.
El proyecto PostgreSQL agradece a Tom Lane por reportar este problema.
Corrección de errores y mejoras
Esta actualización corrige más de 45 errores reportados en los últimos meses. Aunque algunos de estos afectan únicamente a la versión 13, también podrían aplicarse a otras versiones compatibles.
A continuación se enumeran algunas de estas correcciones:
- Corrige el cálculo potencialmente incorrecto en los resultados de
UPDATE ... RETURNING
para actualizaciones unidas entre particiones. - Corrige
ALTER TABLE ... ALTER CONSTRAINT
al usar restricciones de clave foránea en tablas particionadas. No pudiendo ajustar las propiedadesDEFERRABLE
y/oINITIALLY DEFERRED
de las restricciones y triggers en las particiones de hoja, el comando ocasionaba un comportamiento inesperado. Tras actualizar a esta versión, es posible ejecutar el comandoALTER TABLE ... ALTER CONSTRAINT
para solucionar cualquier error en tablas particionadas. - Asegura que, al adjuntar una tabla hija con
ALTER TABLE ... INHERIT
, las columnas generadas en la tabla padre sean generadas de forma idéntica en la tabla hija. - Prohíbe marcar una columna de identidad como
NULL
. - Permite
ALTER ROLE ... SET/ALTER DATABASE ... SET
para definir los parámetros role, session_authorization y temp_buffers. - Asegura que
REINDEX CONCURRENTLY
preserve cualquier objetivo estadístico establecido en el índice. - Corrige un problema por el que, en algunos casos, al guardar registros en los triggers
AFTER
, se producían caídas del sistema. - Corrige la forma en que
to_char()
maneja los códigos de formato de mes en números romanos con intervalos negativos. - Corrige el uso de un valor no inicializado al procesar un cuantificador
\{m,n\}
en una expresión regular en modo BRE. - Corrige los errores del planificador «could not find pathkey item to sort» que se producían en ciertas situaciones cuando la clave de ordenamiento suponía una función de agregado o de ventana deslizante.
- Corrige un problema con los recorridos de índices BRIN por mapas de bits que podía producir el error «could not open file».
- Corrige las respuestas potencialmente erróneas de las búsquedas en el índice GIN
tsvector
cuando existen múltiples registros coincidentes. - Corrige la funcionalidad de
COMMIT AND CHAIN
tanto en el servidor como enpsql
. - Evita el cambio incorrecto de timeline al recuperar transacciones de dos fases no comprometidas desde el WAL, el cual podría producir problemas de consistencia y la imposibilidad de reiniciar el servidor.
- Asegura que
wal_sync_method
esté configurado comofdatasync
por defecto en las nuevas versiones de FreeBSD. - Desactiva el parámetro
vacuum_cleanup_index_scale_factor
y la opción de almacenamiento. - Corrige varias fugas de memoria en el servidor, incluyendo una en el proceso de inicialización de los parámetros SSL/TLS.
- Restablece el comportamiento anterior de
\connect service=XYZ
apsql
, impidiendo que las variables de entorno (por ejemplo,PGPORT
) sustituyan las entradas en el archivo de servicio. - Corrige la forma en que
pg_dump
maneja las columnas generadas en las tablas particionadas. - Añade comprobaciones adicionales a
pg_upgrade
para las tablas de usuario que contienen tipos de datos no actualizables. - En Windows,
initdb
imprime ahora las instrucciones sobre cómo iniciar el servidor conpg_ctl
utilizando barras inversas de separación. - Corrige
pg_waldump
para que, al generar las estadísticas por registro, cuente correctamente los registros XACT.
Para una lista completa de los cambios disponibles, consulta las notas de la versión.
Notificación de EOL para PostgreSQL 9.6
PostgreSQL 9.6 dejará de recibir correcciones el 11 de noviembre de 2021. Si estás utilizando PostgreSQL 9.6 en un entorno de producción, te sugerimos hacer planes para actualizar a una versión más reciente y soportada de PostgreSQL. Para más información consulta nuestra política de versiones.
Actualización
Todas las actualizaciones de PostgreSQL son acumulativas. Al igual que en otras actualizaciones menores, no es necesario realizar un dump y volver a cargar la base de datos. Tampoco es necesario el uso de pg_upgrade
para instalar esta actualización. Es suficiente con detener PostgreSQL y actualizar los binarios.
Si anteriormente se omitieron una o más actualizaciones, podría ser necesario seguir algunos pasos posteriores a la actualización.