
Remplacement direct sûr, en pur JS, pour bigint-buffer. Corrige CVE-2025-3194 (CVSS 7.5). Zéro dépendance, aucune liaison native.
Remplacement direct sûr, 100 % JavaScript, pour bigint-buffer. Corrige CVE-2025-3194 (CVSS 7.5, dépassement de tampon / DoS).
Zéro dépendance. Aucun binding natif. Fonctionne dans Node.js et les navigateurs.
Le paquet bigint-buffer d'origine présente une vulnérabilité de dépassement de tampon de sévérité élevée (CVE-2025-3194, CVSS 7.5), qui fait planter votre processus lorsque toBigIntLE(null) ou une autre entrée invalide est passé. Le mainteneur n'a pas publié de mise à jour depuis octobre 2019. Le paquet @solana/buffer-layout-utils qui en dépend a été archivé en janvier 2025. Aucun correctif en amont n'est à venir.
Cette vulnérabilité affecte tout l'écosystème Solana via la chaîne de dépendances transitive :
bigint-buffer → @solana/buffer-layout-utils → @solana/web3.js v1.x → @solana/wallet-adapter-*
bigint-buffer-safe est un remplacement en pur JavaScript avec une validation correcte des entrées. Compatible avec l'API de [email protected].
npm install bigint-buffer-safe
Ajoutez à votre package.json pour remplacer bigint-buffer dans tout votre arbre de dépendances :
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"
}
}
}
Utilisation directe depuis GitHub (si le paquet n'est pas publié sur npm) :
{
"overrides": {
"bigint-buffer": "github:LoserLab/bigint-buffer-safe"
}
}
Puis réinstallez :
rm -rf node_modules package-lock.json && npm install
Vérifiez que la vulnérabilité est corrigée :
npm audit
Identique à [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>
Validation des entrées. Une entrée invalide lève une TypeError au lieu de faire planter votre processus :
// Original bigint-buffer: CRASHES (CVE-2025-3194)
toBigIntLE(null);
// bigint-buffer-safe: throws TypeError
toBigIntLE(null); // TypeError: toBigIntLE: expected a Buffer, got null
Aucun binding natif. L'original fournit des bindings C++ N-API qui échouent silencieusement dans les navigateurs et les bundlers (le fameux avertissement "bigint: Failed to load bindings"). Ce paquet est en pur JavaScript.
JS pur, sans binding natif. Testé sur Apple Silicon (série M), Node.js, 1 million d'itérations pour chaque.
| Opération | Taille | 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 |
Pour les entiers u64 et u128 utilisés dans les programmes Solana (lamports, montants de jetons, horodatages), les performances sont plus que suffisantes. Les bindings N-API de l'original étaient plus rapides pour les très grands tampons, mais ces tailles ne sont pas utilisées dans Solana.
Exécutez les benchmarks vous-même :
npx tsx bench/index.ts
Tout projet utilisant @solana/web3.js v1.x (versions 1.43.1 à 1.98.x). Exécutez npm ls bigint-buffer pour vérifier s'il est dans votre arbre de dépendances.
Non. @solana/kit a zéro dépendance tierce et n'utilise pas bigint-buffer. Si vous avez déjà migré vers Kit, vous n'êtes pas concerné.
Cet avertissement provient des bindings natifs N-API de bigint-buffer qui ne parviennent pas à se charger dans les environnements empaquetés. Le remplacer par bigint-buffer-safe l'élimine, car ce paquet est en pur JavaScript.
C'est une passerelle pour les projets encore sur @solana/web3.js v1.x. La solution permanente est de migrer vers @solana/kit, qui a zéro dépendance externe.
bigint-buffer-fixed est un autre fork communautaire. bigint-buffer-safe supprime entièrement les bindings natifs N-API (éliminant l'avertissement « Failed to load bindings »), inclut une suite de tests complète de 64 tests et fournit des définitions de types TypeScript.
Ce paquet est une passerelle pour les projets sous @solana/web3.js v1.x. La solution permanente est de migrer vers @solana/kit (web3.js v2), qui a zéro dépendance externe et n'utilise pas du tout bigint-buffer. La Fondation Solana a également publié ConnectorKit (@solana/connector) comme remplacement moderne de l'écosystème des wallet adapters, avec prise en charge double v1/v2.
Quatre outils qui fonctionnent ensemble pour faire passer votre projet de web3.js v1 à Kit v2 :
| Outil | Rôle |
|---|---|
| solana-deps | Retrace pourquoi les paquets hérités sont dans votre arbre de dépendances |
| solana-audit | Détecte les CVE et les API dépréciées que npm audit ne voit pas |
| solana-codemod | Migre automatiquement le code de web3.js v1 vers Kit v2 |
| bigint-buffer-safe (cet outil) | Correctif CVE direct pour bigint-buffer |
Flux de travail recommandé : solana-deps (identifiez ce qui est hérité) -> solana-audit (vérifiez les vulnérabilités) -> solana-codemod (corrigez le code) -> solana-audit (vérifiez le résultat).
Créé par Heathen
Développé dans Mirra
Licence MIT
Copyright (c) 2026 Heathen