首页 网络安全 正文

BusyBox函数释放后使用漏洞CVE-2026-38753

摘要

栋科技漏洞库关注到 BusyBox awk_sub() 存在函数释放后使用漏洞,漏洞现在已经被追踪为CVE-2026-38753,CVSS 3.X评分为7.5。

BusyBox 被称作嵌入式 Linux 瑞士军刀,单个小程序整合三百余个 Linux 常用命令,可以裁剪定制,其完整参数少于标准 Linux 工具。

一、基本情况

BusyBox 被路由器、安卓、IoT 设备、轻量Linux系统普遍用,弥补精简系统缺少基础命令的问题,仅基础功能,体积极小、开源免费。

EMLOG Pro 2.6.13本地文件包含CVE-2026-46687

BusyBox 集成上百个常用Linux命令与工具开源软件套件,常用于嵌入式 Linux 与轻量化部署场景,各工具精简、部分高阶参数不支持。

栋科技漏洞库关注到 BusyBox awk_sub() 存在函数释放后使用漏洞,漏洞现在已经被追踪为CVE-2026-38753,CVSS 3.X评分为7.5。

二、漏洞分析

CVE-2026-38753漏洞是 BusyBox 工具集相关版本中的安全漏洞,漏洞源于 awk_sub() 函数接收的替换文本指针指向 awk 变量存储区。

正则表达式参数解析 as_regex()运行时修改该存储区,导致替换文本指针变为野指针;后续 strlen() 与替换循环读取该指针时引发异常。

具体来说,其中内置的 awk 解释器通过 editors/awk.c 中的 awk_sub() 函数实现 sub()/gsub() 替换语义;

该函数接收指向 awk 变量存储区的替换文本指针,调用 as_regex() 编译正则表达式,而正则表达式的求值过程会改写底层变量存储区,

导致替换文本指针悬空并被后续 strlen() 与替换循环继续访问,从而触发释放后使用。

攻击者可借助外部可控的 AWK 脚本使进程崩溃或耗尽资源,达到拒绝服务目的。

受影响版本中,busybox 1.38.0 及其同分支的 awk 实现并未对替换文本指针做生命周期隔离,

editors/awk.c 中的 awk_sub() 在调用 as_regex(rn, &sreg) 后继续使用同一 const char *repl 指针进入 strlen(repl) 与替换主循环,

而 as_regex() 内部的变量求值可能触发底层缓冲重分配或失效,使该指针成为悬挂指针,再被读取时即构成释放后使用,

外部 AWK 脚本可稳定触发 awk 进程崩溃,影响范围涵盖 busybox:busybox 制品与对应的 BusyBox 1.38.0 主分支 artifact。

1、解决方案:调用 as_regex() 前复制替换字符串,保证替换操作全程使用稳定内存缓冲区。

2、修改文件:editors/awk.c,新增4行代码

3、代码差异片段:

```diff
diff --git a/editors/awk.c b/editors/awk.c
index f15832b..8a51827 100644
--- a/editors/awk.c
+++ b/editors/awk.c
@@ -2555,6 +2555,7 @@ static char *awk_printf(node *n, size_t *len)
 static int awk_sub(node *rn, const char *repl, int nm, var *src, var *dest /*,int subexp*/)
 {
     char *resbuf;
+    char *repl_copy;
     const char *sp;
     int match_no, residx, replen, resbufsize;
     int regexec_flags;
@@ -2572,7 +2573,9 @@ static int awk_sub(node *rn, const char *repl, int nm, var *src, var *dest /*,in
     resbuf = NULL;
     residx = 0;
     match_no = 0;
+    repl_copy = xstrdup(repl);
     regex = as_regex(rn, &sreg);
+    repl = repl_copy;
     sp = getvar_s(src ? src : intvar[F0]);
 #if defined(REG_STARTEND)
     src_string = sp;
@@ -2662,6 +2665,7 @@ static int awk_sub(node *rn, const char *repl, int nm, var *src, var *dest /*,in
     setvar_p(dest ? dest : intvar[F0], resbuf);
     if (regex == &sreg)
         regfree(regex);
+    free(repl_copy);
     return match_no;
 }
```

补丁适用版本:2.48.1

三、影响范围

BusyBox ≤ 1.38.0

四、修复建议

BusyBox ≥ 1.39.0

五、参考链接

管理员已设置登录后刷新可查看



扫描二维码,在手机上阅读
评论
更换验证码
友情链接