{"id":12204,"date":"2019-09-09T08:59:15","date_gmt":"2019-09-09T08:59:15","guid":{"rendered":"https:\/\/www.kaspersky.fr\/blog\/?p=12204"},"modified":"2019-11-22T08:47:26","modified_gmt":"2019-11-22T08:47:26","slug":"integer-overflow-ethereum","status":"publish","type":"post","link":"https:\/\/www.kaspersky.fr\/blog\/integer-overflow-ethereum\/12204\/","title":{"rendered":"De l&rsquo;argent pour rien avec des contrats intelligents"},"content":{"rendered":"<p>\u00cates-vous int\u00e9ress\u00e9 par les contrats intelligents\u00a0? Savez-vous ce qu\u2019est le d\u00e9passement d\u2019entier\u00a0? En fait, le d\u00e9passement d\u2019entier est un probl\u00e8me provenant du domaine de la programmation, mais un contrat intelligent est essentiellement un programme, vous voudrez donc peut-\u00eatre comprendre de quoi il s\u2019agit.<\/p>\n<p>En d\u2019autres termes, si un entier non sign\u00e9 est stock\u00e9 dans une seule cellule de m\u00e9moire d\u2019un octet, il ne peut prendre que les valeurs comprises entre 0 et 255. Cela signifie que si aucune autre condition n\u2019est sp\u00e9cifi\u00e9e, 255 + 1 = 0 ; plus inqui\u00e9tant, 0 \u2013 1 = 255. C\u2019est ainsi que la plupart des processeurs modernes traitent ces donn\u00e9es.<\/p>\n<p>Dans de nombreux langages de programmation modernes, le programme lui-m\u00eame contr\u00f4le si un d\u00e9bordement s\u2019est produit pendant les op\u00e9rations arithm\u00e9tiques. Si c\u2019est le cas, il y a de fortes chances pour que ce ne soit pas ce que le programmeur cherchait \u00e0 faire, il est donc pr\u00e9f\u00e9rable d\u2019interrompre le programme et de s\u2019assurer qu\u2019il ne causera pas de bugs plus tard.<\/p>\n<h2>Qu\u2019est-ce que les contrats intelligents ont \u00e0 voir avec tout cela ?<\/h2>\n<p>Un tel contr\u00f4le n\u2019est pas pr\u00e9vu dans les contrats intelligents pour Ethereum lors du traitement d\u2019argent. Ce qui veut dire que si vous n\u2019avez aucun jeton et que vous en envoyez un \u00e0 un ami, vous recevrez un quintillion de jetons. \u00c9videmment, le programme doit \u00eatre interrompu sur-le-champ et la transaction incorrecte annul\u00e9e.<\/p>\n<p>Pourquoi les d\u00e9veloppeurs de l\u2019Ethereum mettraient ainsi en \u0153uvre leur arithm\u00e9tique est un myst\u00e8re. Mais pour que les r\u00e8gles universelles de math\u00e9matiques humaines s\u2019appliquent aux contrats intelligents, chaque programmeur de contrats intelligents doit ajouter plus de 100 lignes de code contenant les fonctions normales d\u2019addition, de multiplication, etc.<\/p>\n<p>Sinon, avec un quintillion cr\u00e9dit\u00e9 sur leur compte, le ciel est la limite. Un escroc pourrait entrer dans un \u00e9change de cryptomonnaie et acheter tous les bitcoins ou l\u2019\u00e9ther qu\u2019il veut. A n\u2019importe quel prix.<\/p>\n<p>Ce sc\u00e9nario n\u2019est pas purement th\u00e9orique ; il s\u2019est en r\u00e9alit\u00e9 produit un certain nombre de fois avec plusieurs types de devises. Habituellement, nous apprenons l\u2019existence du probl\u00e8me du code <a href=\"https:\/\/etherscan.io\/tx\/0xfd2d1ab0bb7ca5df5228aa3ac714ba160f57e6bc153e10b490e92bf50dc9f566\" target=\"_blank\" rel=\"noopener nofollow\">apr\u00e8s que l\u2019agresseur ait r\u00e9ussi son tour<\/a> et qu\u2019il ait disparu les poches pleines. Mais m\u00eame apr\u00e8s cela, rien ne peut \u00eatre fait : les contrats intelligents sont grav\u00e9s dans la pierre, ils ne peuvent \u00eatre modifi\u00e9s ou corrig\u00e9s.<\/p>\n<h2>D\u00e9bordement et bitcoin<\/h2>\n<p>En v\u00e9rit\u00e9, le probl\u00e8me du d\u00e9bordement d\u2019entiers ne se limite pas \u00e0 l\u2019\u00e9th\u00e9r\u00e9um. Bien avant, Bitcoin avait le m\u00eame probl\u00e8me.<\/p>\n<p>Le d\u00e9bordement d\u2019entiers a fait que deux portefeuilles Bitcoin se <a href=\"https:\/\/en.bitcoin.it\/wiki\/Value_overflow_incident\" target=\"_blank\" rel=\"noopener nofollow\">sont retrouv\u00e9s avec<\/a> 184 milliards de bitcoins le 15 ao\u00fbt 2010. Inutile de pr\u00e9ciser que cette \u00e9volution n\u2019\u00e9tait pas la bienvenue pour les fondateurs. Ils (Satoshi Nakamoto) ont rapidement modifi\u00e9 le code, corrig\u00e9 le bug, annul\u00e9 l\u2019historique financier et pr\u00e9tendu que rien ne s\u2019\u00e9tait pass\u00e9.<\/p>\n<p>Mais qu\u2019est-ce que le d\u00e9mant\u00e8lement de l\u2019histoire signifie ? Un exemple : si j\u2019achetais des bitcoins pour une valeur de 10.000 $ aujourd\u2019hui, le d\u00e9mant\u00e8lement ferait en sorte que mes bitcoins reviendraient au vendeur, contrairement \u00e0 mes dollars, que je ne r\u00e9cup\u00e9rerai pas. Et si un d\u00e9mant\u00e8lement avait lieu maintenant plut\u00f4t qu\u2019en 2010, les cons\u00e9quences seraient colossales, car maintenant, chaque jour, environ 5 milliards de dollars de transactions de bitcoin sont r\u00e9alis\u00e9es.<\/p>\n<p>Ce qui pr\u00e9c\u00e8de, ainsi que d\u2019autres cas, d\u00e9montre que la cha\u00eene de blocage n\u2019est inchangeable que si tout se d\u00e9roule comme pr\u00e9vu. Sinon, le pr\u00e9-budget et la cha\u00eene de blocage peuvent \u00eatre modifi\u00e9s.<\/p>\n<h2>Retour aux contrats intelligents<\/h2>\n<p>La d\u00e9cision des d\u00e9veloppeurs d\u2019Ethereum semble plut\u00f4t bizarre, il semblerait qu\u2019ils aient arrang\u00e9 des pi\u00e8ges pour les programmeurs de contrats intelligents. Vous devez avoir beaucoup d\u2019exp\u00e9rience ou \u00eatre tr\u00e8s concentr\u00e9 (ou les deux) pour vous \u00e9viter \u00e0 vous ou \u00e0 vos investisseurs de perdre tout votre argent du jour au lendemain. Et c\u2019est encore une autre raison pour laquelle le code de contrat intelligent doit faire l\u2019objet d\u2019une v\u00e9rification minutieuse. Dans le cadre de Kaspersky Token Offering Security, nos experts analysent les vuln\u00e9rabilit\u00e9s et les fonctionnalit\u00e9s non document\u00e9es des contrats intelligents. Vous pouvez en savoir plus \u00e0 ce sujet sur notre page <a href=\"https:\/\/www.kaspersky.com\/enterprise-security\/ico-sto-security\" target=\"_blank\" rel=\"noopener nofollow\">d\u2019offre de s\u00e9curit\u00e9 de jeton<\/a>.<\/p>\n<p>\u00a0<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Qu&rsquo;est-ce qu&rsquo;un d\u00e9bordement d&rsquo;entier, et pourquoi devriez-vous le savoir ?<\/p>\n","protected":false},"author":669,"featured_media":12205,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2112,3150],"tags":[2555,2556,2323],"class_list":{"0":"post-12204","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-business","8":"category-enterprise","9":"tag-blockchain","10":"tag-contrats-intelligents","11":"tag-ethereum"},"hreflang":[{"hreflang":"fr","url":"https:\/\/www.kaspersky.fr\/blog\/integer-overflow-ethereum\/12204\/"},{"hreflang":"en-in","url":"https:\/\/www.kaspersky.co.in\/blog\/integer-overflow-ethereum\/16601\/"},{"hreflang":"en-ae","url":"https:\/\/me-en.kaspersky.com\/blog\/integer-overflow-ethereum\/13993\/"},{"hreflang":"en-us","url":"https:\/\/usa.kaspersky.com\/blog\/integer-overflow-ethereum\/18541\/"},{"hreflang":"en-gb","url":"https:\/\/www.kaspersky.co.uk\/blog\/integer-overflow-ethereum\/16633\/"},{"hreflang":"es-mx","url":"https:\/\/latam.kaspersky.com\/blog\/integer-overflow-ethereum\/15286\/"},{"hreflang":"es","url":"https:\/\/www.kaspersky.es\/blog\/integer-overflow-ethereum\/19176\/"},{"hreflang":"it","url":"https:\/\/www.kaspersky.it\/blog\/integer-overflow-ethereum\/17870\/"},{"hreflang":"ru","url":"https:\/\/www.kaspersky.ru\/blog\/integer-overflow-ethereum\/28140\/"},{"hreflang":"x-default","url":"https:\/\/www.kaspersky.com\/blog\/integer-overflow-ethereum\/28188\/"},{"hreflang":"pl","url":"https:\/\/plblog.kaspersky.com\/integer-overflow-ethereum\/11109\/"},{"hreflang":"de","url":"https:\/\/www.kaspersky.de\/blog\/integer-overflow-ethereum\/20008\/"},{"hreflang":"nl","url":"https:\/\/www.kaspersky.nl\/blog\/integer-overflow-ethereum\/24216\/"},{"hreflang":"ru-kz","url":"https:\/\/blog.kaspersky.kz\/integer-overflow-ethereum\/22060\/"},{"hreflang":"en-au","url":"https:\/\/www.kaspersky.com.au\/blog\/integer-overflow-ethereum\/23322\/"},{"hreflang":"en-za","url":"https:\/\/www.kaspersky.co.za\/blog\/integer-overflow-ethereum\/23233\/"}],"acf":[],"banners":"","maintag":{"url":"https:\/\/www.kaspersky.fr\/blog\/tag\/contrats-intelligents\/","name":"contrats intelligents"},"_links":{"self":[{"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/posts\/12204","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/users\/669"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/comments?post=12204"}],"version-history":[{"count":2,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/posts\/12204\/revisions"}],"predecessor-version":[{"id":12623,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/posts\/12204\/revisions\/12623"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/media\/12205"}],"wp:attachment":[{"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/media?parent=12204"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/categories?post=12204"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/tags?post=12204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}