首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >GitHub CVE扫描器:一键发现React与Next.js安全漏洞

GitHub CVE扫描器:一键发现React与Next.js安全漏洞

原创
作者头像
qife122
发布2025-12-28 08:39:51
发布2025-12-28 08:39:51
2440
举报

GitHub CVE扫描器

这是一个专业的GitHub仓库安全扫描工具,专门用于检测React和Next.js项目中的已知安全漏洞。脚本可直接在浏览器控制台中运行,无需本地安装,提供便捷的交互式扫描体验。

📋 功能特性

  • 零安装运行:直接在浏览器GitHub页面的开发者工具控制台中粘贴运行,无需配置复杂环境。
  • 精准漏洞检测:专注于检测两个关键的安全漏洞:
    • CVE-2025-55182:React Server Components漏洞(影响React 19.0.0, 19.1.0, 19.1.1, 19.2.0)。
    • CVE-2025-66478:Next.js App Router漏洞(影响Next.js 14.3 canary, 15.x, 16.x)。
  • 支持私有仓库:可配置GitHub个人访问令牌(PAT)以扫描私有仓库和所属组织的仓库。
  • 智能扫描:自动识别并跳过GitHub保留路径(如settings, explore等),提高扫描效率。
  • 详细报告:扫描完成后生成结构化的报告,清晰展示受影响的仓库、风险依赖和修复建议。
  • 请求友好:内置请求延迟机制(REQUEST_DELAY_MS, SCAN_DELAY_MS),避免触发GitHub API频率限制。

🚀 安装与运行指南

前提条件

  1. 一个现代浏览器(如Chrome, Firefox, Edge)。
  2. 一个GitHub账号(扫描私有仓库时需要)。
  3. (可选)一个GitHub个人访问令牌,用于扫描私有仓库。

