Author

Topic: [BITCOIN CORE] Vulnérabilité majeure (Read 424 times)

legendary
Activity: 2590
Merit: 2348
September 27, 2018, 01:11:58 PM
#17
Jimmy Song a sorti un article aujourd'hui pour 《clarifier》 les tenants et aboutissants de ce bug https://medium.com/@jimmysong/bitcoin-core-bug-cve-2018-17144-an-analysis-f80d9d373362
legendary
Activity: 2464
Merit: 3158
September 25, 2018, 04:11:55 PM
#16
On nous avait vendu que les calculs pour la validation des blocs et la structure même de Bitcoin rendaient impossible la création de bitcoins ex nihilo.
Il semble aujourd'hui que ça soit faux, si c'est bien le cas c'est plus qu'inquiétant quant à la fiabilité de bitcoin,  car ça paraissait assez basique que soit vérifié le nombre total de bitcoins à chaque nouveau bloc et de rejeter le bloc si le nombre trouvé était superieur à celui qu'il était censé être à l'instant T.
Si bitcoin n'est meme pas capable de faire ça correctement, il risque d'y avoir une sacree crise de confiance.

Oui, c'est selon ce principe que bitcoin est construit, et c'est ce qu'on veut. Selon le principe que la création ex nihilo est impossible.
Le développement et la maintenance de bitcoin est une tâche ingrate. C'est plus simple quand tu as une gouvernance qui garantis un revenu tout le long de sa vie à l'équipe de devs, style Dash.

Les bourdes, ça arrive. Partout..

Le bug qui a été introduit par la refonte d'une fonction, permettait aux personnes qui préparent les blocks de tricher en impunité et de "double-dépenser" des transactions.
Nuance, qui préparent. Ce n'est pas forcément ceux qui font le travail de minage. Le mineur à qui on fournit un block à résoudre, ne peut rien faire.
(Uniquement l'équipe d'une pool aurait pu le faire, ou un mineur avec suffisamment de ressources pour trouver des blocks solo)

Ce bug a été gardé sous silence, et depuis résolu.
Donc une amélioration voulue a causé un souci imprévu.

Ce n'est pas la première fois que ça se produit, et ça ne sera pas la dernière.
Bitcoin est une expérience. Certes, une expérience à $110,000,000,000  Tongue

Maintenant, tant que les bugs ne terrassent pas bitcoin, il n'en sort que plus fort.
Pour construire une chaîne de blocs concurrente, dans l'espoir d'en produire une plus longue et plus lourde pour "détourner" bitcoin, il faudrait aussi y inclure chaque bug.

Et quand bien même, ce n'est "que" le futur de la blockchain de bitcoin qui est concerné.
Rien ne nous empêche de prendre l'état de la chaîne à un block #n et de repartir avant un bug sur un fork tout neuf.
legendary
Activity: 2590
Merit: 2348
September 25, 2018, 06:51:54 AM
#15
On nous avait vendu que les calculs pour la validation des blocs et la structure même de Bitcoin rendaient impossible la création de bitcoins ex nihilo.
Il semble aujourd'hui que ça soit faux, si c'est bien le cas c'est plus qu'inquiétant quant à la fiabilité de bitcoin,  car ça paraissait assez basique que soit vérifié le nombre total de bitcoins à chaque nouveau bloc et de rejeter le bloc si le nombre trouvé était superieur à celui qu'il était censé être à l'instant T.
Si bitcoin n'est meme pas capable de faire ça correctement, il risque d'y avoir une sacree crise de confiance.
legendary
Activity: 2464
Merit: 3158
September 23, 2018, 03:37:33 PM
#14
Et dans le cas où quelqu'un arriverait à créée un Bitcoin avec cette méthode quelles sont les solutions? On peut faire un reverse de la transaction ou annuler un bloc?

Je pense qu'en théorie, les noeuds valideraient ces blocks avec ces transactions. Jusqu'à une mise à jour de bitcoin core qui règle le bug.
Lors de la mise à jour, soit on acte le fait qu'il y'a x bitcoin en plus du au bug, et on les garde, sans trop de conséquences, ce qui est acceptable.

