BusyBox Wget工具包中的一个漏洞解决

描述

最近,虹科工业物联网团队在调查客户设备固件出现的常规CVE(CVE-2018-1000500)时发现了一个问题:通常情况下,当检测到一个会对设备产生严重破坏的CVE时,我们会建议客户对该组件进行升级或使用补丁。但是CVE早在2018年就已经发布,尽管具有8.1的高评分,却一直没有被修复,这引起了虹科研究人员的注意。

深入研究后,我们发现最初发布 CVE 的研究人员向维护人员提交过一个代码补丁,但是由于补丁存在破坏现有的功能的风险,该补丁被拒绝了。下面虹科工业物联网团队将会对这个问题进行详细阐述,首先让我们简要回顾一下 BusyBox和受影响的组件BusyBox Wget。

漏洞介绍

BusyBox 工具包在单个可执行文件中实现了大量 Linux 性能,甚至可以替代 Linux init 系统。体积小且具有灵活性的特点使得它在嵌入式设备中很受欢迎。最初的 Wget 是一个应用广泛的 GNU 实用程序,用于使用命令从Internet服务器中检索文件,经常用于系统脚本,包括用于软件更新等。

BusyBox 因为其紧凑的特点取代了 Wget,但它并不支持所有的安全功能和选项。特别是当与不具备有效 TLS 证书的服务器连接时,BusyBox 版本的 Wget 不会对其进行中止,而只会打印错误消息并继续下载。下面是对常规 Wget 和 BusyBox Wget 会产生不同行为的举例说明:

虹科电子

事实上,BusyBox的 TLS 库并不支持证书验证。原始的 Wget 可以支持,并且必须使用一个明显的命令行开关(-- no-check-certificate)来进行启动,以防跳过证书验证。

这就是BusyBox的漏洞所在。攻击者可以通过模拟服务器来拦截 Wget的 HTTPS 请求,或者使用 DNS/ARP 病毒将请求重定向到攻击者控制的服务器,或者直接进行网络流量拦截。因为攻击者并不需要有效的 TLS 证书,所以他们可以用任意文件来替换请求的下载。

如果被替代的下载包中含有软件模块或更新项,这可能会直接导致恶意代码执行。如果下载包含配置或数据,攻击者可能恶意影响设备的功能。即使客户端在安装或执行之前检查了下载文件的完整性和真实性,攻击者仍然可能会通过让客户端下载无效的多GB文件或者连接非法服务器而导致拒绝服务。

BusyBox团队处理方式

BusyBox的维护人员认为,修复Wget并让设备维持不具备有效TLS证书的情况会碱坏设备的重要功能。这是安全员和工程师之间的常见冲突:安全研究人员将更加愿意为了保障设备安全性而牺牲一些设备现有功能的发挥,而工程师则更倾向于维持设备的功能运作,特别是替代方案会对已经部署在现场的设备功能造成碱坏的情况。

唯一的变化是当检测到无效的 TLS 证书时,1.29.0版本会添加一条错误信息。该错误信息会被打印到标准输出中,但不会在系统日志中留下长久的痕迹,这意味着错误可能随时发生,攻击者可以利用该设备,而不会被管理员发现。

虹科建议

到目前为止,BusyBox Wget 支持在子进程中启动 OpenSSL 客户机来执行 TLS 操作。此客户端完全支持证书验证逻辑,该逻辑由命令行选项来控制。因此,虹科建议应用下面的补丁,以便明确地将证书检查添加到 BusyBox Wget 中。首先,确保设置以下配置标志,这将使BusyBox 使用OpenSSL 的TLS/SSL 客户端。

CONFIG_FEATURE_WGET_OPENSSL=y

然后应用以下补丁:

index f2fc9e215..6bcc24421 100644--- a/networking/wget.c+++ b/networking/wget.c@@ -662,7 +662,7 @@ static int spawn_https_helper_openssl(const char *host, unsigned port) pid = xvfork(); if (pid == 0) { /* Child */- char *argv[8];+ char *argv[11]; close(sp[0]); xmove_fd(sp[1], 0);

@@ -690,6 +690,11 @@ static int spawn_https_helper_openssl(const char *host, unsigned port) argv[6] = (char*)servername;

} + /* Abort on bad server certificate */+ argv[7] = (char*)“-verify”;+ argv[8] = (char*)“100”;+ argv[9] = (char*)“-verify_return_error”;+ BB_EXECVP(argv[0], argv); xmove_fd(3, 2); # if ENABLE_FEATURE_WGET_HTTPS

应用该补丁后,BusyBox Wget 目前展示正确,在一个无效的证书上停止(尽管带有一个通用的错误消息) :

虹科总结

在这个时代,使用嵌入式设备时我们都应该明白,为了功能而牺牲设备安全并向字段发布不安全的代码是不可行的。

这种做法在很大程度直接导致了物联网设备市场安全状况不佳。当然,高等级、多层次、硬件支持的安全性并不适用于每个产品,因为这涉及到成本和上市时间。但供应商应该期望他们的上游组件,比如像BusyBox的开源代码维护者,实施建立第一道防线所需的合理安全措施。

虹科 Vdoo 物联网设备安全防护与加固平台具有自动安全扫描产品可以帮助客户建立设备的安全配置文件,包括第三方组件可能引入的任何漏洞。从而慎重选择其组件供应商,而不需要过多的测试人员和团队。

责任编辑:haq

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分