You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeQL中能否追踪free函数参数克隆值以检测UAF漏洞?

解决CodeQL无法追踪别名指针/结构体成员的Use-After-Free问题

要覆盖你提到的别名指针、结构体成员这类UAF场景,核心思路是从内存分配点(malloc/calloc/realloc等函数)开始,追踪该内存块的所有引用链,而不是仅聚焦free函数的参数。具体实现可以拆解为以下步骤:

  1. 定义内存分配实体
    识别所有内存分配函数的返回值,将其标记为AllocatedMemory实体,记录分配的上下文信息(如分配位置、大小等)。

  2. 追踪全链路引用传播

    • 处理指针赋值:包括直接赋值(如char *b = a)、函数参数传递/返回值、结构体指针复制(如MyStruct *t = s),将所有指向同一AllocatedMemory的指针关联起来。
    • 处理结构体成员:当结构体中的指针成员被赋值或结构体指针被复制时,把成员指针和对应的AllocatedMemory绑定,比如struct s *q = p后,q->buf要和p->buf指向的内存块保持关联。
  3. 标记内存释放状态
    当检测到free调用时,找到其参数对应的AllocatedMemory实体,标记该内存为已释放,并记录释放位置。

  4. 检测Use-After-Free行为
    遍历所有内存读写操作(如*b = 'x'、t->buf[0] = 'y'),检查当前操作的指针是否关联到已标记为释放状态的内存块,且操作发生在释放点之后,满足则判定为UAF漏洞。

举个具体场景的检测逻辑:

// 测试代码
char *a = malloc(10);
char *b = a;
free(a);
*b = 'x'; // 目标UAF场景

从malloc的返回值a开始,将b关联到同一AllocatedMemory;free(a)标记该内存已释放;后续检测*b的写操作时,发现其指向的内存已被释放,即可触发告警。

无需单独针对“克隆引用”做特殊函数追踪,而是通过CodeQL的数据流/污点分析框架,定义完整的指针传播规则,覆盖所有可能的引用传递路径即可。

内容的提问来源于stack exchange,提问作者Jija Biba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 12:27:33