Vi interessano gli smart contract? Sapete cos’è l’integer overflow? In realtà, l’integer overflow è un problema che arriva dal mondo della programmazione, ma uno smart contract in sostanza è un programma, quindi potreste voler capire di cosa si tratta.
In parole povere, se un integer non firmato viene memorizzato in una singola cella di memoria di byte, può avere solo valori che vanno da 0 a 255. Ciò significa che, se non sono specificate altre condizioni, 255 + 1 = 0; o ancor più preoccupante: 0 – 1 = 255. In questo modo la maggior parte dei processori moderni elaborano questi dati.
In molti linguaggi di programmazione moderni, il programma stesso controlla se si è verificato un overflow durante le operazioni aritmetiche. Se è così, può essere che non sia quello che il programmatore aveva in mente, quindi è meglio interrompere il programma e assicurarsi che non provocherà bug più in là.
Cosa hanno a che fare gli smart contract con tutto questo?
Questo tipo di controllo non è previsto sugli smart contract per Ethereum, quando viene processato del denaro. In altre parole, se avete zero token e ne mandate uno ad un amico, riceverete un trilione di token. Ovviamente, il programma dovrebbe essere interrotto immediatamente e annullata la transazione erronea.
Perché gli sviluppatori Ethereum abbiano implementato la loro aritmetica in questo modo è un mistero. Ma per applicare le leggi universali della matematica umana agli smart contract, ogni loro programmatore deve aggiungere più di 100 linee di codice contenenti le normali funzioni per l’addizione, la moltiplicazione e così via.
Altrimenti, con un trilione accreditato sul conto, non ci sono limiti. Un truffatore potrebbe accedere a una piattaforma di scambio di criptomonete e comprare tutti i bitcoin o l’ether che vuole, a qualsiasi prezzo.
Questo scenario non è solo teorico, è successo davvero svariate volte e con differenti tipi di valute. Generalmente, scopriamo il problema nel codice quando il cybercriminale ha già messo in pratica questo trucco ed è sparito con le tasche piene. Dopodiché non si può più fare niente, gli smart contract sono scolpiti nella pietra e non possono essere modificati o sistemati.
Overflow e Bitcoin
A dire il vero, il problema dell’overflow non si limita solo a Ethereum. Bitcoin ha già affrontato il problema molto prima.
L’integer overflow ha fatto sì che i wallet di bitcoin arrivassero a 184 miliardi di bitcoin il 15 agosto del 2010. È superfluo dire che i fondatori (tra i quali Satoshi Nakamoto) non l’hanno presa affatto bene: hanno modificato rapidamente il codice, corretto il bug e ripristinato la cronologia finanziaria come se non fosse successo niente.
Però questo cosa significa? Facciamo un esempio: se quel giorno io avessi comprato bitcoin per il valore di 10 mila dollari, questo ripristino avrebbe fatto ritornare i bitcoin al venditore a differenza dei miei dollari, che non avrei riavuto indietro. Se invece il ripristino avvenisse ora e non nel 2010, le conseguenze sarebbero gravissime, dato che ogni giorno si muovono all’incirca 5 miliardi di dollari in operazioni con bitcoin.
Il precedente, come anche gli altri casi, dimostra che non possiamo cambiare la blockchain solo se tutto funziona come previsto. Altrimenti, si possono cambiare sia l’idea, sia la blockchain.
Ritorniamo agli smart contract
La decisione degli sviluppatori di Ethereum risulta molto strana: è come se stessero tendendo una trappola ai programmatori di smart contract. Dovrete essere molto esperti o molto attenti (o entrambe le cose) per evitare che voi o i vostri inversori non perdiate i vostri soldi dal giorno alla notte. Questo è un altro dei motivi per il quale il codice degli smart contract esige un controllo accurato. Come parte del Kaspersky Token Offering Security, i nostri esperti analizzano il codice degli smart contract per individuare vulnerabilità e caratteristiche non documentate. Per saperne di più, visitate la nostra pagina Token Offering Security