Bonjour fameux Nal',
Aujourd'hui, enfin hier, un développeur a bloqué tous les portefeuilles Parity multisignés.
Grossièrement, il a modifié la lib de Parity et s'est octroyé la propriété de tous les portefeuilles multisignés avec Parity. Il a supprimé son contrat auto-exécutant ce qui bloqué tous les portefeuilles multisignés…
En résumé, le Tweet du concerné explique le résultat :
It's simple really, imagine walking up to a bank vault and there's a button that says "Lock Forever"……. someone accidentally pushes it.
Maintenant le concerné commence à s'inquiéter :
C'est environ 20% de tout l'éther disponible qui est paralysé. On ne sait pas encore si c'est un acte qui se voulait malveillant qui aurait mal tourné ou si c'est une véritable erreur. Dans tous les cas, ça représente 280M de dollars gelés.
Dans le meme temps, la valeur de l'Ethereum Classic ne cesse d'augmenter depuis…
Plus d'infos :
https://thehackernews.com/2017/11/parity-ethereum-wallet.html
# C'est dur la sécurité
Posté par Ph Husson (site web personnel) . Évalué à 7.
Surtout que c'est la deuxième fois que cette équipe se rate en trois mois…
# on vit une époque formidable
Posté par Guillaume Knispel . Évalué à 4.
Cyberpunk intensifies.
[^] # Re: on vit une époque formidable
Posté par erdnaxeli (site web personnel) . Évalué à 10.
Cette citation n'est pas vraiment très claire. Voilà ce que j'ai personnellement compris après un peu de recherche.
Ethereum
Ethereum est pour rappel un système de blockchain qui permet de stocker et exécuter du code (appelé contrat) dans la blockchain, en plus de porte-feuilles et transactions (comme Bitcoin).
À chaque exécution du contrat, le nouvel état de sa mémoire est stocké dans la blockchain (ça a donc un coup, qu'il faut payé en gas (ce qui peut donner l'exception out-of-gas si on ne paye pas assez pour finir l'exécution du contrat, exception qui me fait personnellement très rire)). Un contrat n'a pas a proprement parler de propriétaire, mais une pratique consiste simplement à enregistrer dans une variable l'adresse du créateur, pour lui permettre d'exécuter des actions avec plus de privilèges.
Trois points important à rajouter :
Parity
Parity est un client Ethereum (en Rust). Une des fonctionnalité que propose ce client, c'est de créer des porte-feuilles multi-signés. Avec un tel porte-feuille, tous ses propriétaires doivent signer une transaction avant qu'elle puisse être effectuée.
Or ce genre de porte-feuille n'est pas du tout prévu de base. Comment faire ? Avec un contrat. Ce porte-feuille multi-signé est en réalité un contrat, avec sa propre monnaie, qui a enregistré les propriétaires et implémente les mécanismes souhaités pour effectuer une transaction de monnaie vers un autre compte.
Le problème
Pour implémenter leur porte-feuille multi-signé, les gars de Parity ont développé un contrat qu'ils ont inséré dans la blockchain et que tous les porte-feuilles multi-signés utilisent. Une bibliothèque donc.
Ce contrat a aussi une notion de propriétaire, ainsi qu'une méthode qui appelle selfdestruct, qui vérifie que c'est bien le propriétaire du contrat qui l'appelle. Là où ça devient drôle, c'est que ce fameux devops199 a réussi à se rendre propriétaire de ce contrat, et une fois fait il a appelé la méthode déclenchant l'autodestruction.
Résultat, les porte-feuilles multi-signés qui utilisent ce contrat ne fonctionnent tout simplement plus. Comme le disent les mecs de Parity eux-même : « This means that currently no funds can be moved out of the multi-sig wallets ». Mais à part ça, « We very much regret that yesterday’s incident has caused a great deal of stress » (toujours de Parity) :')
Cerise sur le gâteau, lorsque un contrat s'autodétruit, il peut envoyer le reste de sa monnaie à une adresse, ce qui pourrait donc être une solution pour récupérer son argent. Mais il semblerait que la méthode qui appelle l'autodestruction utilise elle aussi ce fameux contrat qui n'existe plus, et donc ne fonctionne pas non plus.
Conclusion
Faut tout compiler en statique :D
Pour continuer à s'amuser :
Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.
[^] # Re: on vit une époque formidable
Posté par erdnaxeli (site web personnel) . Évalué à 10. Dernière modification le 24 août 2019 à 18:16.
Un peu plus de détails.
Le contrat qui a été supprimé était le suivant : x863df6bfa4469f3ead0be8f9f2aae51c91a907b4. Tout le code important se trouve dans le contrat
WalletLibrary
.On remarque notamment qu'il y a une méthode
initMultiOwned
, qui prend un tableau de propriétaires initiaux. Cette méthode utilise le modificateuronly_uninitialized
, pour empêcher de l'appeler plus d'une fois :Sauf que dans le cas présent
initMultiOwned
(ouinitWallet
, qui l'appelle) n'avait jamais été appelé par les dev de Parity. Du coup devops199 l'a appellé, devenant propriétaire du contrat, et l'a détruit.À ce niveau là c'est même plus une faille de sécu, c'est une porte d'entrée. Commentaire d'un des gars de Parity : ça a été déployé à la rache, on a pas vu.
À noter qu'il existe un mécanisme dans Solidity (le compilateur vers le bytecode Ethereum utilisé) pour empêcher un contrat de disposer d'un espace mémoire (et en faire uniquement une bibliothèque donc). Il aurait fallu le définir ainsi :
library WalletLibrary is WalletEvent { … }
au lieu d'utilisercontract
.Pourquoi ça n'a pas été fait ? Bonne question. J'ai l'impression qu'une
library
ne peut pas déclencher de paiement, alors qu'iciWalletLibrary
en fait, mais je ne suis pas sûr de moi.Et comment on se sort de cette situation ? On ne s'en sort pas. Par définition, la blockchain ne peut pas être altérée. Ou alors il faut faire un nouvel hard fork, ce que certaines personnes semblent réclamer. Mais ça veut dire que le machin n'est quand même pas très stable…
En fait tout cela me fait m'interroger sur le concept même d'Ethereum. La blockchain c'est cool pour enregistrer des données statiques comme des transactions, mais pour du code ? Par son concept même, on en pourra jamais mettre à jour le code. Il faut donc être sacrément sûr de son code pour commencer à l'utiliser, parce qu'on ne pourra alors plus le changer. Et même si on prouve le code à 100%, on n'est pas à l'abri d'une erreur humaine (ici, oublier d'appeler une méthode d'initialisation).
Il y a des idées pour pouvoir mettre à jour du code, à base de proxy où on peut mettre à jour la véritable adresse du code. Mais ça implique soit de faire confiance au gars qui gère le proxy pour ne pas changer l'adresse de la lib n'importe comment, soit que chacun déploie son propre proxy. Et qu'en cas de mise à jour, chacun aille changer l'adresse dans son proxy. Ça peut être géré par le client (comme Parity qui publie déjà des contrats sans qu'on ait besoin d'y comprendre quelque chose) mais ça me semble quand même laborieux.
Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.
[^] # Re: on vit une époque formidable
Posté par Nicolas Boulay (site web personnel) . Évalué à -8.
C'est le début d'etherum. Les avions n'ont pas commencé à voler avec peu de carburant pour transporter 150 personnes à 800 hm/h à 20 000 km.
"La première sécurité est la liberté"
[^] # Re: on vit une époque formidable
Posté par Maclag . Évalué à 10.
Oui mais du coup on ne leur faisait pas transporter des centaines de millions de dollars.
[^] # Re: on vit une époque formidable
Posté par Misc (site web personnel) . Évalué à 3. Dernière modification le 09 novembre 2017 à 11:12.
Ce qui en soit est pas si différent du type de déploiement qu'on voit pour de l'embarqu
^W
IOT. Et dire qu'on peut pas mettre à jour, c'est aussi un peu trompeur. Tu pourrais si tu avais le controle de la blockchain entiére. C'est certes sans doute impossible pour une blockchain publique, mais je suis sur qu'il existe des applications ou tu as ta propre blockchain privé et ou c'est faisable, ce qui limite quand même les risques (un peu comme faire un git push -f, ça passe mieux quand tu es seul)[^] # Re: on vit une époque formidable
Posté par TutoMaker . Évalué à 1.
Ça fait chers en consommation à côté d'une BDD normale.
Si vous codez un logiciel sans une interface chatoyante, alors vous faites de la merde. Donation bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
[^] # Re: on vit une époque formidable
Posté par Misc (site web personnel) . Évalué à 3.
Oui, ça viendrait à personne d'utiliser des arbres de Merkel pour des choses comme la gestion du code source ou ce genre de trucs au lieu d'une base de données.
[^] # Re: on vit une époque formidable
Posté par Michaël (site web personnel) . Évalué à 2.
Est-ce que l'équivalent de
curl https://… | sh -
serait un code valide?[^] # Re: on vit une époque formidable
Posté par erdnaxeli (site web personnel) . Évalué à 5. Dernière modification le 11 novembre 2017 à 15:22.
En fait c'est possible, mais ça crée une nouvelle blockchain. Ça s'appelle un hard fork, et c'est déjà arrivé à l'Ethereum (ce qui a donné l'Ethereum (la nouvelle blockchain) et l'Ethereum Classic (l'ancienne)). À noter qu'à l'époque ce fork avait déjà eu lieu suite à une faille dans un contrat.
Bitcoin a aussi eu son hard fork cet été, avec le Bitcoin Cash (conflit sur la taille de blocs).
Le seul problème si la blockchain est publique, c'est qu'on ne peut pas décider tout seul d'utiliser la nouvelle. Il faut que le reste du monde l'accepte aussi (ou au moins une quantité de personnes suffisamment importante pour que la nouvelle blockchain reste intéressante).
Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.
[^] # Re: on vit une époque formidable
Posté par Dinosaure (site web personnel) . Évalué à 2. Dernière modification le 09 novembre 2017 à 19:48.
Il y a cette technique sinon mais cela me semble très proche des références dans Git - avec la notion de mutabilité inhérente.
Mais dans ce genre de contexte, on préféra utiliser des outils (externes ou internes au langage) pour assurer le maximum de chose (et c'est ce qui ce fait dans l’aéronautique).
[^] # Re: on vit une époque formidable
Posté par Misc (site web personnel) . Évalué à 3.
Merci pour l'explication.
J'ajouterais qu'il existe un outil pour vérifier ça:
https://github.com/b-mueller/mythril
# Un peu de désinformation quand même
Posté par palkeo (site web personnel) . Évalué à 4.
C'est moins de 1% pour sûr. Dont la moitié appartient à la société qui développe Parity.
[^] # Re: Un peu de désinformation quand même
Posté par Nibel . Évalué à 3. Dernière modification le 09 novembre 2017 à 13:19.
Je n'ai fait que paraphraser l'article :
Dont 30% appartiennent à Parity :
Si tu as des sources indiquant autre chose, je suis preneur.
La majeure partie des morts l'était déjà de son vivant et le jour venu, ils n'ont pas senti la différence.
[^] # Re: Un peu de désinformation quand même
Posté par smumu . Évalué à 1.
Je crois comprendre que ce sont les portefeuilles de Parity qui représentent 20% de l'ETH.
Et il semble que seul un portefeuille soit affecté, donc il se peut que ce portefeuille représente 1% de l'ETH total (ce qui serait déjà énorme).
Je fais surtout des suppositions parce que je n'ai pas encore tout lu (oui, pas bien de commenter sans avoir lu l'intégralité … Patapé).
[^] # Re: Un peu de désinformation quand même
Posté par Nibel . Évalué à 2. Dernière modification le 09 novembre 2017 à 15:41.
Effectivement c'est peu clair et c'est possible que ce soit bien la totalité des portefeuilles de Parity qui représentent 20% de l'ether disponible. Si c'est le cas, reste à savoir ce que représentent la totalité des portefeuilles multisignés chez Parity…
Là par contre c'est certain, ce n'est pas 1 seul portefeuille qui a été affecté mais plusieurs milliers. En fait, tous les portefeuilles multisignés chez Parity.
La majeure partie des morts l'était déjà de son vivant et le jour venu, ils n'ont pas senti la différence.
[^] # Re: Un peu de désinformation quand même
Posté par smumu . Évalué à 1.
D'après le blog de Parity (https://paritytech.io/blog/security-alert.html) :
Donc j'en déduis qu'il est possible que certains portefeuilles soient épargnés (mais effectivement du coup, plusieurs portefeuilles sont touchés, certainement un grand nombre).
[^] # Re: Un peu de désinformation quand même
Posté par Nibel . Évalué à 3.
Exact, ce sont biens les portefeuilles crées après le 20 Juillet qui sont concernés et non pas tous comme je l'ai écrit précédemment. J'avais cru comprendre que les portefeuilles multisignés n'existaient pas chez Parity avant le 20 juillet et qu'ils étaient la conséquence du piratage ayant eu lieu le 19 Juillet mais c'est une erreur de ma part, ils existaient bien auparavant.
Désolé pour les imprécisions, je suis allé un peu vite en besogne. Si un modo veut modifier mon journal pour y inclure les corrections, ce sera avec plaisir.
La majeure partie des morts l'était déjà de son vivant et le jour venu, ils n'ont pas senti la différence.
[^] # Re: Un peu de désinformation quand même
Posté par binbin . Évalué à 5.
280 millions de dollars en Ether ça représente bien ~1% de la capitalisation totale de l'Ether (29 milliards de dollars à l'heure où j'écris ces lignes, source coinmarketcap.com).
# Pas de changement sur le prix de l'ETH
Posté par jujubache . Évalué à 0.
C'est quand même assez fou que ce blocage n'a pratiquement pas influé sur le prix de L'ETH, ni sur la market cap ! Si on regarde la courbe du prix de l'ethereum https://www.datacoinz.com/fr/monnaies/ethereum/ on remarque qu'en date du 9 -15 novembre la chute n'est pas si importante et que les transactions on continué à afflué sur la monnaie.
D'un côté c'est flippant comme réaction du marché…
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.