{"id":20830,"date":"2020-01-02T18:45:48","date_gmt":"2020-01-02T16:45:48","guid":{"rendered":"https:\/\/www.kaspersky.es\/blog\/?p=20830"},"modified":"2020-01-02T18:45:48","modified_gmt":"2020-01-02T16:45:48","slug":"gemini-front-running","status":"publish","type":"post","link":"https:\/\/www.kaspersky.es\/blog\/gemini-front-running\/20830\/","title":{"rendered":"El contrato inteligente en d\u00f3lar Gemini permite el robo de los pagos antispam"},"content":{"rendered":"<p>Los gemelos <a href=\"https:\/\/en.wikipedia.org\/wiki\/Winklevoss_twins\" target=\"_blank\" rel=\"noopener nofollow\">Winklevoss<\/a> son conocidos por ser los supuestos padres fundadores de Facebook, de hecho, recibieron <a href=\"https:\/\/www.law.com\/almID\/1202428141988\/\" target=\"_blank\" rel=\"noopener nofollow\">65 millones de d\u00f3lares<\/a> a modo de compensaci\u00f3n por parte de Mark Zuckerberg en el 2008. En el a\u00f1o 2013, invirtieron una gran cantidad en Bitcoin, comprando aproximadamente un 1 % de todas las monedas existentes a 120 d\u00f3lares cada una.<\/p>\n<p>Poco despu\u00e9s los hermanos inauguraron la plataforma de intercambio de criptomonedas <a href=\"https:\/\/en.wikipedia.org\/wiki\/Gemini_(company)\" target=\"_blank\" rel=\"noopener nofollow\">Gemini<\/a> y en el 2018 <a href=\"https:\/\/medium.com\/gemini\/gemini-launches-the-gemini-dollar-62787f963fb4\" target=\"_blank\" rel=\"noopener nofollow\">lanzaron<\/a> una <em>stablecoin: <\/em>el d\u00f3lar <a href=\"https:\/\/gemini.com\/dollar\" target=\"_blank\" rel=\"noopener nofollow\">Gemini<\/a> (GUSD). Una <em>stablecoin<\/em> es una criptomoneda de inter\u00e9s fijo (1 GUSD siempre equivale a 1 d\u00f3lar estadounidense). Este tipo de criptomonedas son \u00fatiles para la \u201cdigitalizaci\u00f3n\u201d de d\u00f3lares aut\u00e9nticos, ya que hacen que mover d\u00f3lares de la cadena de bloques entre plataformas de intercambio sea r\u00e1pido y sencillo. El aval de la conversi\u00f3n inversa a d\u00f3lares es la compa\u00f1\u00eda que te los exped\u00eda y vend\u00eda.<\/p>\n<p>Gracias al <a href=\"https:\/\/www.kaspersky.es\/enterprise-security\/ico-sto-security\" target=\"_blank\" rel=\"noopener\">servicio de revisi\u00f3n del c\u00f3digo fuente del contrato inteligente<\/a>, analizamos un contrato inteligente estipulado en GUSD y detectamos un error.<\/p>\n<h3><strong>Descargo de responsabilidad<\/strong><\/h3>\n<p>Ten en cuenta que el contrato inteligente ya se hab\u00eda revisado, aunque no sabemos si en el informe se describieron los fallos del c\u00f3digo.<\/p>\n<p>De acuerdo con nuestra pol\u00edtica de revelaci\u00f3n responsable, contactamos con el equipo de seguridad de Gemini para reportar el problema. Nos informaron de que este asunto ya se hab\u00eda considerado durante la fase de dise\u00f1o, pero que no presentaba ning\u00fan riesgo para los GUSD.<\/p>\n<p>En este art\u00edculo de nuestro blog encontrar\u00e1s una explicaci\u00f3n sencilla sobre el funcionamiento de los <a href=\"https:\/\/www.kaspersky.es\/blog\/ethereum-ico\/14600\/\" target=\"_blank\" rel=\"noopener\">contratos inteligentes, Ethereum e ICO<\/a>.<\/p>\n<h3>Contratos inteligentes con el d\u00f3lar Gemini<\/h3>\n<p>En t\u00e9rminos generales, cuando alguien quiere crear nuevos <em>tokens<\/em> con la cadena de bloques Ethereum, escriben un contrato inteligente (un miniprograma) que especifica lo siguiente:<\/p>\n<ol>\n<li>Datos (\u201cestos <em>tokens<\/em> est\u00e1n en estas direcciones).<\/li>\n<li>M\u00e9todos (\u201cpor favor, transfiere mis <em>tokens<\/em> a estas direcciones\u201d, adem\u00e1s de unas cuantas \u00f3rdenes).<\/li>\n<\/ol>\n<p>Los creadores del sistema del d\u00f3lar Gemini <a href=\"https:\/\/gemini.com\/wp-content\/themes\/gemini\/assets\/img\/dollar\/gemini-dollar-whitepaper.pdf\" target=\"_blank\" rel=\"noopener nofollow\">implementaron<\/a> tambi\u00e9n las siguientes mejoras:<\/p>\n<ol>\n<li>Separaron el contrato en tres componentes: \u201cProxy\u201d (la interfaz permanente con la que los titulares de los tokens pueden interactuar y realizar operaciones), \u201cStore\u201d (la asignaci\u00f3n de los titulares de <em>tokens<\/em> a sus saldos) e \u201cImpl\u201d (la l\u00f3gica subyacente).<\/li>\n<li>El componente que describe la l\u00f3gica puede actualizarse y suplementarse con nuevas funciones como la habilidad de congelar fondos. Mientras tanto, los datos y la interfaz no muestran cambios, la actualizaci\u00f3n es visible para todos.<\/li>\n<li>Para la actualizaci\u00f3n y el control, se utiliza un contrato inteligente \u201cde custodia\u201d aislado que administran varias personas (custodios) para una protecci\u00f3n adicional. Si un custodio propone una acci\u00f3n, los dem\u00e1s tendr\u00e1n que confirmarla para que pueda llevarse a cabo.<\/li>\n<\/ol>\n<p>Las mejoras son profundas y aumentan en general la seguridad y flexibilidad.<\/p>\n<h3>Pagos <em>antispam<\/em><\/h3>\n<p>Para que cualquier otro que no sea el custodio principal introduzca una propuesta en un contrato de custodia, debe pagar una participaci\u00f3n de 1 ETH (unos 200 d\u00f3lares seg\u00fan la tasa de cambio actual). Como se se\u00f1ala en el mismo <a href=\"https:\/\/github.com\/gemini\/dollar\/blob\/master\/Custodian.sol#L151\" target=\"_blank\" rel=\"noopener nofollow\">contrato<\/a>, la medida <em>antispam<\/em> pretende evitar que los participantes creen muchas solicitudes.<\/p>\n<p>Los pagos <em>antispam<\/em> <a href=\"https:\/\/github.com\/gemini\/dollar\/blob\/master\/Custodian.sol#L264\" target=\"_blank\" rel=\"noopener nofollow\">van<\/a> dirigidos a una persona: la que anuncia la aprobaci\u00f3n de una propuesta\/solicitud en concreto. Esta implementaci\u00f3n no parece muy equitativa, pero los comentarios indican claramente que sus creadores lo han concebido de esta forma.<\/p>\n<p><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } else {<\/strong><\/p>\n<p><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (address(this).balance &gt; 0) {<\/strong><\/p>\n<p><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ reward sender with anti-spam payments<\/strong><\/p>\n<p><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\/\/ ignore send success (assign to <\/strong><strong>\u02b9<\/strong><strong>success\u02b9 but this will be overwritten)<\/strong><\/p>\n<p><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 success = msg.sender.send(address(this).balance);<\/strong><\/p>\n<p>Por nuestra parte, recomendamos el uso de la estrategia <a href=\"https:\/\/solidity.readthedocs.io\/en\/v0.5.10\/common-patterns.html\" target=\"_blank\" rel=\"noopener nofollow\">Solidity Withdrawal Pattern<\/a>.<\/p>\n<h3>Los atacantes pueden robar todos los pagos <em>antispam<\/em><\/h3>\n<p>La persona que determina la aprobaci\u00f3n de la solicitud tambi\u00e9n recibe todos los pagos <em>antispam<\/em> de ETH. Para ello, \u00e9l o ella llama a la funci\u00f3n de contrato inteligente <strong>completeUnlock <\/strong>y aprueba las firmas de dos custodios en los par\u00e1metros.<\/p>\n<p>El problema es que Ethereum, como cualquier otra cadena de bloques, ejecuta solicitudes con retraso. Una transacci\u00f3n de cliente (transferir dinero o llamar a una funci\u00f3n) debe esperar un tiempo en l\u00ednea (unos 15 segundos o m\u00e1s). Durante este tiempo, absolutamente cualquier persona puede ver las transferencias planificadas de otros usuarios de Ethereum, incluidas las cantidades, los destinatarios y los par\u00e1metros. Y el fisg\u00f3n podr\u00eda usar esta informaci\u00f3n para crear su propia transacci\u00f3n y llevarla al frente pagando una comisi\u00f3n m\u00e1s alta al minero.<\/p>\n<p>Cualquier ventaja conseguida mediante este m\u00e9todo se considera un <a href=\"https:\/\/consensys.github.io\/smart-contract-best-practices\/known_attacks\/#front-running-aka-transaction-ordering-dependence\" target=\"_blank\" rel=\"noopener nofollow\">tipo de ataque<\/a> conocido como<em> front-running<\/em> o inversi\u00f3n ventajista.<\/p>\n<p>De <a href=\"https:\/\/www.investopedia.com\/terms\/f\/frontrunning.asp\" target=\"_blank\" rel=\"noopener nofollow\">investopedia.com<\/a>:<\/p>\n<p>La inversi\u00f3n ventajista se produce cuando un br\u00f3ker u otra entidad realiza una operaci\u00f3n porque tiene conocimiento previo de una gran transacci\u00f3n no publicada que influir\u00e1 en el precio del activo, lo que resulta en una ganancia financiera probable para el br\u00f3ker. Tambi\u00e9n ocurre cuando un br\u00f3ker o analista compra o vende acciones por su cuenta antes de la recomendaci\u00f3n de compra o venta de su empresa a los clientes.<\/p>\n<p>En nuestro caso, un completo extra\u00f1o puede configurar un robot para monitorear el <a href=\"https:\/\/etherscan.io\/address\/0x9a7b5f6e453d0cda978163cb4a9a88367250a52d\" target=\"_blank\" rel=\"noopener nofollow\">contrato de custodia.<\/a> Si ve que alguien llam\u00f3 a la funci\u00f3n <strong>completeUnlock <\/strong>(es decir, un custodio est\u00e1 interactuando con el d\u00f3lar Gemini), inmediatamente copia todos los par\u00e1metros y llama a la funci\u00f3n para extraer el Ether que se ha acumulado all\u00ed.<\/p>\n<p>Para contrarrestar tal ataque, nuevamente te recomendamos usar la famosa estrategia <a href=\"https:\/\/solidity.readthedocs.io\/en\/v0.5.10\/common-patterns.html\" target=\"_blank\" rel=\"noopener nofollow\">Solidity Withdrawal Pattern<\/a>.<\/p>\n<p>Adem\u00e1s de eso, tambi\u00e9n te recomendamos que bloquees la opci\u00f3n de que <a href=\"https:\/\/github.com\/gemini\/dollar\/blob\/master\/Custodian.sol#L233\" target=\"_blank\" rel=\"noopener nofollow\">desconocidos<\/a> puedan llamar a una funci\u00f3n destinada a custodios.<\/p>\n<h3>La implementaci\u00f3n pr\u00e1ctica de un ataque<\/h3>\n<p>Aunque sea peligrosa en teor\u00eda, la vulnerabilidad detectada tambi\u00e9n es ben\u00e9vola en la pr\u00e1ctica. Te explicamos por qu\u00e9:<\/p>\n<ol>\n<li>Los pagos <em>antispam<\/em> no preocupan a los custodios de una empresa de la magnitud del d\u00f3lar Gemini. La capitalizaci\u00f3n de GUSD (el volumen total de tokens emitidos) en un punto super\u00f3 los 100 millones de d\u00f3lares y ahora supera los 5 millones de d\u00f3lares.<\/li>\n<li>Los pagos <em>antispam<\/em> no han aparecido todav\u00eda en <a href=\"https:\/\/etherscan.io\/address\/0x9a7b5f6e453d0cda978163cb4a9a88367250a52d\" target=\"_blank\" rel=\"noopener nofollow\">este contrato<\/a> y puede que nunca lo hagan, ya que el custodio principal no est\u00e1 obligado a depositarlos (los dem\u00e1s s\u00ed).<\/li>\n<li>Conocer la vulnerabilidad permite a los usuarios evitar la funci\u00f3n vulnerable o actualizar el contrato.<\/li>\n<li>Durante el an\u00e1lisis, no encontramos vulnerabilidades que amenazaran a los <em>tokens<\/em> de GUSD.<\/li>\n<\/ol>\n<p>Gemini afirma: \u201cElegimos este dise\u00f1o porque Gemini no tiene la intenci\u00f3n de utilizar Ether en condiciones normales y, como resultado, tomamos una decisi\u00f3n basada en el riesgo de no expandir materialmente la complejidad de nuestra base de c\u00f3digo \u00fanicamente para el beneficio inmaterial de un robusto mecanismo de recuperaci\u00f3n para una inversi\u00f3n te\u00f3rica y nominal contra el <em>spam<\/em>. Dar prioridad al c\u00f3digo seguro y simple sigue siendo la mejor soluci\u00f3n para el d\u00f3lar Gemini y sus usuarios. En el futuro, podremos reconsiderar esta decisi\u00f3n si el riesgo cambia y optar por un contrato m\u00e1s costoso y complejo\u201d.<\/p>\n<p>Decidimos publicar este art\u00edculo en coordinaci\u00f3n con Gemini, dado que las inversiones <em>antispam<\/em> est\u00e1n en riesgo solo a trav\u00e9s de una combinaci\u00f3n de circunstancias espec\u00edficas e improbables, y GUSD no est\u00e1 en riesgo.<\/p>\n<p>Nuevamente, recordamos a todos la necesidad de una estrategia de seguridad hol\u00edstica para las ICO y otras actividades relacionadas con las <a href=\"https:\/\/www.kaspersky.es\/enterprise-security\/ico-sto-security\" target=\"_blank\" rel=\"noopener\">criptomonedas y las cadenas de bloques<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Analizamos la inversi\u00f3n ventajista para capturar la inversi\u00f3n antispam del d\u00f3lar Gemini.<\/p>\n","protected":false},"author":669,"featured_media":20832,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2202,2754,2755],"tags":[2368,3020,2416,3021,2521],"class_list":{"0":"post-20830","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-business","8":"category-enterprise","9":"category-smb","10":"tag-criptomonedas","11":"tag-ether","12":"tag-ethereum","13":"tag-stablecoin","14":"tag-tokens"},"hreflang":[{"hreflang":"es","url":"https:\/\/www.kaspersky.es\/blog\/gemini-front-running\/20830\/"},{"hreflang":"en-in","url":"https:\/\/www.kaspersky.co.in\/blog\/gemini-front-running\/18359\/"},{"hreflang":"en-ae","url":"https:\/\/me-en.kaspersky.com\/blog\/gemini-front-running\/15236\/"},{"hreflang":"en-us","url":"https:\/\/usa.kaspersky.com\/blog\/gemini-front-running\/20065\/"},{"hreflang":"en-gb","url":"https:\/\/www.kaspersky.co.uk\/blog\/gemini-front-running\/18423\/"},{"hreflang":"es-mx","url":"https:\/\/latam.kaspersky.com\/blog\/gemini-front-running\/16832\/"},{"hreflang":"it","url":"https:\/\/www.kaspersky.it\/blog\/gemini-front-running\/19597\/"},{"hreflang":"ru","url":"https:\/\/www.kaspersky.ru\/blog\/gemini-front-running\/26060\/"},{"hreflang":"x-default","url":"https:\/\/www.kaspersky.com\/blog\/gemini-front-running\/31924\/"},{"hreflang":"pt-br","url":"https:\/\/www.kaspersky.com.br\/blog\/gemini-front-running\/13850\/"},{"hreflang":"de","url":"https:\/\/www.kaspersky.de\/blog\/gemini-front-running\/21847\/"},{"hreflang":"nl","url":"https:\/\/www.kaspersky.nl\/blog\/gemini-front-running\/24769\/"},{"hreflang":"en-au","url":"https:\/\/www.kaspersky.com.au\/blog\/gemini-front-running\/25647\/"},{"hreflang":"en-za","url":"https:\/\/www.kaspersky.co.za\/blog\/gemini-front-running\/25478\/"}],"acf":[],"banners":"","maintag":{"url":"https:\/\/www.kaspersky.es\/blog\/tag\/criptomonedas\/","name":"criptomonedas"},"_links":{"self":[{"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/posts\/20830","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/users\/669"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/comments?post=20830"}],"version-history":[{"count":5,"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/posts\/20830\/revisions"}],"predecessor-version":[{"id":20836,"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/posts\/20830\/revisions\/20836"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/media\/20832"}],"wp:attachment":[{"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/media?parent=20830"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/categories?post=20830"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/tags?post=20830"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}