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报告查看器, 兼容层, 区块链安全, 安全补丁, 拒绝服务防护, 数据可视化, 暗色界面, 替代库, 类型转换, 缓冲区溢出, 自动化攻击, 输入验证, 配置错误, 零依赖