31,496 颗星、MIT 许可、社区 13,600 模板:nuclei 是怎么把 CVE 扫描跑进分钟级的

说起开源漏洞扫描,你会想到什么?OpenVAS 太重,Nessus 太贵,Burp Suite 太复杂——对于想快速跑一遍”这个服务有没有已知漏洞”的工程师来说,这些工具都谈不上顺手。

nuclei 想解决的就是这个问题。

这个由 ProjectDiscovery 维护的开源扫描器,用 YAML 模板定义检测逻辑,跑在 Go 里,一个二进制文件,无需安装,自带模板库,5 分钟上手。

GitHub:https://github.com/projectdiscovery/nuclei(31,496 ⭐,3,892 Fork,MIT 许可证)


速度,是核心卖点

传统商业扫描器(Nessus、Qualys)基于 CVE 签名库,每次扫描前要同步插件、构建资产清单,一个 /24 网段可能跑上几个小时。nuclei 的做法是:给你一份 YAML 模板列表,你指定目标,它发送请求,匹配响应,直接出结果。

实测:一个 /24 网段,nuclei 可以在几分钟内跑完 7,000+ 模板检查。这不是”快 for a scanner”,是真的快。

速度背后的原因很简单——Go 并发模型 + Stateless 扫描。无状态意味着不需要维护资产数据库,每次扫描都是独立的,输入目标列表,输出结果,干净利落。


模板体系:真正的护城河

nuclei 真正的价值在于它的模板生态。

官方模板库(nuclei-templates) 约有 13,600 个模板,其中约 4,400 个覆盖 CVE,其余涵盖错误配置、暴露面板、默认凭证、技术指纹等场景。模板按协议分类,支持 HTTP、DNS、TCP、SSL、Websocket 和无头浏览器。

更关键的是社区驱动。一个新 CVE 披露后,nuclei 社区通常在几小时到几天内就能产出可用模板——比商业厂商的响应快一到两个量级。2026 年 4-5 月的两个月里,模板库新增 226 个模板,覆盖 123 个 CVE,其中约 10 个属于 CISA KEV(已知被利用漏洞)列表。

模板门槛极低。一个检测逻辑就是一段 YAML:

id: cve-2026-XXXX
info:
  name: Example CVE Detection
  author: security-researcher
  severity: high
http:
  - method: GET
    path: "{{BaseURL}}/vulnerable-endpoint"
    matchers:
      - type: word
        words:
          - "vulnerable_response_string"

你能读懂这段逻辑,说明你也能写。这和商业扫描器的封闭规则库是本质区别——检测逻辑是透明的,不是厂商的黑箱。


适合谁,不适合谁

适合:

  • AppSec / 安全工程师:快速扫一批互联网资产,验证”这个 CVE 我们的资产有没有”
  • Bug Bounty 猎人:recon 管道接 nuclei,自动把目标列表变成可操作的漏洞线索
  • DevSecOps 团队:CI/CD 里跑 nuclei,输出 SARIF 或 JSON,匹配 GitHub Security Advisory
  • 初创 / 小团队:免费、无 IP 数量限制、无商业合同,一个二进制走天下

不适合:

  • 需要合规报告(PCI DSS、CIS)的场景——这需要认证扫描,nuclei 不做这个
  • 需要认证扫描(拿系统账号登录,从内部检查 patch 级别)——这是 OpenVAS / Nessus 的强项
  • 需要资产管理和风险趋势(”这台服务器三个月前什么状态”)——nuclei 是无状态的,不保存历史

和商业工具的对比

nuclei Nessus Professional Qualys VMDR
价格 免费(MIT) $4,236/年/-seat ~$10,000+/年
模板来源 社区 13,600+ 厂商维护 厂商维护
CVE 响应速度 小时~天 周~月 周~月
认证扫描 ❌ ✅ ✅
合规报告 ❌ ✅ ✅
资产历史 ❌ ✅ ✅
CI/CD 集成 原生 需企业版 需企业版

很多成熟安全团队的做法是:商业扫描器跑合规和内部网络认证扫描,nuclei 跑外部资产的快速 CVE 验证和自定义检查。两者互补,不是非此即彼。


一个真实的约束:CVE-2026-41646

扫别人之前,先看看自己。

nuclei 3.0.0~3.8.0 版本存在 JS 协议安全绕过漏洞(CVE-2026-41646,CVSS 5.5),允许恶意目标服务器通过 require() 函数读取扫描主机上的 .js 和 .json 文件。官方已在 v3.8.0 修复。

此外还有:

  • CVE-2026-41645(CVSS 5.3):HTTP 响应数据中的 DSL 表达式注入,可泄露主机环境变量
  • CVE-2026-41282(CVSS 4.0):-env-vars 开启时,DSL 表达式注入风险

建议:运行 nuclei 3.8.0 及以上版本,不要对不可信目标开启 -env-vars 参数。

漏洞详情见阿里云漏洞库:https://avd.aliyun.com/detail?id=AVD-2026-41646


下一步:怎么用起来

安装(一条命令):

# Go
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest

# 或者 Docker
docker pull projectdiscovery/nuclei:latest

首次运行自动下载模板,也可以手动更新:

nuclei -update-templates

扫一个目标,高危优先:

nuclei -u https://your-target.com -severity critical,high

GitHub Actions 集成示例(fail on critical findings):

- name: Run Nuclei scan
  run: |
    nuclei -u ${{ env.TARGET_URL }} 
      -t cves/ -t misconfigurations/ 
      -severity critical,high 
      -json -o nuclei-results.json
- name: Fail on critical
  if: jq -e '.[] | select(.info.severity == "critical")' nuclei-results.json
  run: echo "Critical vulnerabilities found" && exit 1

推荐扫描节奏:

  • 互联网资产:每日一次,用 cron 调度,结果 diff,只告警新增发现
  • CI/CD:在 staging 环境跑 nuclei,severity=critical/high 时 fail build

资源链接


一句话总结:nuclei 是一个让”快速检查这个资产有没有已知漏洞”变得像跑单元测试一样简单的工具。免费、MIT 许可、社区驱动,唯一需要的就是你知道自己要扫什么。

评论区

0 条评论

登录后可评论。

星火·GitHub 快讯 15 阅读