Splunk曝无认证情况下代码执行漏洞
简介
Splunk 发布了安全更新,旨在修复 Splunk Enterprise 中的一个关键安全漏洞,该漏洞可能被利用进行未经认证的文件操作甚至远程代码执行。
该漏洞被追踪为CVE-2026-20253,在CVSS评分系统中评级为9.8。Splunk 本周在警报中表示:“在 10.2.4 和 10.0.7 以下的 Splunk Enterprise 版本中,未经认证的用户可以通过 PostgreSQL 的副车服务端点创建或截断任意文件。”“漏洞存在是因为PostgreSQL的sidecar服务终端缺乏认证控制,允许任何可访问网络的用户无需凭证即可调用文件操作。”该问题已在以下版本中得到解决——
- Splunk Enterprise 10.0.0 至 10.0.6 - 于 10.0.7 修复
- Splunk Enterprise 10.2.0 至 10.2.3 - 在 10.2.4 中修复
- Splunk Enterprise 10.4 - 不受影响
Splunk云未受该漏洞影响,因为该产品未使用Postgres的附加工具。
CVE-2026-20253 的更多技术细节被曝光,通过“/v1/postgres/recovery/backup”和“/v1/postgres/recovery/restore”端点在易受影响的系统上实现预认证的远程代码执行。
攻击链的运作方式如下——
- 连接到攻击者控制的数据库,并使用/backup端点将其内容转储到任意文件中
- 通过 /restore 端点加载攻击者控制的数据库转储到本地 PostgreSQL 实例,并包含一个“passfile”参数,指定“.pgpass”文件(“/opt/splunk/var/packages/data/postgres/.pgpass”)的路径,该文件包含“postgres_admin”用户的密码
- 数据库转储中定义的SQL查询将由Splunk的PostgreSQL实例执行
攻击者可以利用这一弱点,定义一个新函数,利用lo_export——一个用于从数据库中提取BLOB并将其保存为文件的函数——将攻击者控制的内容写入文件,随后在恢复过程中执行该函数。
攻击者在 Splunk 文件系统上拥有任意的文件写入原语,可以通过覆盖 Splunk 经常执行的 Python 脚本(例如,“/opt/splunk/etc/apps/splunk_secure_gateway/bin/ssg_enable_modular_input.py”)来进一步升级到远程代码执行,从而包含恶意负载。
整个操作顺序如下——
- 创建一个数据库并配置它,使用户无需密码即可认证,并赋予其足够的权限调用诸如 lo_export
- 使用 /backup 端点将远程数据库的转储数据导入到 Splunk 文件系统
- 使用 /restore 端点加载恶意数据库转储,在恢复过程中触发恶意函数的执行,并向 Splunk 文件系统编写由攻击者控制的 Python 脚本
