CVE-2025-56157CVE-2025-56157是Dify应用平台中的一个严重安全漏洞,CVSS评分高达9.8分。Dify是一个开源的大语言模型(LLM)应用开发平台,其1.5.1及之前版本在docker-compose.yaml配置文件中硬编码了PostgreSQL数据库的默认用户名和密码。攻击者可以利用这些默认凭据直接访问数据库服务器(默认监听TCP端口5432),从而获取存储在数据库中的敏感信息,包括用户数据、应用配置、API密钥等。
该漏洞属于OWASP Top 10中的"A07:2021 - Security Misconfiguration"类别。由于Dify的Docker部署包中包含了预配置的数据库连接信息,且这些凭据在代码仓库中是公开的,任何能够访问到源代码或部署配置的攻击者都可以轻易获取数据库访问权限。虽然供应商报告称在1.0.1或更高版本中,Docker配置默认不会暴露PostgreSQL端口,但如果用户错误配置了网络或防火墙规则,将直接面临数据泄露风险。
此漏洞的影响范围包括:机密性完全丧失(攻击者可读取所有数据库内容)、完整性完全丧失(攻击者可修改或删除数据)、可用性完全丧失(攻击者可破坏数据库服务)。建议用户立即检查并修改数据库凭据,升级到最新版本,并确保数据库端口不会对外暴露。
Dify在Docker部署时使用docker-compose.yaml文件管理各个服务组件,其中包括PostgreSQL数据库服务。该配置文件包含了数据库连接所需的所有敏感信息,包括主机地址、端口号、用户名和密码。
漏洞原理分析:
1. 硬编码凭据:Dify的docker-compose.yaml文件中包含PostgreSQL的默认用户名(如postgres)和密码(如difyai123456),这些凭据在代码仓库中以明文形式存储。
2. 端口暴露:虽然1.0.1及之后版本默认不暴露5432端口,但如果用户在Docker网络配置中错误地将PostgreSQL端口映射到主机网络(-p 5432:5432),则数据库将可直接从外部访问。
3. 无访问控制:默认配置中未设置IP白名单或强密码策略,攻击者只需知道默认凭据即可连接数据库。
利用方式:
攻击者首先需要识别目标系统中运行的是Dify应用,然后获取docker-compose.yaml文件(通过GitHub仓库、错误配置的文件上传或其他信息泄露途径),提取PostgreSQL凭据后,使用数据库客户端工具(如psql、pgAdmin或Python的psycopg2库)直接连接数据库。一旦连接成功,攻击者可以执行任意SQL语句,包括:SELECT * FROM users获取用户信息、SELECT * FROM api_keys获取API密钥、UPDATE或DELETE操作修改或破坏数据。
受影响的服务表包括:users(用户表)、api_keys(API密钥表)、app(应用配置表)、conversation(对话记录表)等,这些表中可能包含用户的隐私数据、支付信息和业务敏感数据。