
安全な、純粋なJS製のbigint-bufferのドロップイン代替品。CVE-2025-3194(CVSS 7.5)を修正。依存関係ゼロ、ネイティブバインディングなし。
安全でピュアJSなドロップイン代替品。オリジナルの bigint-buffer を置き換えます。CVE-2025-3194 (CVSS 7.5、バッファオーバーフロー / DoS) を修正します。
依存関係ゼロ。ネイティブバインディングなし。Node.js とブラウザで動作します。
元の bigint-buffer パッケージには高深刻度のバッファオーバーフローの脆弱性があります (CVE-2025-3194, CVSS 7.5)。これは toBigIntLE(null) などの不正な入力が渡されるとプロセスクラッシュを引き起こします。メンテナは2019年10月以降アップデートを公開していません。これに依存している @solana/buffer-layout-utils パッケージは2025年1月にアーカイブされました。上流の修正は予定されていません。
この脆弱性は、依存関係の連鎖を通じてSolanaエコシステム全体に影響を及ぼします:
bigint-buffer → @solana/buffer-layout-utils → @solana/web3.js v1.x → @solana/wallet-adapter-*
bigint-buffer-safe は、適切な入力検証を備えた純粋なJavaScriptの代替品です。[email protected] とAPI互換です。
npm install bigint-buffer-safe
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
[email protected] と同一:
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); // <Buffer 01 00>
toBufferLE(256n, 2); // <Buffer 00 01>
入力検証。 不正な入力はプロセスクラッシュを引き起こす代わりに 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万回の反復でテスト。
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 はサードパーティ依存関係がゼロで、bigint-buffer を使用していません。すでにKitへ移行済みなら影響を受けません。
その警告は、バンドル環境で bigint-buffer のネイティブN-APIバインディングが読み込みに失敗することによるものです。bigint-buffer-safe に置き換えると、このパッケージは純粋なJavaScriptなので、警告はなくなります。
これはまだ @solana/web3.js v1.x を使っているプロジェクト向けのつなぎです。恒久的な解決策は、外部依存関係がゼロの @solana/kit へ移行することです。
bigint-buffer-fixed は別のコミュニティフォークです。bigint-buffer-safe はネイティブN-APIバインディングを完全に取り除き (「Failed to load bindings」警告を排除)、64のテストからなる完全なテストスイートを含み、TypeScriptの型定義を提供します。
このパッケージは @solana/web3.js v1.x を使っているプロジェクト向けのつなぎです。恒久的な解決策は、外部依存関係がゼロで bigint-buffer をまったく使用しない @solana/kit (web3.js v2) への移行です。Solana Foundation はまた、v1/v2 両対応のウォレットアダプターエコシステムの最新の代替品として ConnectorKit (@solana/connector) をリリースしました。
プロジェクトを web3.js v1 から Kit v2 へ移行するために連携する4つのツール:
推奨ワークフロー: solana-deps (レガシーなものを特定) -> solana-audit (脆弱性を確認) -> solana-codemod (コードを修正) -> solana-audit (結果を検証)。
Heathen によって作成
Mirra で構築
MITライセンス
Copyright (c) 2026 Heathen
| 操作 | サイズ | Ops/sec |
|---|
toBigIntBE | u64 (8 bytes) | 9,079,934 |
toBigIntLE | u64 (8 bytes) | 6,128,182 |
toBigIntBE | u128 (16 bytes) | 7,018,804 |
toBigIntLE | u128 (16 bytes) | 5,069,809 |
toBufferBE | u64 (8 bytes) | 5,569,161 |
toBufferLE | u64 (8 bytes) | 5,183,747 |
toBufferBE | u128 (16 bytes) | 7,063,305 |
toBufferLE | u128 (16 bytes) | 6,533,752 |
| ツール | 機能 |
|---|
| solana-deps | レガシーパッケージがツリーに含まれる理由を追跡 |
| solana-audit | npm audit が見逃すCVEや非推奨APIを検出 |
| solana-codemod | web3.js v1 から Kit v2 へのコードを自動移行 |
| bigint-buffer-safe (this tool) | bigint-buffer 向けのドロップインCVE修正 |