Skip to content

Instantly share code, notes, and snippets.

@hanshou101
Created May 21, 2021 09:40
Show Gist options
  • Save hanshou101/c2c07494f10a33741da2bb2d9d775d82 to your computer and use it in GitHub Desktop.
Save hanshou101/c2c07494f10a33741da2bb2d9d775d82 to your computer and use it in GitHub Desktop.
【CVE-2018-1000006】.md
  1. 【CVE-2018-1000006】
    1. 参考资料:
      1. 后来,补上的一篇,考古资料:
        1. Electron 自定义协议命令注入(CVE-2018-1000006)分析和 Url Scheme 安全考古
          1. 讲了很多,其它的【奇门相关方法】。
      2. 可直接上手复现,的Demo环境:
        1. 信息来源:Electron < v1.8.2-beta.4 远程命令执行漏洞—【CVE-2018-1000006】 - 先知社区
        2. GitHub仓库:CHYbeta/CVE-2018-1000006-DEMO: The Demo for CVE-2018-1000006
    2. Electron,在【1.8.2】及更早版本,在【协议处理程序】中 存在漏洞。
      1. 特别是,在 Win10 、Win7 、 Windows 2008 上,运行的Electron程序,可以【注册自定义协议处理程序】
        1. 如果,用户点击【特制URL】,则会欺骗执行,任意命令。
    3. 在网上,搜索【CVE-2018-1000006】,详细查看这篇文章:
      1. gpu-launcher
        1. 使用,类似于【renderer-cmd-prefix】。
    4. 主要针对 Windows 平台有效:
      1. 双引号的闭合
        1. 翻注册表,发现,其实是在做【闭合系统底层的一个双引号】。
      2. 根源就在于:
        1. Windows使用了【双引号】,来传参。
      3. 【Win32】程序处理本地文件和【url】的打开是类似的,甚至可以使用同一套【Win32 API】 —— ShellExecute(Ex)
        1. 打开一个本地文件:ShellExecuteW(NULL, L"open", L"c:\\hello.txt", NULL, NULL , SW_SHOW );
        2. 通过系统默认浏览器访问淘宝:ShellExecuteW(NULL, L"open", L"https://www.taobao.com", NULL, NULL , SW_SHOW );
        3. 可以看到除了 lpFile 之外其他参数可以保持完全一致。
        4. ShellExecuteExW 也是类似的情况。
      4. Chromium 默认使用多进程模式。渲染器、插件进程的路径和参数可以在 Chromium 命令开关中自定义。
        1. CVE-2018-1000006 公开的 poc 利用的是 --gpu-launcher,经过巴斯光年实验室的分析,以下参数均支持执行任意命令
          1. --renderer-cmd-prefix
          2. --gpu-launcher
          3. --utility-cmd-prefix
          4. --ppapi-plugin-launcher
          5. --nacl-gdb
          6. --ppapi-flash-path 和 --ppapi-flash-args
      5. 当然,如果嫌弃 gpu 进程和 renderer 进程的沙箱,我们还有 【--no-sandbox】。
    5. Electron的修复处理:
      1. 对【参数接收】和【子进程运行】,进行了检查
        1. 增加了【黑名单】验证:
          1. 黑名单列表
      2. 对于【非安全访问路径】的一个限制
        1. _
    6. 历史总结:
      1. 根据【蚂蚁金服巴斯光年实验室】的回顾,历史上,已经出现了多次【url scheme】的漏洞。
        1. MS07-061 (CVE-2007-3896)
          1. 两个变体:CVE-2007-3896, CVE-2007-3845
        2. MS10-007 (CVE-2010-0027)
        3. CVE-2007-3670
        4. CVE-2007-3186
        5. QQ软件,2012年报出漏洞
        6. HITB 2017 ,一个游戏客户端通过自定义 url scheme 执行命令的漏洞
      2. 总结:
        1. 历史总是在一遍遍重演。
          1. 比如 2008年 的【CVE-2007-3670】,和【CVE-2018-1000006】,简直是【一模一样的复刻】。
    7. 实战:
      1. window.location = 'exodus://aaaaaaaaa" --gpu-lancher="cmd" --aaaaa='
    8. 更深入的讲解:
      1. 【CVE-2018-8495】,详解
        1. 参考资料:
          1. 从 CVE-2018-8495 看 PC 端 url scheme 的安全问题 - 知道创宇
        2. 【url scheme】的基本介绍:
        3. 创建【url scheme】的方式:
          1. 写注册表。
          2. 或者,使用【异步可插拔协议】。
        4. 安全隐患,简单介绍
        5. 【操作系统】层面的问题:
          1. 【Windows XP】+【IE7】
            1. mailto:test%../../../../windows/system32/calc.exe".cmd
        6. 【浏览器】的【参数注入】
          1. 【Windows】+【IE】,即《Electron 自定义协议命令注入(CVE-2018-1000006)》
            1. test:var" "bar
            2. PoC:
              1. chybeta://?" "--no-sandbox" "--gpu-launcher=cmd.exe /c start calc
            3. 最终生成的【启动参数】:
              1. electron.exe "//?" "--no-sandbox" "--gpu-launcher=cmd.exe /c start calc"
          2. 【Windows】+【Edge】,即Edge 远程代码执行(CVE-2018-8495)。
            1. 在 Edge 中,居然可以打开一些不合法的 url scheme(没有包含 URL Protocol 字段),比如 WSHFile 项:
            2. 恰恰 WSHFile 项指向了 wscript.exe
              1. 这个应用程序非常熟悉是Windows 内置的脚本解释器
            3. 脚本可以接收参数并用于执行:
              1. 漏洞作者最终找到:C:\Windows\WinSxS\amd64_microsoft-windows-a..nagement-appvclient_31bf3856ad364e35_10.0.17134.48_none_c60426fea249fc02\SyncAppvPublishingServer.vbs
                1. 该脚本文件支持接收参数,并且会将命令直接拼接到字符串中
                2. 然后通过 powershell 进行执行。
                  1. psCmd = "powershell.exe -NonInteractive -WindowStyle Hidden-ExecutionPolicy RemoteSigned -Command &amp;{" &amp; syncCmd &amp; "}"
            4. 此外,额外的发现:
              1. 在注册表 HKEY_CLASSES_ROOT 还发现了和 WSHFile 类似的 url scheme,都指向 wscript.exe,同样也可以触发远程代码执行。包括:
                1. wshfile
                2. wsffile
                3. vbsfile
                4. vbefile
                5. jsefile
              2. 以及,另外的可执行脚本:
                1. 还有在 C:\Windows\System32\ 下也存在 【SyncAppvPublishingServer.vbs】,同样也可以利用,并且比漏洞作者所提供的更加可靠。
                2. 除了 SyncAppvPublishingServer.vbs 这个文件, 在 C:\Windows\System32\Printing_Admin_Scripts\zh-CN 下的 【pubprn.vbs】 也同样可以触发代码执行。
        7. 【应用程序】的问题
          1. 2017 年 12 月,macOS 上的 helpViewer 应用程序
            1. 由 XSS 造成文件执行的漏洞(CVE-2017-2361)
          2. 构造的PoC如下:
            1. document.location = "help:///Applications/Safari.app/Contents/Resources/Safari.help/%25252f..%25252f..%25252f..%25252f..%25252f..%25252f..%25252f/System/Library/PrivateFrameworks/Tourist.framework/Versions/A/Resources/en.lproj/offline.html?redirect=javascript%253adocument.write(1)";
          3. 在这个漏洞的利用过程中,可以发现操作系统和浏览器并没有出现问题,而是通过 url scheme 打开的应用程序【helpViewer】出现了问题。
          4. 几个巧妙的点:
            1. 利用 url scheme 中的 help 协议打开应用程序 Safari.help
            2. 使用双重 url 编码绕过 helpViewer 对路径的检查,打开一个可以执行 JavaScript 的页面
            3. 使用 helpViewer 的内置协议 x-help-script 打开应用程序(PoC不包含)
              1. 应该是隐藏了,部分细节???
                1. 那怎么办?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment