返回目录
开源项目安全工具类新手

Windows CVE Scanner — 用 PowerShell 扫描已安装 Windows 软件中的已知 CVE

Windows CVE Scanner 是 ValtersIT 平台开源发布的 PowerShell 单文件脚本(约 350 行),通过读取控制面板“程序和功能”所使用的标准 Uninstall 注册表键(64 位、32 位及每用户安装项)枚举本机已安装软件,仅把发布者、产品名、版本以及一个本地生成的随机标识提交给 ValtersIT CVE API 进行已知 CVE 匹配,不上传 IP、主机名、MAC 地址、密钥、密码或任何文件内容。脚本采用 Apache-2.0 许可,需自备 API Key,可交互运行或用计划任务定时扫描。

0 次阅读2026/09/30 发布
Windows CVE Scanner — 用 PowerShell 扫描已安装 Windows 软件中的已知 CVE 来源图片

社区作者 · zZz

它解决什么问题

项目用途

Windows CVE Scanner 用于在 Windows 机器上用 PowerShell 扫描“本机已安装软件”中存在的已知 CVE。它通过读取标准卸载(Uninstall)注册表键来枚举已安装程序——即“控制面板 > 程序和功能”所读取的同一批位置,覆盖 64 位卸载键、32 位卸载键以及每用户安装项——然后把生成的组件清单提交至 ValtersIT API 与已知 CVE 做匹配。

工作原理与数据边界

  • 接收的数据:仅发布者(publisher)、产品名、版本(例如 Mozilla Firefox 129.0.2 by Mozilla),外加一个本地生成的随机标识符,用于让同一台机器的重复扫描被识别为同一系统。
  • 从不接收:本机 IP 地址、主机名、MAC 地址、加密密钥、密码或任何文件内容。除“发布者 + 产品 + 版本(+ 随机标识符)”外,没有任何信息离开该脚本。
  • 不做的事:不读取标准 Uninstall 注册表键以外的位置,不上传文件,除了这一次扫描提交调用之外没有后台回连(phone-home)。
  • 可自行审计:开源、单个文件、约 350 行,审阅 ValtersIT-Scan.ps1 即可,没有其他程序在运行。

输出示例(摘自来源)

脚本先打印本机已安装软件清单(示例为 87 项,含 7-Zip、Mozilla Firefox、Notepad++ 等名称/版本/发布者),结尾说明“本机未读取或传输 IP 地址、主机名、MAC 地址、文件内容或凭据”;随后输出提交结果与匹配到的 CVE:

代码
[+] Scan submitted. 87 component(s) sent for matching.
{
  "matched_cves": 1,
  "results": [
    {"slug": "mozilla-firefox", "version": "129.0.2", "cve_id": "CVE-2026-27310", "cvss": 4.3, "patched_in": "130.0.1"}
  ]
}

后续动作建议:把结果中的 cve_id 交叉比对 https://www.valtersit.com/cve/CVE-XXXX-XXXXX/ 获取完整报告(CVSS、EPSS、漏洞利用可用性、补丁指引);使用 -Json 运行,并在每个补丁周期后对比输出差异。

授权使用要求

来源明确要求:仅对你拥有、或已获得明确书面授权评估的机器运行。首次扫描前脚本会展示授权确认提示,并要求手动输入 YES 才会继续,输入其他任何内容都会中止且不扫描。该限制由脚本中的 Confirm-AuthorisedUse 实现。

许可证

Apache-2.0(见 LICENSE 与 NOTICE),按“不提供任何担保”方式提供。“ValtersIT”名称及 ValtersIT 徽标是 Valters Capital, SIA 的商标,不在许可范围内。

适用对象

Windows 终端用户、IT 运维与安全人员、需要以最小数据外发方式做软件资产与漏洞排查的个人或团队;脚本只读注册表,不安装、删除或修改任何内容,读取这些键不需要管理员权限,因此也适合在现有生产系统上做手动核查。

维护与反馈

维护者 Hugo Valters,请勿在 GitHub/GitLab 开 issue(作者不监控),问题请通过联系表单 https://www.valtersit.com/contacts/ 反馈。

待核验信息

  • 具体 API 调用端点、配额与计费细则(页面仅给出定价页链接)。
  • 匹配所用 CVE 数据源范围与更新频率(页面未说明)。
  • 示例输出中的 CVE 编号与版本为文档示例,实际结果需以运行时 API 返回为准。

— 本文由 AI 根据公开来源辅助整理,命令、版本与许可证请在使用前到原始页面复核。

安装 / 开始使用

准备环境

操作系统:Windows;

可复制命令
PowerShell 版本要求:Windows PowerShell 5.1

(系统内置)或

可复制命令
PowerShell 7+

,无需安装任何模块。

  • 读取标准卸载注册表键不需要管理员权限。
  • 需要 ValtersIT API Key,申请地址:https://www.valtersit.com/cve/pricing 。
  • 仅对你拥有或获得明确书面授权评估的机器运行。

第一步:获取脚本(二选一)

方式 A:克隆仓库

代码
# GitHub
git clone https://github.com/hugovalters/windows-cve-scanner
cd windows-cve-scanner

# GitLab
git clone https://gitlab.com/valtersit/windows-cve-scanner
cd windows-cve-scanner

方式 B:一行命令下载(不需要 git)

代码
# GitHub
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/hugovalters/windows-cve-scanner/main/ValtersIT-Scan.ps1" -OutFile "ValtersIT-Scan.ps1"

# GitLab
Invoke-WebRequest -Uri "https://gitlab.com/valtersit/windows-cve-scanner/-/raw/main/ValtersIT-Scan.ps1" -OutFile "ValtersIT-Scan.ps1"

第二步:设置 API Key(两种方式任选其一)

代码
# 方式 1:环境变量(推荐)
$env:VALTERSIT_API_KEY = "vit_v1_your_key_here"

# 方式 2:直接在 ValtersIT-Scan.ps1 中修改一行
# $ApiKey = "vit_v1_your_key_here"

第三步:运行脚本

代码
.\ValtersIT-Scan.ps1
  • 首次运行必须在交互界面中确认授权:脚本会显示“ValtersIT Scanner — Authorised Use Confirmation”提示,只有手动输入 YES 才会继续扫描,输入其他内容则中止且不扫描。
  • 如果执行策略禁止运行脚本,可只对本次会话绕过:
代码
powershell -ExecutionPolicy Bypass -File .\ValtersIT-Scan.ps1
  • 或先解除下载文件的锁定:
代码
Unblock-File .\ValtersIT-Scan.ps1
  • 建议先用 -Json 参数运行并在每次补丁周期后 diff 输出,以观察变化。

第四步:可选——用任务计划程序定时扫描

页面给出的示例为每天 04:00 运行;因为 -Yes 需要此前已交互确认过授权,所以先手动交互运行一次再注册任务:

代码
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument '-ExecutionPolicy Bypass -File "C:\ValtersIT\ValtersIT-Scan.ps1" -Yes'
$trigger = New-ScheduledTaskTrigger -Daily -At 4am
Register-ScheduledTask -TaskName "ValtersIT Windows Scan" -Action $action -Trigger $trigger -RunLevel Highest

一行命令方式(设置密钥后直接带 -Yes 运行):

代码
$env:VALTERSIT_API_KEY = "vit_v1_xxx"; .\ValtersIT-Scan.ps1 -Yes

不同环境的部署路径

  • 全新干净系统:无需安装任何依赖(受支持的 Windows 版本均自带 PowerShell)。克隆或下载脚本、设置 VALTERSIT_API_KEY、先交互运行一次确认授权,然后注册上面的计划任务即可。
  • 现有生产系统:该工具只读取标准 ...\CurrentVersion\Uninstall\* 注册表键(与“控制面板”已暴露的只读数据相同),从不安装、删除或修改任何内容,读取这些键也不需要管理员权限。把单个文件放到任意位置,导出 API Key,先手动运行一次再安排计划任务。

常见问题

  • 脚本无法执行/被执行策略拦截:使用 powershell -ExecutionPolicy Bypass -File .\ValtersIT-Scan.ps1,或先执行 Unblock-File .\ValtersIT-Scan.ps1。
  • 扫描没有开始:检查是否在授权确认提示处输入了 YES;-Yes 要求此前已有一次交互确认。
  • 匹配结果为空:先确认 VALTERSIT_API_KEY 已正确设置(环境变量或脚本内 $ApiKey),并确认 API 计划有效(定价页 https://www.valtersit.com/cve/pricing )。
  • 数据隐私顾虑:只发送发布者 + 产品 + 版本(以及一个本地随机标识符);IP 地址、主机名、MAC 地址、密钥、密码与文件内容均不读取或传输;脚本为开源单文件,可自行审计。
  • 反馈问题:不要在 GitHub/GitLab 提 issue(作者不监控),请通过 https://www.valtersit.com/contacts/ 联系。

适用场景

在自有 Windows 机器上盘点已安装软件并匹配已知 CVE
为补丁周期前后的漏洞变化做对比(配合 -Json 输出 diff)
在现有生产系统上做只读
低外发数据的软件资产核查
通过任务计划程序实现每日自动 CVE 扫描(示例为 04:00)
安全审计场景中验证一个可自行审阅的单文件脚本的数据边界
为 IT 运维提供可在无管理员权限下运行的轻量漏洞排查手段