使用步骤

  1. 打开浏览器控制台
    • 访问GitHub(例如 https://github.com)。
    • 打开开发者工具:
      • Chrome/Edge: 按 F12Ctrl+Shift+I (Windows) / Cmd+Option+I (Mac)。
      • Firefox: 按 F12Ctrl+Shift+K (Windows) / Cmd+Option+K (Mac)。
    • 切换到 Console(控制台) 标签页。
  2. 复制并执行脚本
    • 将提供的完整JavaScript代码(main.js的内容)全部复制。
    • 粘贴到控制台中,按 Enter 执行。
  3. 交互式配置扫描
    • 认证设置
      • 脚本会询问是否扫描私有仓库。点击 OK 并输入你的GitHub个人访问令牌(PAT)以扫描私有仓库;点击 Cancel 则仅扫描公开仓库。
      • 创建PAT:访问 https://github.com/settings/tokens,生成一个具有repo范围权限的新令牌。
    • 扫描模式
      • 随后可选择扫描特定用户、组织或开始大规模扫描。
    • 脚本将自动开始分析目标下的所有仓库。

💡 使用说明

执行脚本后,它将通过GitHub API获取仓库列表,并检查每个仓库的依赖文件(如package.json)。核心逻辑是解析dependenciesdevDependencies中的版本号,并与已知的易受攻击版本范围进行比对。

典型输出报告示例:

扫描完成后,控制台会输出类似以下结构的报告,清晰列出发现的问题。

代码语言:javascript
复制
// 示例输出结构
{
  "scannedUser": "exampleUser",
  "totalRepos": 42,
  "vulnerableRepos": 2,
  "vulnerabilities": [
    {
      "repo": "my-react-app",
      "url": "https://github.com/exampleUser/my-react-app",
      "cve": "CVE-2025-55182",
      "affectedPackage": "react",
      "version": "19.1.0",
      "fixedIn": ["19.1.2", "19.2.1"]
    },
    {
      "repo": "nextjs-project",
      "url": "https://github.com/exampleUser/nextjs-project",
      "cve": "CVE-2025-66478",
      "affectedPackage": "next",
      "version": "15.0.4",
      "fixedIn": ["15.0.5", "15.1.9"]
    }
  ]
}

根据报告,您可以:

  1. 直接访问问题仓库链接。
  2. 查看具体的漏洞编号(CVE)和受影响的包。
  3. 获取安全的版本号以进行升级。

🧠 核心代码解析

以下是项目中的部分核心功能代码,展示了版本比对和漏洞检查的核心逻辑。

代码语言:javascript
复制
/**
 * 将版本字符串解析为语义化版本对象
 * @param {string} versionStr - 版本字符串 (如 "19.1.0")
 * @returns {SemanticVersion|null} 解析后的版本对象或null
 */
function parseSemanticVersion(versionStr) {
  if (!versionStr || typeof versionStr !== 'string') return null;
  // 清理版本号前的特殊字符 (如 ^, ~, >=)
  const cleanStr = versionStr.replace(/[^0-9.]/g, '');
  const parts = cleanStr.split('.').map(Number);
  if (parts.length < 3 || parts.some(isNaN)) return null;
  return { major: parts[0], minor: parts[1], patch: parts[2] };
}

/**
 * 检查给定的React版本是否受CVE-2025-55182影响
 * @param {SemanticVersion} version - 要检查的版本
 * @returns {boolean} 如果易受攻击则为true
 */
function isReactVulnerableToCVE202555182(version) {
  // 精确匹配受影响的版本:19.0.0, 19.1.0, 19.1.1, 19.2.0
  const vulnerableVersions = [
    { major: 19, minor: 0, patch: 0 },
    { major: 19, minor: 1, patch: 0 },
    { major: 19, minor: 1, patch: 1 },
    { major: 19, minor: 2, patch: 0 }
  ];
  return vulnerableVersions.some(v => 
    v.major === version.major && 
    v.minor === version.minor && 
    v.patch === version.patch
  );
}

/**
 * 检查给定的Next.js版本是否受CVE-2025-66478影响
 * @param {SemanticVersion} version - 要检查的版本
 * @returns {boolean} 如果易受攻击则为true
 */
function isNextVulnerableToCVE202566478(version) {
  // 主要检查逻辑:影响15.x和16.x系列,但排除已修复的特定补丁版本
  if (version.major === 15) {
    // 15.x系列,检查是否低于安全版本
    // 逻辑简化示例:实际代码包含更复杂的范围匹配
    return version.minor >= 0 && version.patch < 5; // 示例条件
  }
  if (version.major === 16) {
    return version.minor === 0 && version.patch < 7; // 示例条件
  }
  // 检查14.3 canary版本
  if (version.major === 14 && version.minor === 3) {
    // 需检查canary版本号,此处逻辑简化
    return true;
  }
  return false;
}

/**
 * 扫描单个仓库的package.json以查找漏洞
 * @param {string} owner - 仓库所有者
 * @param {string} repo - 仓库名
 * @param {string} authToken - GitHub认证令牌
 * @returns {Promise<Array>} 发现的漏洞列表
 */
async function scanRepository(owner, repo, authToken) {
  const findings = [];
  try {
    // 构建获取package.json的URL
    const packageJsonUrl = `${GITHUB_RAW}/${owner}/${repo}/HEAD/package.json`;
    const headers = authToken ? { 'Authorization': `token ${authToken}` } : {};
    
    const response = await fetch(packageJsonUrl, { headers });
    if (!response.ok) return findings;
    
    const packageJson = await response.json();
    const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };
    
    // 检查React相关包
    const reactPackages = ['react', 'react-dom', 'react-server-dom-webpack', 'react-server-dom-parcel', 'react-server-dom-turbopack'];
    for (const pkg of reactPackages) {
      if (deps[pkg]) {
        const version = parseSemanticVersion(deps[pkg]);
        if (version && isReactVulnerableToCVE202555182(version)) {
          findings.push({
            type: 'CVE-2025-55182',
            package: pkg,
            version: deps[pkg],
            repository: `${owner}/${repo}`
          });
        }
      }
    }
    
    // 检查Next.js
    if (deps['next']) {
      const version = parseSemanticVersion(deps['next']);
      if (version && isNextVulnerableToCVE202566478(version)) {
        findings.push({
          type: 'CVE-2025-66478',
          package: 'next',
          version: deps['next'],
          repository: `${owner}/${repo}`
        });
      }
    }
  } catch (error) {
    console.error(`Error scanning ${owner}/${repo}:`, error);
  }
  
  // 添加请求延迟以避免速率限制
  await new Promise(resolve => setTimeout(resolve, REQUEST_DELAY_MS));
  return findings;
}

以上代码展示了项目的核心功能:

  1. 版本解析parseSemanticVersion 函数负责清理和标准化版本字符串。
  2. 漏洞检测isReactVulnerableToCVE202555182isNextVulnerableToCVE202566478 函数包含精确的版本匹配逻辑,用于判断特定版本是否在受影响范围内。
  3. 仓库扫描scanRepository 函数是主要工作流程,它获取仓库的 package.json,合并依赖项,并调用检测函数进行分析。它内置了错误处理和请求延迟,确保稳定运行。

通过组合这些函数,脚本能够系统性地遍历Git仓库并生成准确的安全评估报告。

6HFtX5dABrKlqXeO5PUv/42PiQmycmCbEdeLe8FrQrY=

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • GitHub CVE扫描器
    • 📋 功能特性
    • 🚀 安装与运行指南
      • 前提条件
      • 使用步骤
    • 💡 使用说明
    • 🧠 核心代码解析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档