来源笔记

Taint-Style Vulnerability Detection and Confirmation for Node.js Packages Using LLM Agent Reasoning

LLM AgentsNodejs SecurityVulnerability DetectionExploit GenerationSoftware Supply Chain

LLMVD.js 是一个基于 LLM 智能体的流水线,用于在不依赖专门的静态或动态污点分析引擎的情况下,查找并确认 Node.js 包中的污点型漏洞。根据摘录中的基准测试,它确认的漏洞远多于以往的 Node.js 分析工具,也在新发布的 npm 包中找到了经过验证的问题。

  • Node.js 包是软件供应链的重要组成部分,许多包里都有命令注入、代码注入、路径穿越和原型污染等污点型缺陷。
  • 现有程序分析工具很难处理 JavaScript 的动态特性、类型信息不足、Node.js 原生行为、脆弱的解析和插桩流程,以及字符串和正则约束上的 SMT 求解。
  • 只发现问题还不够;一个有用的系统还要用能运行的概念验证输入确认漏洞是否可利用,这样团队才能把真实漏洞和误报区分开。
  • 论文实现了 LLMVD.js,这是一个多阶段的 ReAct 风格智能体,读取包代码,搜索可疑数据流,提出候选漏洞,并把每个候选项交给后续阶段处理。
  • 这个流水线有四个主要阶段:Finder 提出可能的漏洞,Judge 根据可达性和可利用性筛掉候选项,Constraints Inferencer 提取利用时必须满足的条件,Exploiter 生成并运行概念验证代码。
  • 系统不再依靠专门的分析引擎推导污点路径,而是让 LLM 基于原始源代码推理,并配合代码搜索、文件检查和包执行等轻量工具。
  • 确认阶段使用按漏洞类型划分的执行判定器,依据具体副作用来判断:路径穿越用标记文件,代码注入用标记函数,原型污染用对象属性探针,命令注入用清理后的标记工件。
  • 这个设计先追求较高召回率,再通过有执行结果支撑的验证提高精度。
  • 在公开基准包上,LLMVD.js 确认了 84% 的漏洞,而摘录中提到的以往程序分析工具只有 不到 22%
  • 论文还说,LLMVD.js 的表现 优于之前一个 LLM 加程序分析的混合方法(PoCGen),同时 不需要漏洞标注,也不需要先前的漏洞报告
  • 260 个最近发布的包 上,没有真实漏洞标签时,传统工具最多只为 2 个包 生成了经过验证的漏洞利用,而 LLMVD.js 为 36 个包 生成了经过验证的漏洞利用。
  • 论文报告了 36 个此前未公开的漏洞,这些漏洞出现在最近发布的 Node.js 包中,作者已将它们披露给维护者,并收到了 3 个维护者的确认
  • 摘录没有给出按漏洞类型、数据集划分,或每个数字对应的完整基线名称。