netcat -e:GAPING_SECURITY_HOLE

netcat -e:GAPING_SECURITY_HOLE

为什么 BSD 版本 1.10nc禁用了-e其他所谓不安全发行版中的选项,而即使使用“安全”版本,也可以轻松实现相同的危险功能,如下所示nc

$ # Machine A
$ mkfifo pipe
$ nc -l 4000 <pipe | bash >pipe

$ # Machine B
$ nc MachineA 4000

现在,如果我要在脚本中完成机器 A 上的咒语(如果传递了 `-e' 参数,则有效地执行上述操作),我实际上已经引入了“巨大的安全漏洞”,而无需降到 Makefile 和构建级别。

那么,为什么要用#define-ingGAPING_SECURITY_HOMEnetcat.c

答案1

虽然我没有明确的答案,但我相信只有当你启用nc-e是 setuid root。(由于nc通常用于绑定到端口,因此可能会打包 setuid root,以使所有用户都能绑定到 1024 以下的特权端口。)

在这种情况下,给定的进程nc -e是否会exec以 root 身份运行 - 这意味着它会让任何用户运行以 root 身份执行任何进程。我相信你会意识到这是一个巨大的安全漏洞。相比之下,如果你运行自己的进程并使用管道将其连接到nc,则该进程不会以 root 身份运行,除非你有其他方式提升它(如sudo访问权限)。

作为重力指出,netcat 的原始发布公告抱怨

商业供应商可能会打包 [netcat] setuid root 并-DGAPING_SECURITY_HOLE开启但没有记录。

我认为这增强了我的理论的可信度。:)

答案2

原始发布公告

强制性的供应商抨击:如果“nc”几年前就成为标准实用程序,商业供应商可能会将其打包为 setuid root 并 -DGAPING_SECURITY_HOLE启用但不记录。希望 netcat 能够帮助人们找到并修复这种不断出现的无脑漏洞,通过允许更轻松地对网络层的“裸机”进行实验。

这并没有让事情变得更清楚...

答案3

我可以使用“netcat -e”来运行其他应用程序,例如 imap 或 pop3。部分“#ifdef GAPING_SECURITY_HOLE”可能包含一个允许您运行 shell 的错误,这就是为什么它默认被 ifdefed 出来。ifdef 包装安全关键部分。

相关内容