文章摘要
文章披露了PostHog平台存在的多个安全漏洞,包括SSRF漏洞、ClickHouse SQL注入0day和默认PostgreSQL凭证问题,这些漏洞可被串联利用形成远程代码执行攻击链(涉及ZDI-25-099/097/096三个漏洞编号)。
文章总结
深入解析PostHog漏洞链:SSRF、ClickHouse SQL注入0day与默认PostgreSQL凭证如何导致RCE(ZDI-25-099、ZDI-25-097、ZDI-25-096)
背景
研究团队在评估PostHog(一款开源产品分析平台)时,通过24小时深度代码审计发现了一个由多个漏洞组成的远程代码执行(RCE)攻击链。该平台因支持数千种外部集成而存在潜在SSRF风险,最终通过组合漏洞实现了从SSRF到RCE的突破。
漏洞链详解
第一阶段:SSRF漏洞(CVE-2024-9710等)
- 发现过程:测试test_slack_webhook端点时,前端虽验证URL安全性,但保存配置的PATCH接口未复现相同检查,导致可持久化存储恶意URL(如localhost)。
- 利用点:Rust编写的Webhook工作线程会无条件请求已保存的URL,且支持HTTP重定向,可将POST请求转为GET请求。
第二阶段:ClickHouse SQL注入0day
- 目标:通过SSRF访问ClickHouse的HTTP API(默认端口8123),利用其postgresql()表函数特性。
- 漏洞本质:ClickHouse对PostgreSQL表名中的单引号错误使用反斜杠转义(应为双引号),导致SQL注入。
- Payload构造:注入COPY FROM PROGRAM语句,通过PostgreSQL的$$美元符号引用绕过转义限制,最终执行系统命令。
第三阶段:默认PostgreSQL凭证
- 利用静态凭证(如posthog/posthog)连接数据库,完成攻击链最后一环。
完整攻击流程
- 绕过前端验证,存储恶意Webhook URL。
- 触发Rust工作线程发起SSRF请求至ClickHouse API。
- 通过重定向将POST转为GET,利用ClickHouse的SQL注入执行PostgreSQL命令。
- 注入
COPY FROM PROGRAM获取反向Shell。
时间线与致谢
- 披露时间:2024年10月报告,2025年2月公开。
- 致谢:感谢ZDI(Zero Day Initiative)在漏洞协调披露中的专业支持。
关键启示
- 深度防御失效:各组件独立防护(SSRF校验、SQL转义、默认凭证)被组合击穿。
- 开发建议:统一安全校验逻辑,避免TOCTOU问题;严格限制内部服务权限。
(注:原文中的图片链接、代码片段及社交媒体内容已精简,保留核心技术细节。)
评论总结
总结:
- 对PostHog的质疑:
- 认为PostHog存在随意编码问题,可能隐藏其他漏洞 "PostHog does a lot of vibe coding, I wonder how many other issues they have."(PostHog做了很多随意编码,我想知道他们还有多少其他问题)
- 对Clickhouse责任的讨论:
- 认为Clickhouse应为其API漏洞承担主要责任 "Like that escape bug was what made the RCE possible and certainly a core DB company like ClickHouse should be held accountable"(正是这个转义漏洞使得RCE成为可能,像ClickHouse这样的核心数据库公司应该为此负责)
- 也有观点认为PostHog和Clickhouse都应承担责任 "I feel clickhouse and posthog both have their share of the blame here"(我认为clickhouse和posthog在这里都有责任)
- PostHog的回应:
- 官方回应已在2024年10月修复漏洞,并正在改进架构 "We resolved these SSRF findings back in October 2024...working on some architectural improvements"(我们已在2024年10月解决了这些SSRF发现...正在做一些架构改进)
- 其他讨论:
- 对漏洞赏金金额的询问 "how much does ZDI pay for a bug like this?"(ZDI为这样的漏洞支付多少钱?)
- 对技术文档准确性的指正 "Need an edit here...their API is designed to be READ ONLY"(需要编辑这里...他们的API设计为对HTTP GET请求只读)
- 对文章本身的赞赏 "Very nice write up!"(非常好的文章!)"What an elegant, interesting read"(多么优雅、有趣的阅读)