Soit on peu aussi les effacer. Dans le cas où on les efface, cela changera le bloc qui vient juste après, donc ça reviendrait à "reboot" bitcoin, au block où ce coin en trop est apparu. (catastrophique)

full member
Activity: 715
Merit: 220
September 23, 2018, 10:06:36 AM
#13
Merci à vous deux registrio et Yogg pour cette description bien détaillée du bug et de ses conséquences. C'est un peu plus clair pour moi maintenant.
Et dans le cas où quelqu'un arriverait à créée un Bitcoin avec cette méthode quelles sont les solutions? On peut faire un reverse de la transaction ou annuler un bloc?
legendary
Activity: 2464
Merit: 3158
September 23, 2018, 07:51:16 AM
#12
Ah ben nos messages se sont croisés car j'avais trouvé le full diclosure aussi et mis à jour mon post ;p
Si tu as les connaissances nécessaires en code je suis preneur d'une petite explication de comment ils peuvent augmenter le supply avec un tel bug. Autant bloquer des noeuds je comprends mais augmenter le supply ca doit être un poil plus compliquer.

Je vais essayer de répondre, au moins d'éclaircir certains aspects. Voici un truc à savoir, dans la construction des transactions bitcoin, pour comprendre ce bug.
Quand vous recevez des bitcoins, le wallet dont vous en recevez va prendre un output qui le concerne, le mettre en input, et créer la transaction avec votre addresse en output.
Quand vous envoyez des bitcoins, en fait vous "dépensez" un output qui à été fait à une adresse publique, dont vous avez la clé privée, qui correspond. Donc vous mettez cet output en tant qu'input, et en output, la destination de la transaction...



(Source : https://bitcoincore.org/en/2018/09/20/notice/ )

The "value out" in this block #74638 is quite strange:

Code:
{
        {
            "hash" : "1d5e512a9723cbef373b970eb52f1e9598ad67e7408077a82fdac194b65333c9",
            "ver" : 1,
            "vin_sz" : 1,
            "vout_sz" : 2,
            "lock_time" : 0,
            "in" : [
                {
                    "prev_out" : {
                        "hash" : "237fe8348fc77ace11049931058abb034c99698c7fe99b1cc022b1365a705d39",
                        "n" : 0
                    },
                    "scriptSig" : "0xA87C02384E1F184B79C6ACF070BEA45D5B6A4739DBFF776A5D8CE11B23532DD05A20029387F6E4E77360692BB624EEC1664A21A42AA8FC16AEB9BD807A4698D0CA8CDB0021024530 0x965D33950A28B84C9C19AB64BAE9410875C537F0EB29D1D21A60DA7BAD2706FBADA7DF5E84F645063715B7D0472ABB9EBFDE5CE7D9A74C7F207929EDAE975D6B04"
                }
            ],
            "out" : [
                {
                    "value" : 92233720368.54277039,
                    "scriptPubKey" : "OP_DUP OP_HASH160 0xB7A73EB128D7EA3D388DB12418302A1CBAD5E890 OP_EQUALVERIFY OP_CHECKSIG"
                },
                {
                    "value" : 92233720368.54277039,
                    "scriptPubKey" : "OP_DUP OP_HASH160 0x151275508C66F89DEC2C5F43B6F9CBE0B5C4722C OP_EQUALVERIFY OP_CHECKSIG"
                }
            ]
        }
    ],
    "mrkl_tree" : [
        "012cd8f8910355da9dd214627a31acfeb61ac66e13560255bfd87d3e9c50e1ca",
        "1d5e512a9723cbef373b970eb52f1e9598ad67e7408077a82fdac194b65333c9",
        "618eba14419e13c8d08d38c346da7cd1c7c66fd8831421056ae56d8d80b6ec5e"
    ]
}

92233720368.54277039 BTC?  Is that UINT64_MAX, I wonder?


