LoserLab/bigint-buffer-safe

GitHub: LoserLab/bigint-buffer-safe

修复 bigint-buffer 高危漏洞的纯 JavaScript 替代库,解决 Solana 生态 CVE-2025-3194 缓冲区溢出问题

Stars: 1 | Forks: 0

# bigint-buffer-safe [`bigint-buffer`](https://www.npmjs.com/package/bigint-buffer) 的安全、纯 JS 替代品。修复了 [CVE-2025-3194](https://github.com/advisories/GHSA-3gc7-fjrx-p6mg)(CVSS 7.5,缓冲区溢出 / DoS)。 零依赖。无原生绑定。适用于 Node.js 和浏览器。 ## 为什么会有这个库? 原始的 `bigint-buffer` 包存在一个**高危缓冲区溢出漏洞**([CVE-2025-3194](https://github.com/advisories/GHSA-3gc7-fjrx-p6mg),CVSS 7.5),当传入 `toBigIntLE(null)` 或其他无效输入时,会导致进程崩溃。维护者自 2019 年 10 月以来未发布更新。依赖于它的 [`@solana/buffer-layout-utils`](https://github.com/solana-labs/buffer-layout-utils) 包已于 2025 年 1 月归档。上游不会提供修复。 此漏洞通过传递依赖链影响整个 Solana 生态系统: ``` bigint-buffer → @solana/buffer-layout-utils → @solana/web3.js v1.x → @solana/wallet-adapter-* ``` **bigint-buffer-safe** 是一个具有适当输入验证的纯 JavaScript 替代品。API 与 `bigint-buffer@1.1.5` 兼容。 ## 安装 ``` npm install bigint-buffer-safe ``` ### Solana 项目的直接替代方案(推荐) 将其添加到您的 `package.json` 中,以替换整个依赖树中的 `bigint-buffer`: **npm** (v8.3+): ``` { "overrides": { "bigint-buffer": "npm:bigint-buffer-safe@^1.0.0" } } ``` **yarn**: ``` { "resolutions": { "bigint-buffer": "npm:bigint-buffer-safe@^1.0.0" } } ``` **pnpm**: ``` { "pnpm": { "overrides": { "bigint-buffer": "npm:bigint-buffer-safe@^1.0.0" } } } ``` **直接使用 GitHub**(如果尚未发布到 npm): ``` { "overrides": { "bigint-buffer": "github:LoserLab/bigint-buffer-safe" } } ``` 然后重新安装: ``` rm -rf node_modules package-lock.json && npm install ``` 验证漏洞是否已解决: ``` npm audit ``` ## API 与 `bigint-buffer@1.1.5` 完全相同: ``` import { toBigIntBE, toBigIntLE, toBufferBE, toBufferLE } from "bigint-buffer-safe"; // Buffer → BigInt toBigIntBE(Buffer.from([0x01, 0x00])); // 256n toBigIntLE(Buffer.from([0x00, 0x01])); // 256n // BigInt → Buffer toBufferBE(256n, 2); // toBufferLE(256n, 2); // ``` ### 与原版有什么不同? **输入验证。** 无效输入会抛出 `TypeError`,而不是导致进程崩溃: ``` // Original bigint-buffer: CRASHES (CVE-2025-3194) toBigIntLE(null); // bigint-buffer-safe: throws TypeError toBigIntLE(null); // TypeError: toBigIntLE: expected a Buffer, got null ``` **无原生绑定。** 原版附带 N-API C++ 绑定,这些绑定在浏览器和打包工具中会静默失败(臭名昭著的 `"bigint: Failed to load bindings"` 警告)。本包是纯 JavaScript。 ## 基准测试 纯 JS,无原生绑定。在 Apple Silicon(M 系列)、Node.js 上测试,每项 100 万次迭代。 | 操作 | 大小 | 每秒操作数 | |---|---|---| | `toBigIntBE` | u64 (8 字节) | 9,079,934 | | `toBigIntLE` | u64 (8 字节) | 6,128,182 | | `toBigIntBE` | u128 (16 字节) | 7,018,804 | | `toBigIntLE` | u128 (16 字节) | 5,069,809 | | `toBufferBE` | u64 (8 字节) | 5,569,161 | | `toBufferLE` | u64 (8 字节) | 5,183,747 | | `toBufferBE` | u128 (16 字节) | 7,063,305 | | `toBufferLE` | u128 (16 字节) | 6,533,752 | 对于 Solana 程序中使用的 u64 和 u128 整数(lamports、代币金额、时间戳),性能绰绰有余。原版的 N-API 绑定对于非常大的缓冲区速度更快,但这些大小在 Solana 中并不使用。 自行运行基准测试: ``` npx tsx bench/index.ts ``` ## 常见问题 ### 谁会受到影响? 任何使用 `@solana/web3.js` v1.x(版本 1.43.1 到 1.98.x)的项目。运行 `npm ls bigint-buffer` 检查它是否在您的依赖树中。 ### 这会影响 @solana/kit (web3.js v2) 吗? 不会。`@solana/kit` 没有任何第三方依赖,并且不使用 `bigint-buffer`。如果您已经迁移到 Kit,则不会受到影响。 ### 那么 "bigint: Failed to load bindings" 警告呢? 该警告来自 `bigint-buffer` 的原生 N-API 绑定在打包环境中加载失败。用 `bigint-buffer-safe` 替换可以消除此警告,因为该包是纯 JavaScript。 ### 这是一个永久性修复吗? 这是针对仍使用 `@solana/web3.js` v1.x 的项目的临时方案。永久解决方案是迁移到 [`@solana/kit`](https://github.com/anza-xyz/kit),它具有零外部依赖。 ### 这与 bigint-buffer-fixed 有什么区别? [`bigint-buffer-fixed`](https://www.npmjs.com/package/bigint-buffer-fixed) 是另一个社区分支。`bigint-buffer-safe` 完全移除了原生 N-API 绑定(消除了 "Failed to load bindings" 警告),包含完整的测试套件(64 个测试),并提供 TypeScript 类型定义。 ## 长期修复方案 此包是针对 `@solana/web3.js` v1.x 项目的临时方案。永久解决方案是迁移到 [`@solana/kit`](https://github.com/anza-xyz/kit)(web3.js v2),它具有零外部依赖且根本不使用 `bigint-buffer`。Solana Foundation 还发布了 [ConnectorKit](https://www.connectorkit.dev/)(`@solana/connector`)作为钱包适配器生态系统的现代替代品,提供 v1/v2 双重支持。 ## 作者 由 **Heathen** 创建 构建于 [Mirra](https://mirra.app) ## 许可证 MIT License Copyright (c) 2026 Heathen
标签:API密钥检测, BigInt, CMS安全, CVE-2025-3194, GNU通用公共许可证, JavaScript, MITM代理, Node.js, NPM包, OSV-Scalibr, Solana, Web3, Web报告查看器, 兼容层, 区块链安全, 安全补丁, 拒绝服务防护, 数据可视化, 暗色界面, 替代库, 类型转换, 缓冲区溢出, 自动化攻击, 输入验证, 配置错误, 零依赖