IPBUF安全漏洞报告
English
CVE-2026-32687 CVSS 7.8 高危

CVE-2026-32687 elixir-ecto postgrex SQL注入漏洞

披露日期: 2026-05-12
来源: 6b3ad84c-e1a6-4bf7-a703-f496b71e49db

漏洞信息

漏洞编号
CVE-2026-32687
漏洞类型
SQL注入
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
elixir-ecto postgrex

相关标签

SQL注入CVE-2026-32687ElixirPostgreSQLpostgrex

漏洞概述

elixir-ecto postgrex库中的Elixir.Postgrex.Notifications模块存在SQL注入漏洞。由于listen/3和unlisten/3函数的channel参数未经过滤直接拼接到SQL语句中,攻击者可注入双引号破坏查询结构并执行任意SQL命令。该漏洞影响0.16.0至0.22.2之前的版本。

技术细节

该漏洞源于Elixir.Postgrex.Notifications模块在处理数据库通知通道时,未对channel参数进行转义处理,直接将其插值到LISTEN "..." / UNLISTEN "..." SQL语句中。攻击者若能控制channel名称,可注入双引号(")闭合原有标识符,随后通过分号(;)链式执行任意SQL语句。由于通知连接使用PostgreSQL简单查询协议,支持多语句执行,攻击者可借此执行DDL或DML操作(如删除表)。此问题同样存在于重连时重放LISTEN命令的handle_connect/1函数中。

攻击链分析

STEP 1
步骤1
攻击者识别目标应用使用了存在漏洞的elixir-ecto postgrex库(0.16.0至0.22.2之前)。
STEP 2
步骤2
攻击者寻找能够控制'Elixir.Postgrex.Notifications.listen/3'或'unlisten/3'函数中channel参数的输入点。
STEP 3
步骤3
攻击者构造包含双引号和恶意SQL语句的Payload(例如:channel\"; DROP TABLE users; --)。
STEP 4
步骤4
应用将恶意channel参数传递给数据库,由于缺乏转义,导致数据库执行注入的SQL命令。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Elixir PoC Example demonstrating the vulnerability # Attacker controls the 'channel_name' input # Malicious payload containing SQL injection channel_name = "test_channel\"; DROP TABLE sensitive_data; --" # Vulnerable call in postgrex < 0.22.2 # The resulting SQL will be: LISTEN "test_channel"; DROP TABLE sensitive_data; --" # This allows execution of the DROP TABLE command. Postgrex.Notifications.listen(pid, channel_name)

影响范围

elixir-ecto postgrex >= 0.16.0, < 0.22.2

防御指南

临时缓解措施
建议立即升级elixir-ecto postgrex到修复版本0.22.2或以上。若暂时无法升级,应在调用Notifications.listen/3和unlisten/3之前,严格过滤channel参数中的双引号(")及其他特殊字符,防止SQL注入攻击。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表