Avec chaque bug découvert et résolu, bitcoin n'en devient que plus robuste et résilient.
full member
Activity: 715
Merit: 220
September 22, 2018, 11:09:50 AM
#11
Ah ben nos messages se sont croisés car j'avais trouvé le full diclosure aussi et mis à jour mon post ;p
Si tu as les connaissances nécessaires en code je suis preneur d'une petite explication de comment ils peuvent augmenter le supply avec un tel bug. Autant bloquer des noeuds je comprends mais augmenter le supply ca doit être un poil plus compliquer.
newbie
Activity: 28
Merit: 21
September 22, 2018, 11:08:13 AM
#10
Merci à tous pour vos retours !

Super description du problème registrio.
Il y a quelques heures j'ai lu un article sur un des rebondissements au bug que tu as mentionné. J'avais fait un post sur la partie News de la section Fr du forum car j'avais pas vu ton sujet mais heureusement Halab veille au grain et m'a redirigé ici!

Il s'avère que le bug que tu mentionnais n'était que la partie visible de l'Iceberg et qu'une utilisation spécifique de ce bug par déni de service pouvait aussi permettre de générer de nouveau bitcoin au delà de la limite des 21 millions! Et les développeurs de Bitcoin core été semble t il au courant de cette possibilité dès la découverte du bug mais on préférait ne rien dire pour faciliter le déploiement de la mise à jour du client Bitcoin core chez les mineurs. Et maintenant que c'est fait il lâche l'info. Assez effrayant je trouve et on est pas passé loin d'une belle catastrophe pour le monde des cryptos!

Aussi, merci pour ton information, vérifiée notamment par le lien https://bitcoincore.org/en/2018/09/20/notice/ .

Malheureusement, je suis pris un peu par le travail, je n'ai toujours pas pu creuser la question. Si j'ai un peu de temps, je ferai un édit au-dessus pour essayer de comprendre comment techniquement, il était possible d'augmenter le supply.

Je finirai sur une remarque : Il est nécessaire qu'un système d'alerte soit mis en place à mon avis. Deux jours plus tard, la moitié de la puissance de calcul n'est toujours pas mise à niveau (cf le lien sur la Full disclosure)
full member
Activity: 715
Merit: 220
September 22, 2018, 10:39:24 AM
#9
Super description du problème registrio.
Il y a quelques heures j'ai lu un article sur un des rebondissements au bug que tu as mentionné. J'avais fait un post sur la partie News de la section Fr du forum car j'avais pas vu ton sujet mais heureusement Halab veille au grain et m'a redirigé ici!

Il s'avère que le bug que tu mentionnais n'était que la partie visible de l'Iceberg et qu'une utilisation spécifique de ce bug par déni de service pouvait aussi permettre de générer de nouveau bitcoin au delà de la limite des 21 millions! Et les développeurs de Bitcoin core été semble t il au courant de cette possibilité dès la découverte du bug mais on préférait ne rien dire pour faciliter le déploiement de la mise à jour du client Bitcoin core chez les mineurs. Et maintenant que c'est fait il lâche l'info. Assez effrayant je trouve et on est pas passé loin d'une belle catastrophe pour le monde des cryptos!

Le rapport complet sur le sujet par les développeurs de Bitcoin Core où ils dévoilent ce second impact est disponible ici : https://bitcoincore.org/en/2018/09/20/notice/
hero member
Activity: 1022
Merit: 725
September 21, 2018, 04:31:01 AM
#8
Peut-être pour ça :

Does "exploitable" mean that this possibility existed or was exploited?
It means that the vulnerability currently exists and Bitcoin Core versions 0.14.0 to 0.16.2 and could be exploited by anyone who has enough hashrate to mine a block. There are no known instances of it actually being exploited.

