sola-st/PoCGen

GitHub: sola-st/PoCGen

PoCGen 是一个基于大语言模型的自动化工具,能够根据漏洞报告为有安全缺陷的 npm 包生成概念验证利用代码并在沙箱中验证。

Stars: 12 | Forks: 3

# PoCGen:为有漏洞的 npm 包生成概念验证漏洞利用代码 本仓库包含用于为有漏洞的 npm 包生成概念验证漏洞利用代码的工具,此外,还包含评估结果、LLM 提示和响应,以及用于评估的数据集。 ## 构建 Docker 镜像 1. 克隆仓库: ``` git clone https://github.com/sola-st/PoCGen ``` 2. 安装依赖: ``` cd PoCGen npm install ``` 3. 构建 docker 镜像: ``` docker build -t patched_node -f patched_node.Dockerfile . docker build -t gen-poc_mnt . ``` ## 设置 该仓库包含一个包装脚本,用于在 docker 容器中运行该工具。 该脚本需要在当前目录下创建一个包含以下内容的 `.env` 文件: ``` OPENAI_API_KEY=sk-proj-xxx # required for LLM calls GITHUB_API_KEY=github_pat_xxx # required for fetching GHSA-IDs ``` 唯一必需的参数是漏洞 ID,应为 GitHub Advisory ID 或 Snyk ID。 该工具将自动从相应的 API 获取漏洞报告或从网站抓取报告。 ## 为有漏洞的包创建 PoC 从仓库根目录运行此脚本: ``` ./run-mnt.sh output node index.js create -v GHSA-m7p2-ghfh-pjvx ``` 这将在以下路径为 [GHSA-m7p2-ghfh-pjvx](https://github.com/advisories/GHSA-m7p2-ghfh-pjvx) 创建一个测试文件: `./output/GHSA-m7p2-ghfh-pjvx/test.js`。 ## 运行测试 对于大多数漏洞,建议使用提供的 docker 镜像运行测试: ``` ./run-mnt.sh output node --test /output//test.js ``` 对于 **ReDoS** 漏洞,应使用以下参数运行测试: ``` ./run-mnt.sh output node --test --enable-experimental-regexp-engine-on-excessive-backtracks --regexp-backtracks-before-fallback=30000 output//test.js ``` 对于涉及长时间运行任务(例如 Web 服务器)的漏洞,请使用以下参数运行测试: ``` ./run-mnt.sh output node --test --test-force-exit /output//test.js ``` ## 复现评估结果 首先,请按照上面的安装说明进行操作。 ### RQ1:有效性 要在 SecBench.js 数据集上运行 PoCGen,请使用以下命令: ``` ./run-mnt.sh output node index.js pipeline -v dataset/SecBench.js/*\.all ``` 这将在 `output` 目录下创建一个目录,其中包含每个漏洞 ID 对应的子目录。 每个子目录包含有漏洞的包、名为 `output_*.log` 的执行日志文件(显示步骤和执行输出)、名为 `prompt.json` 的 LLM 交互日志文件(显示带有所有元数据的 LLM 交互)、名为 `RunnerResult_*.json` 且包含有关尝试的所有信息的 json 文件,以及作为名为 `test.js` 的测试文件的概念验证漏洞利用代码。 要在 SecBench.js 数据集上运行 Mini-SWE-agent,请使用以下命令: ``` ./run-mnt.sh output node index.js pipeline --runner RunnerMiniSWEAgent -v dataset/SecBench.js/*\.all ``` 这会创建相同的目录结构,不同之处在于它会为每个漏洞创建一个 `mini_swe_workspace` 子目录,并将 PoC 漏洞利用代码作为 `poc.js` 存储在其中。 ### RQ2:消融研究 可以使用 `--refiner ` 指定 refiner。例如: ``` ./run-mnt.sh output node index.js pipeline -v dataset/SecBench.js/*\.all --refiner C0Refiner ``` 评估中使用了以下值: - `noTaint` 对应 noTaint - `C7Refiner` 对应 noUsageSnippets - `C6Refiner` 对应 noFewShot - `C3Refiner` 对应 noDebugger - `C2Refiner` 对应 noErrorRefiner ### RQ3:成本 对于每个漏洞,token 成本分别存储在 `RunnerResult_*.json` 文件的 `model.totalPromptTokens` 和 `model.totalCompletionTokens` 字段中,分别对应请求和响应 token。 ### RQ4:较新的漏洞 ``` ./run-mnt.sh output node index.js pipeline -v dataset/ghsa_2025-2026.txt ```
标签:AI安全工具, CISA项目, CVE复现, DevSecOps, DLL 劫持, Docker容器化, GitHub Advisory, Maven, MITM代理, Node.js安全, npm安全, OpenAI API, Petitpotam, PoC生成, Python/Node.js, ReDoS防御, SAST, Snyk漏洞库, 上游代理, 代码安全分析, 反取证, 大语言模型, 安全评估, 漏洞验证, 盲注攻击, 自动化漏洞利用, 自定义脚本, 请求拦截, 软件供应链安全, 远程方法调用, 静态应用安全测试