
bigint-buffer를 위한 안전한 순수 JS 드롭인 대체품. CVE-2025-3194(CVSS 7.5)를 수정합니다. 의존성 0개, 네이티브 바인딩 없음.
bigint-buffer를 위한 안전한 순수 JS 드롭인 대체재입니다. CVE-2025-3194(CVSS 7.5, 버퍼 오버플로 / DoS)를 수정합니다.
의존성 제로. 네이티브 바인딩 없음. Node.js 및 브라우저에서 작동.
원래의 bigint-buffer 패키지에는 toBigIntLE(null) 또는 기타 잘못된 입력이 전달될 때 프로세스를 중단시키는 고위험 버퍼 오버플로 취약점(CVE-2025-3194, CVSS 7.5)이 있습니다. 메인테이너는 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
전체 의존성 트리에서 bigint-buffer를 교체하려면 package.json에 추가하세요:
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 바인딩이 로드되지 않아 발생합니다. 이 패키지는 순수 JavaScript이므로 bigint-buffer-safe로 교체하면 경고가 사라집니다.
이것은 여전히 @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 재단은 또한 v1/v2를 모두 지원하는 지갑 어댑터 생태계의 현대적 대체재로 ConnectorKit(@solana/connector)를 출시했습니다.
프로젝트를 web3.js v1에서 Kit v2로 전환하기 위해 함께 작동하는 네 가지 도구:
권장 워크플로: solana-deps(레거시 항목 찾기) -> solana-audit(취약점 확인) -> solana-codemod(코드 수정) -> solana-audit(결과 검증).
Heathen 제작
Mirra에서 개발됨
MIT 라이선스
저작권 (c) 2026 Heathen
| 연산 | 크기 | Ops/sec |
|---|
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-deps | 레거시 패키지가 트리에 있는 이유를 추적 |
| solana-audit | npm audit이 놓치는 CVE 및 더 이상 사용되지 않는 API를 감지 |
| solana-codemod | web3.js v1 코드를 Kit v2로 자동 마이그레이션 |
| bigint-buffer-safe (이 도구) | bigint-buffer용 드롭인 CVE 수정 |