J'ose pas imaginer le nombre de version de bitcoin core vérolées en circulation en ce moment.
hero member
Activity: 1344
Merit: 500
28K=Buy | Wallet=100% BTC
September 21, 2018, 04:19:38 AM
#7
Il y a une new comme ça et malgré tout le BTC passe à 6 700$, c'est à rien n'y comprendre parfois  Roll Eyes
hero member
Activity: 1022
Merit: 725
September 21, 2018, 02:16:21 AM
#6
Pour ma part, j'ai été au courant du bug grâce au jolis petits diamants mauves au dessus sur la nouvelle mise à jour du Bitcoin Core il y a deux jours.

Les petits diamants sont passés au rouge pendant la nuit Smiley. Avec ce message de Theymos.

Je me rends compte que tout le monde dit la même chose, j'avais rien pigé aux diamants mauves : vous parlez de la NEWS tout simplement !!

Je supprime mon post sans intérêt du coup...
staff
Activity: 2366
Merit: 2013
I find your lack of faith in Bitcoin disturbing.
September 21, 2018, 01:38:08 AM
#5
Pour ma part, j'ai été au courant du bug grâce au jolis petits diamants mauves au dessus sur la nouvelle mise à jour du Bitcoin Core il y a deux jours.

Les petits diamants sont passés au rouge pendant la nuit Smiley. Avec ce message de Theymos.
jr. member
Activity: 114
Merit: 3
September 20, 2018, 01:59:21 PM
#4
Article très intéressant ! En effet je suis passé à côté de ces infos
Merci en tout cas pour cette update
newbie
Activity: 28
Merit: 21
September 20, 2018, 01:25:44 PM
#3
J'avais vaguement entendu parler qu'il y avait eu un bug effectivement et d'ailleurs BCH etc ... Auraient potentiellement hérité de cette faille.

Mais je te remercie pour cette belle précision et explication  Wink

Oui tout à fait ! Malheureusement, comme c'est de vulgaires forks avec un ou deux petits changements de paramètres (et pas vraiment de nouvelles implémentations) ils héritent automatiquement de tous les bug du BTC core. Au final, les devs de BCH passe leur temps à faire des git diff  Roll Eyes

Merci pour ton retour Smiley
hero member
Activity: 1344
Merit: 500
28K=Buy | Wallet=100% BTC
September 20, 2018, 01:12:00 PM
#2
J'avais vaguement entendu parler qu'il y avait eu un bug effectivement et d'ailleurs BCH etc ... Auraient potentiellement hérité de cette faille.

Mais je te remercie pour cette belle précision et explication  Wink
newbie
Activity: 28
Merit: 21
September 20, 2018, 12:46:29 PM
#1
Je publie un petit topic car il y a un bug majeur qui est passé quasiment inaperçu surtout auprès des newbies. Je trouve que c'est le bug le plus important qu'ait connu le Bitcoin depuis des années. Je me base sur le topic suivant : https://bitcointalksearch.org/topic/bitcoin-core-0163-released-5032424

Disclaimer : Les développements que je réalise ici sont le fruit de ma propre compréhension. Je serais très reconnaissant si un dév du Bitcoin parlant français pouvait valider les informations que je formule ci-dessous.

A travers ce post, j'espère lancer un débat sur les failles que peuvent représenter les protocoles distribués en général et comment cela peut avoir un impact significatif sur des millions de personnes si jamais la décentralisation numérique s'adoptait massivement. L'occasion pour moi de vous convaincre à travers ce post qu'il y a urgence à repenser le modèle technologique des crypto-monnaies en prônant une plus grande diversité des implémentations. Pour la faire courte, je suis très critique envers la taille des capitalisations des crypto-monnaies et je prône des solutions plus petites et plus locales résolvant d'ailleurs la question des difficultés de scalablity.

Il y a exactement deux jours, une faille majeure à été découverte dans le réseau bitcoin. Pendant ce temps là, et pendant les jours qui ont suivis, il n'y a eu presque aucune incidence sur le prix du Bitcoin : https://coinmarketcap.com/currencies/bitcoin/ Et c'est à peine si la presse spécialisée en parle : https://journalducoin.com/bitcoin/bitcoin-core-patch-faille-decouverte-bitcoin/ Honnêtement, ça me surprend pas, les investisseurs utilisent un instrument qu'ils comprennent pas. Il le voit comme un instrument financier infaillible et une certaine paresse intellectuelle s'est imposée à la communauté qui laisse penser que le protocole Bitcoin est "incassable". C'est faux.

