
Безопасная, чистая JS-замена bigint-buffer. Исправляет CVE-2025-3194 (CVSS 7.5). Ноль зависимостей, без нативных привязок.
Безопасная, чисто-JS замена для bigint-buffer с возможностью прямой замены. Исправляет CVE-2025-3194 (CVSS 7.5, переполнение буфера / отказ в обслуживании).
Никаких зависимостей. Без нативных привязок. Работает в Node.js и браузерах.
Оригинальный пакет bigint-buffer содержит уязвимость переполнения буфера высокой степени опасности (CVE-2025-3194, CVSS 7.5), которая приводит к аварийному завершению процесса при передаче toBigIntLE(null) или других недопустимых входных данных. Мейнтейнер не публиковал обновлений с октября 2019 года. Пакет @solana/buffer-layout-utils, который от него зависит, был архивирован в январе 2025 года. Исправления от разработчика не будет.
Эта уязвимость затрагивает всю экосистему Solana через цепочку транзитивных зависимостей:
bigint-buffer → @solana/buffer-layout-utils → @solana/web3.js v1.x → @solana/wallet-adapter-*
bigint-buffer-safe — это замена на чистом JavaScript с корректной проверкой входных данных. Совместим по API с [email protected].
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 вместо аварийного завершения процесса:
// Оригинальный bigint-buffer: АВАРИЙНО ЗАВЕРШАЕТСЯ (CVE-2025-3194)
toBigIntLE(null);
// bigint-buffer-safe: выбрасывает 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, по 1 млн итераций.
| Операция | Размер | Оп/с |
|---|---|---|
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 |
Для целых чисел u64 и u128, используемых в программах Solana (лампорты, суммы токенов, метки времени), производительности более чем достаточно. Оригинальные 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, это вас не касается.
Это предупреждение появляется, когда нативные N-API привязки bigint-buffer не могут загрузиться в среде с бандлингом. Замена на 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. Постоянное решение — миграция на @solana/kit (web3.js v2), у которого нет внешних зависимостей и который вообще не использует bigint-buffer. Фонд Solana также выпустил ConnectorKit (@solana/connector) как современную замену экосистеме адаптеров кошельков с поддержкой как v1, так и v2.
Четыре инструмента, которые совместно помогают перевести ваш проект с web3.js v1 на Kit v2:
| Инструмент | Что делает |
|---|---|
| solana-deps | Отслеживает, почему устаревшие пакеты находятся в вашем дереве |
| solana-audit | Выявляет CVE и устаревшие API, которые пропускает npm audit |
| solana-codemod | Автоматически переносит код с web3.js v1 на Kit v2 |
| bigint-buffer-safe (этот инструмент) | Мгновенное исправление CVE для bigint-buffer |
Рекомендуемый порядок действий: solana-deps (найти устаревшие компоненты) → solana-audit (проверить на уязвимости) → solana-codemod (исправить код) → solana-audit (проверить результат).
Создано Heathen
Создано в Mirra
MIT License
Copyright (c) 2026 Heathen