Svindelige evner fundet i Bitfinex LEO ERC20 kontraktkode
Det er meget velkendt, at smarte kontrakter kan være vanskelige. Ikke-tekniske mennesker bliver fristet til at købe et ERC20-token baseret på hype-niveau uden nogen forudgående viden om kvaliteten af tokenet og sikkerheden for det token, de køber.
Bitfinex, en af de største kryptobørs i branchen, har udstedt et token kaldet LEO. Dette token tillader den enhed, der styrer det, at udskrive eller prikke ubegrænsede nye tokens, det giver dem også mulighed for at slette nogens mønter inklusive, men ikke begrænset til dem på centraliserede eller decentraliserede børser, varm eller kold opbevaring, hardware- eller softwarepung og / eller papir eller hjerne tegnebog.
Lad dig ikke narre, at købe en ERC20 betyder ikke, at dine aktiver virkelig er dine! Det er ikke første gang, jeg udsætter en sådan smart kontrakt. Bare i sidste uge offentliggjorde vi en rapport om Cointelligence om en lignende smart kontrakt, der tillader den samme funktionalitet, se vores anmeldelse om WHEN Smart Contract.
Aktiverer LEO ERC20-kontrakt svindel og / eller svig med flere milliarder dollars?
Vi overlader til dig at beslutte, lad os nu dykke dybt ned i LEO-tokenet.
Introduktion
LEO er et ERC20-token introduceret den 10. maj 2019 af iFinex Inc. i deres meddelelse. Du kan finde LEO Whitepaper her. Selvom vi ikke kunne finde et GitHub-lager, blev deres token-kontraktkode verificeret på Etherscan. Vi brugte den verificerede Etherscan-kode til LEO, LeoController og TokenFactory til at teste og implementere en kopi af dette token i Ropsten testnet.
LEO-token – ERC20-token udstedt af Unus Sed Leo Limited, et datterselskab af iFinex Inc..
Controller – Controller-kontrakten gør det muligt for ejeren at overføre, godkende, udstede, brænde og ændre controlleren selv. Bemærk også, at selvom kontrakten “0xf17ebb3a24dc6d6b56d38adf0df499c1cd9e5672” i øjeblikket “styrer” LEO ERC20-kontrakten, kan “controlleren” let opgraderes eller ændres til enhver adresse til enhver tid af ejeren, hvilket gør det muligt for dem stort set at gøre noget med LEO-tokenet.
LEOController-kontrakt: Ejeren kan ændre “Controller” i LEO ERC20-kontrakten
Det LEOController kontraktindehaver kan ændre “controller” til enhver tid og indstille denne til enhver tegnebog-adresse, de kontrollerer.
- Ved at kalde funktionen “upgradeController” på linje 698 og indtaste en hvilken som helst tegnebog-adresse efter eget valg.
- Når ovenstående transaktion er bekræftet, bliver den indtastede adresse den nye “controller” for LEO ERC20-kontrakten.
LEO-kontrakt: Ejeren kan brænde dine tokens og prikke ubegrænset nye tokens
Hvordan kunne LEO-ejeren beholde prægningstokens for evigt?
Som forklaret før, når controller-adressen er ændret til en tegnebog-adresse (eller endda en ny smart kontrakt), kan de simpelthen kalde funktionen “generereTokens” på linje 460.
Parametre
- _ejer → Tegnebogen, der modtager de nyligt prægede LEO-tokens.
- _mount → Mængden af tokens, der skal “udskrives”, der går til ovenstående adresse.
Bemærk – LEO-whitepaper nævner ikke, hvad den maksimale tokenforsyning er, og denne kontrakt giver dem mulighed for at fortsætte med at prikke LEO-tokens, da vi var i stand til at “udskrive” en kvadrillion LEO-tokens på et testnet ved hjælp af deres kode.
Hvordan kunne LEO-ejeren slette en andens tokens?
Funktionen “destroyTokens” på 477 gør det muligt for LEO-controller-tegnebogen at brænde nogens LEO-tokens inklusive, men ikke begrænset til dem, der er til stede i en central eller decentral udveksling, en hardware- eller softwaretegnebog, varm eller kold opbevaring og / eller et papir eller hjerne tegnebog. Det betyder ikke noget, hvor dine mønter er, de kan slette dine mønter, hvis de vil. Så simpelt som det.
Parametre
- _ejer → Tegnebogen, hvorfra de eksisterende LEO-tokens brændes.
- _mount → Mængden af tokens, der skal “slettes” fra ovennævnte tegnebog-adresse.
Yderligere dokumentation
Vi kopierede nøjagtigt den samme kode til LEO ERC20-token, controller og fabrik for at implementere følgende kontrakt på Ropsten testnet.
Tegnebøger / adresser
- Afsenderadresse: 0x58FA58089956c5cba21d9f61434B1902F8121b32
- Tilfældigt genereret adresse: 0xada183F6Ff6E7805EE5bDA701d40958858FeE548
Først ændrede vi controlleren fra afsenderadressen til en kopi af “LEOController” for at se, om vi igen kunne ændre controlleren tilbage til afsenderadressen ved hjælp af funktionen “upgradeController”.
Trin
- Token Factory Implementeret
- LEO-token Implementeret
- LEOController Implementeret
- Kontrolleret, hvem der faktisk er “controller” på LEO-token-kontrakt: 0x58FA58089956c5cba21d9f61434B1902F8121b32.
- Ændrede controlleren ved hjælp af funktionen “changeController” på LEO-kontrakten til tidligere implementeret “LEOController” kontrakt
- Bekræftet, at controlleren faktisk blev ændret til den smarte kontraktadresse.
På dette tidspunkt svarer vores testnet LEO-kontrakt nøjagtigt til LEO ERC20-kontrakten på følgende måder
- Controlleren af LEO-kontrakten er en smart kontrakt.
- Controller-koden i testnet passer nøjagtigt med den ene i mainnet.
Nu prøver vi at bestemme:
- Hvis vi kan brænde eller ødelægge andres LEO-tokens ved først at skifte controller.
- Hvis vi kan udstede en sindssygt stor mængde LEO-token for at se, om der er et loft.
Trin
- Selvom vi på dette tidspunkt vidste, at det ikke var muligt for ejeren at ændre controller på “LEO” -kontrakten ved hjælp af funktionen “changeController”, sendte vi stadig bevidst den transaktion for at vende tilbage eller mislykkes. mislykkedes
- Vi gik til “LEOController” -kontrakten og brugte funktionen “upgradeController” til at ændre controller for den kontrollerede smarte kontrakt, dvs. LEO, til afsenderadressen igen. Lykkedes
Bemærk – at vi skiftede controller fra afsender til en smart kontrakt og derefter igen tilbage til afsenderen, fordi vi ønskede at vise dig, at det er ret let for os at ændre controlleren i et testnet (og for dem i mainnet).
Udsteder poletter
Da nu afsenderen igen er controller for LEO-kontrakten, kan den få adgang til LEO-kontraktsfunktionerne “generereTokens” og “ødelægge Tokens”. Vi genererede en tilfældig tegnebogadresse “0xada183F6Ff6E7805EE5bDA701d40958858FeE548” for at sende nogle sindssygt enorm mængde LEO-tokens 1.000.000.000.000.000.000.000.000.000.000.000.000 (en undecillion) LEO overført.
Brændende poletter
Vi ønskede at afgøre, om vi (afsenderen) kunne slette eller ødelægge tokens fra den tilfældige adresse 0xada183F6Ff6E7805EE5bDA701d40958858FeE548 vi tidligere genererede.
I ovenstående transaktion brændte / slettede / ødelagde vi 10.000.000.000 (ti milliarder) tokens fra en andens tegnebog eller en adresse, som vi ikke ejer.
Du kan se, at adressen “0xada183F6Ff6E7805EE5bDA701d40958858FeE548” nu har en saldo på 999.999.999.999.999.999.999.999.990.000.000.000 (ni hundrede og ni nitten halvfems ni nittenoghalvfems nitten hundrede og ni , ni hundrede og ni og halvfems quintillion, ni hundrede og ni og halvfems quadrillion, ni hundrede og halvfems trillioner, ni hundrede og halvfems milliarder) kun testnet LEO tokens.
Sammenligning af kontrakter | |||
LEO | Original | Testnet | Diff |
MiniMeTokenFactory | Original | Testnet | Diff |
LEOController | Original | Testnet | Diff |
TLDR: Hvordan påvirker det mig?
Paolo Ardoino, CTO i Bitfinex, svarede vores tweet der skitserer dette problem med angivelse af:
”Af sikkerhedsmæssige og fremtidssikrede grunde forlod vi muligheden for også at opgradere Token-kontrakten. Det er virkelig en nøglefunktion for en kontrakt, der kan leve mange år. Minting af flere poletter ville bare ikke give mening for Finex … som at skyde vores fod. “
Vi elskede ikke kun hans tweet, men vil også gerne takke ham offentligt for hans svar, fordi vi mener, at det er sådan, vi kan holde os ansvarlige og hjælpe med at guide denne branche mod en bedre fremtid.
Lad os nu komme tilbage til forretningen! Skriv en god note, at smarte kontrakter er designet til at være tillidsløse. Bitfinex bryder tilliden her ved at sætte en bagdør her, som giver dem en billet til at snyde, når de har brug for det, med en uretfærdig fordel i forhold til mennesker som dig og mig. Gentaget igennem hele denne artikel er det eneste faktum, vi har påpeget, deres evne til at prikke et hvilket som helst antal (eller ubegrænset) LEO-mønter efter eget skøn og slette enhver tegnebogs mønt nu eller i fremtiden.
For at opsummere og forenkle alt for vores ikke-tekniske læsere benægter eller sætter vi ikke spørgsmålstegn ved den smarte kontrakts evne til at blive opgraderbar. Problemet her er ikke teknisk, men filosofisk. Hvis du er okay med, at Bitfinex er i stand til at gøre, hvad de kan gøre med LEO, forstår vi det også og respekterer dit synspunkt. Men for os spiller LEO ikke godt med blockchain-ånden og filosofien, fordi de kan diktere vilkår. Også baseret på vores mangelfulde og ydmyge forståelse, en kryptovaluta:
- Bør være åben for alle. Du kan komme og gå som du vil. ✓
- Bør være retfærdig. Ingen skal have nogen uretfærdig fordel i forhold til nogen anden. ✘
- Bør inkludere. Det bør ikke begrænses til nogen uanset hvad de sagde eller gjorde, eller hvor de kom fra, i stedet for at være fuldstændig ligeglade med det "WHO" de er eller "hvad" de kunne muligvis blive. ✘
- Bør være censur-resistent, hvis ikke censur-fri. Ingen bør forhindres i at bruge eller få adgang til nogen funktion på et givet tidspunkt. Når det kommer til et blockchain-netværk (smart kontrakt i dette tilfælde), skal selv dårlige aktører som svindlere, hackere og svindlere behandles på ucensureret måde – inklusiv, lige, åbent og retfærdigt. Hvis du ikke kan censurere dårlige skuespillere i Bitcoin, hvorfor skal du være i stand til at gøre det i LEO? “Opgraderbarhed” retfærdiggør ikke “evnen” til at diktere termer. ✘
- Bør være uforanderlig. Uanset hvad der er sket, skal det forblive der for evigt for enhver og enhver at validere, være enig eller være uenig. ✓
- Netværket skal decentraliseres. Der bør ikke være nogen central enhed, der kan diktere vilkår for, hvad der skal ske. Selvom Ethereum-netværket er decentraliseret, er LEO-token-kontrakten ikke fordi de kan diktere vilkår. ✘
- Bør distribueres. Alle skal være i stand til selv at få netværkshistorikken og validere ægtheden af dataene. ✓
Folk stoler på blockchain, fordi det er tillidsløst. Den troværdige tillidløse karakter af blockchain gjorde folk som dig og mig interesserede i denne fantastiske teknologi.
Vi har ikke nogen nag mod Bitfinex på et personligt niveau, men er ikke bange for at rette fingrene mod dem, når vi føler, at de tager fejl, og at de har brug for at gøre det rigtige. Vi tilbyder en løsning på Bitfinex, at skabe et nyt token uden sådanne funktioner og bytte dem med investorerne. Denne handling alene kunne muligvis øge investorernes tillid til LEO-tokenet.
Endelig kan denne debat gå i cirkler, fordi Bitfinex hævder, at de har brug for “opgraderbarhed” (gør de virkelig?), Og vi accepterer ikke bare det faktum, at andres mønt kan slettes, selvom det ikke var vores. Vi hviler hermed vores sag over for dig, vores fantastiske læser, for at beslutte dig selv og se, om du vil have tillid til LEO ERC20-kontrakten.