Glosario cripto
Desbordamiento de enteros y errores de redondeo
Desbordamientos de enteros y errores de redondeo son fallos aritméticos de los contratos: los números dan la vuelta o pierden precisión a favor del atacante.
Los contratos inteligentes trabajan con enteros de tamaño fijo y sin decimales. Hay desbordamiento cuando un cálculo supera el valor máximo y da la vuelta hasta un número pequeño; el subdesbordamiento hace lo contrario y convierte un saldo minúsculo en uno enorme. Los errores de redondeo vienen de la división entera, que siempre trunca, así que el orden de multiplicaciones y divisiones y el sentido del redondeo deciden quién se queda con las fracciones sobrantes.
Los desbordamientos causaron varios desastres en los primeros tokens, como el fallo batchOverflow de 2018, que permitió emitir cantidades enormes de tokens de BeautyChain. Desde Solidity 0.8, publicado a finales de 2020, la aritmética revierte por defecto ante un desbordamiento, así que la forma clásica es rara en código nuevo, aunque los bloques unchecked y otros lenguajes pueden reintroducirla. Su lugar lo han ocupado los exploits de precisión: los atacantes manipulan el precio de las participaciones en vaults o mercados vacíos para que el redondeo les favorezca, como en el exploit de Hundred Finance en 2023 o en los ataques de inflación contra vaults ERC-4626.
Un error de redondeo de una unidad parece inofensivo, pero repetido miles de veces en un bucle o aplicado a un tipo de cambio manipulado puede vaciar un protocolo. Las auditorías ya revisan el sentido del redondeo de forma sistemática.
Ejemplo
Un atacante deposita un wei en un vault nuevo, dona directamente una gran cantidad para inflar el precio de la participación y las participaciones del siguiente depositante se redondean a cero, con lo que su depósito pasa al atacante.
