通过浏览器扩展中的链接消息实现通用代码执行

主要观点:通过在浏览器和浏览器扩展中链接各种消息 API,展示了如何从网页跳转到“通用代码执行”,打破同源策略和浏览器沙箱,提供了两个影响数百万用户的新漏洞披露示例,还演示了如何通过大规模数据集查询和静态代码分析结合来发现此类漏洞;介绍了通用跨站脚本(XSS)的强大之处及原因,包括浏览器扩展相关的内容脚本消息传递、postMessage()sendMessage()的易受攻击模式、打破同源策略、原生消息传递、浏览器扩展漏洞大规模搜索以及智能卡扩展中的命令执行等内容。
关键信息:

  • 浏览器扩展可通过manifest.json文件声明内容脚本,其在私有执行环境中运行,通过chrome.runtime.sendMessage()等 API 与背景脚本通信。
  • 扩展内容脚本中常见的易受攻击模式是postMessage处理程序缺乏源验证,可导致恶意网页闯入通信。
  • 利用扩展中内容脚本和背景脚本的信任边界,恶意网页可突破同源策略保护,如通过特定扩展获取其他域的会话 cookie。
  • 原生消息传递允许背景脚本与主机操作系统上的原生应用通信,形成通用代码执行链。
  • 可利用chrome-extension-manifests-dataset项目查询大量 Chrome 扩展,通过 Semgrep 规则查找易受攻击的postMessage处理程序。
  • 智能卡相关的扩展存在命令执行漏洞,攻击者可通过发送特定消息触发下载恶意 DLL 并执行命令。
    重要细节:
  • 示例中扩展 A 的manifest.json文件中内容脚本的matches模式为"http://*/*", "https://*/*",且有访问多个其他源的 cookies 的权限,可导致恶意网页获取其他域的 cookies。
  • 原生消息传递的示例中,扩展的native messaging host manifest file指定了应用名称、路径等信息,背景脚本通过chrome.runtime.sendNativeMessage()发送消息,原生应用可处理stdin消息。
  • 搜索可利用扩展的查询语句为node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.length > 0 && manifest.permissions?.includes('nativeMessaging')"
  • 智能卡扩展 B 的内容脚本matches模式为"*://*/*", "file:///*",可在任何页面注入,背景脚本直接将消息传递给原生应用,原生应用通过解析stdin中的 JSON 对象执行命令。
  • 示例中的攻击脚本可通过window.postMessage()发送消息,触发下载恶意 DLL 并执行命令。
阅读 11
0 条评论