OpenBSD systrace systrace_preprepl本地整数溢出漏洞

- AV AC AU C I A
发布: 2025-03-27
修订: 2025-03-27

OpenBSD是一款开放源代码Unix类操作系统,OpenBSD的systrace功能可以允许或拒绝被管理进程所执行的syscall。 systrace的内核组件中存在整数溢出漏洞,允许攻击者通过在systrace ioctl()中指定很大的整数值触发这个漏洞,导致绕过安全检查、向任意内核地址越界写入空字节或读取内核内存块。 漏洞代码在systrace_preprepl函数中: for (i = 0, len = 0; i < repl->strr_nrepl; i++) { len += repl->strr_offlen[i]; if (repl->strr_offlen[i] == 0) continue; if (repl->strr_offlen[i] + repl->strr_off[i] > len) return (EINVAL); } /* Make sure that the length adds up */ if (repl->strr_len != len) return (EINVAL); /* Check against a maximum length */ if (repl->strr_len > 2048) return (EINVAL); 这里strr_offlen[i] + strr_off[i]可能溢出,导致攻击者可以选择很大数值的strr_offlen或strr_off;len变量也存在整数溢出,轻易地满足strr_len <= 2048这个条件。然后在systrace_replace中就会使用攻击者所提供的超大值: if (repl->strr_flags[i] & SYSTR_NOLINKS) { ret = systrace_fname(strp, kdata, repl->strr_offlen[i]); 在systrace_fname中: int systrace_fname(struct str_process *strp, caddr_t kdata, size_t len) { if (strp->nfname >= SYSTR_MAXFNAME || len < 1) return...

0%
暂无可用Exp或PoC
当前有0条受影响产品信息