背景描述
安全检测发现,老项目使用的PostgreSQL 13.8数据库存在多个可利用安全漏洞,这既威胁数据库稳定性,又带来数据窃取、篡改风险。为规避严重后果,建议立即安排修复。
漏洞列表
危险程度 | 漏洞描述 | 修复建议 |
---|---|---|
高危 | PostgreSQL JDBC Driver是一个用 Pure Java(Type 4)编写的开源 JDBC 驱动程序,用于 PostgreSQL 本地网络协议中进行通信。 PostgreSQL JDBC Driver(简称 PgJDBC)存在安全漏洞,该漏洞源于pgjdbc连接属性提供的类名实例化插件实例,驱动程序在实例化类之前并不验证类是否实现了预期的接口从而导致远程代码执行。 | 将 PostgreSQL JDBC 升级到 42.2.25、42.3.2 及以上版本,下载地址:https://jdbc.postgresql.org/download/ |
高危 | PostgreSQL JDBC Driver是一个用 Pure Java(Type 4)编写的开源 JDBC 驱动程序,用于 PostgreSQL 本地网络协议中进行通信。 PostgreSQL JDBC Driver(简称 PgJDBC)存在安全漏洞,由于java.sql.ResultRow.refreshRow()方法没有执行列名的转义,因此包含语句终止符的恶意列名可能导致 SQL 注入。攻击者利用该漏洞可以以应用程序的 JDBC 用户身份执行其他 SQL 命令。 | 将 PostgreSQL JDBC 升级到 42.2.26、42.3.7、42.4.1 及以上版本,下载地址:https://jdbc.postgresql.org/download/ |
高危 | PostgreSQL JDBC Driver是一个用 Pure Java(Type 4)编写的开源 JDBC 驱动程序,用于 PostgreSQL 本地网络协议中进行通信。 PostgreSQL JDBC Driver(简称 PgJDBC)存在安全漏洞,当将非默认连接属性preferQueryMode=simple与具有否定参数值的易受攻击的 SQL 的应用程序代码结合使用时,可能会发生 SQL 注入。 | 将 PostgreSQL JDBC 升级到 42.2.28、42.3.9、42.4.4、42.5.5、42.6.1、42.7.2 及以上版本,下载地址:https://jdbc.postgresql.org/download.html |
高危 | PostgreSQL是PostgreSQL组织的一套自由的对象关系型数据库管理系统。该系统支持大部分SQL标准并且提供了许多其他特性,例如外键、触发器、视图等。 PostgreSQL存在安全漏洞,该漏洞源于pg_dump的Time-of-check和Time-of-use存在竞争条件,允许攻击者执行任意SQL函数。 | 将 PostgreSQL 升级到 12.20、13.16、14.13、15.8、16.4 及以上版本,下载地址:https://www.postgresql.org/download/ |
漏洞修复
结合漏洞列表可以知道,修复漏洞需要升级:
- 升级PostgreSQL13.8版本到最新小版本(PostgreSQL13.20)。
- 升级SpringBoot项目中的PostgreSQL JDBC版本。
数据库小版本升级
可以直接安装最新小版本,无需数据迁移。操作步骤如下:
对于PostgreSQL的版本升级是否需要直接安装最新版本,需根据升级类型(小版本/主版本)和数据兼容性综合判断。以下是具体分析:
在线升级(如13.8 → 13.20)
可以直接安装最新小版本,无需数据迁移。操作步骤如下:
- 停止服务:
# 停止数据库
systemctl stop postgresql.service
sudo systemctl stop postgresql-13
- 更新软件包:
# 安装数据库
sudo yum install -y postgresql13-server
- 重启服务:
# 启动数据库
systemctl start postgresql.service
sudo systemctl start postgresql-13
验证:执行psql -V和SELECT version()确认版本。
注意事项:
- 小版本间存储格式兼容,仅需替换二进制文件。
- 建议备份数据(如pg_dumpall)以应对意外。
离线升级(如13.8 → 13.20)
下载安装包
yumdownloader --resolve postgresql13-server
安装数据库
# 停止数据库
systemctl stop postgresql-13
# 强制安装当前文件夹中所有的rpm包,忽略依赖去安装
rpm -Uvh *.rpm --nodeps --force
# 启动数据库
systemctl start postgresql-13
查看版本
可以看见版本已经升级到13.20了
升级SpringBoot项目中JDBC
修改springboot的pom.xml文件,升级版本如下所示:
<dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.7.4</version></dependency>