Je vais tâcher ici de vous décrire la vulnérabilité de manière concise avec quelques éléments techniques. Elle concerne une fonction CheckBlock() qui gère la vérification du format d'un bloc de manière intrinsèque, sans rentrer dans les détails des transactions : https://github.com/bitcoin/bitcoin/blob/d926a87fde80b64024b2d94260c53aab20ccb259/src/validation.cpp ligne 3080.

Pour comprendre, il faut reprendre le fix : https://github.com/bitcoin/bitcoin/commit/d926a87fde80b64024b2d94260c53aab20ccb259#diff-24efdb00bfbe56b140fb006b562cc70b . Pour des raisons d'optimisations, la fonction CheckTransaction() était "sautée" en paramétrant l'un ses paramètres à false. Cette fonction permet de vérifier qu'il n'y a pas de doublons dans le bloc. Il s'avère qu'en ne faisant pas cette vérification, le node BTC plantait tout simplement et s'arrêtait de fonctionner * (Je n'ai pas encore approfondi le sujet, je vous tiens au courant si j'en sais plus). En d'autres termes, il était possible à l'aube de ce fix, de geler l'ensemble du réseau Bitcoin en s'attaquant directement aux nœuds (attaque DDos). Il suffisait par exemple de lancer l'attaque plusieurs fois sans que le réseau ne puisse jamais redémarrer.

Dans les faits, cette attaque était relativement difficile à pratiquer pour le premier des pecnos pour deux raisons :
- Il fallait préalablement miner un bloc dans la chaîne courante. Un seul suffit, ce qui induisait une probabilité de succès proportionnelle à la puissance de calcul détenue. Par exemple, cette attaque était tout à fait envisageable avec une puissance de calcul de 0.1 %, ce qui donne une bonne espérances mathématique de réalisation sur 1000 blocs soit une semaine d'attente.
- Puis, il fallait que ce bloc soit diffusé le plus rapidement possible, ce qui revient en pratique à réajuster l'hypothèse précédente.

Bref, n'importe quelle petite mine de taille moyenne pouvait sur l'année potentiellement geler le réseau à ces propres fins de dumping par exemple. Pour les fermes de tailles plus grande, il était possible de porter un préjudice grave à l'ensemble du réseau en empêchant le consensus d'avancer et en lésant plusieurs milliers d'investisseurs qui n'aurait plus été capable de réaliser des transactions.

Pire, on ne sait pas si c'est vrai, mais si les fermes dans leurs globalité n'ont pas des systèmes de redémarrage, c'est potentiellement une réduction drastique de la puissance de calcul qui disparaît du jour au lendemain par Déni de Service. Le cas échéant, une attaque double dépense aurait tout à fait pu être réalisé par des acteurs de moyenne taille.

Cette événement est passé quasiment inaperçu pour la majorité des communautés externes au forum. Pour ma part, j'ai été au courant du bug grâce au jolis petits diamants mauves au dessus sur la nouvelle mise à jour du Bitcoin Core il y a deux jours. Dans tous les cas, ce bug majeur est là pour nous rappeler que rien n'est infaillible dans le protocole. Si les maximalistes du forum préfère fermer les yeux, j'espère à travers ce post vous faire au moins réfléchir sur les multiples faiblesses qui jonche le chemin du bitcoin, qu'elles soient malveillantes ou non-intentionnelles. Il est clair que nous n'avons pas l'intelligence collective nécessaire pour contrer celle d'un gouvernement par exemple (qui a certainement une large liste de vulnérabilités non encore utilisées).

Vos remarques sur le sujet sont les bienvenues Smiley

* Edit : Le bug s'enclenche lorsqu'il y a effectivement un doublon dans le bloc miné.
Jump to: