Un fallo convertía saldos normales en cifras astronómicas y permitía retirar tokens reales.

Un error en el registro de saldos de Cosmos EVM convirtió una vez en una serie de ataques contra varias blockchains. Entre el 20 y el 25 de agosto, los atacantes explotaron la vulnerabilidad crítica GHSA-7g4w-cg88-2cq2 y extrajeron activos de al menos seis redes del ecosistema Cosmos.
Cosmos EVM es un módulo que añade una máquina virtual completa de Ethereum a blockchains basadas en Cosmos SDK. El problema surgía en la frontera entre dos sistemas de contabilidad. EVM StateDB veía solo el saldo disponible de la cuenta, mientras que Cosmos SDK contabilizaba por separado los tokens bloqueados que podían delegarse en staking.
El atacante creaba una cuenta de vesting especial y un contrato inteligente malicioso, tras lo cual delegaba más tokens de los que StateDB consideraba disponibles. Debido a un desbordamiento aritmético no controlado, el saldo se transformaba en un número cercano a 2256. Un segundo fallo permitía usar ese valor para desbordar el saldo de otra cuenta y apropiarse efectivamente de los tokens reales que había allí. La oferta total de monedas no cambiaba en esta operación, porque ambos errores se combinaban en una sola transacción.
Tras retirar los fondos, los atacantes enviaban los activos a otras redes a través de puentes entre cadenas y los vendían. Según la evaluación de Cosmos Labs, en los intercambios descentralizados lograron cambiar activos por aproximadamente $2,87 millones, incluidos alrededor de 2,61 millones USDT, 114 ETH, 93,78 TON y otros tokens. Unos $2,85 millones adicionales pasaron por exchanges centralizados. Las cuentas que usaron los atacantes en esas plataformas fueron posteriormente congeladas en el marco de la investigación.
En la cronología publicada se analizan en detalle los ataques a MANTRA, TAC y KiiChain. Cosmos Labs no nombró las otras tres redes afectadas. En TAC, el atacante extrajo casi 2,99 mil millones de tokens TAC, transfirió parte a BNB Chain e intercambió aproximadamente 1,21 mil millones TAC por 950.000 USDT. De KiiChain, el atacante tomó alrededor de 148,3 millones KII, tras lo cual vendió 64,6 millones KII por aproximadamente 1,61 millones USDT.
Lo especialmente preocupante es que los desarrolladores conocían el error mucho antes de los ataques. La vulnerabilidad se informó a través de un programa de recompensas por errores el 25 de abril. El equipo intentó reproducir el problema en redes con otra configuración y erróneamente concluyó que las blockchains en producción con Cosmos EVM no corrían riesgo de perder fondos. La corrección se integró en la rama principal del repositorio el 15 de mayo, pero los desarrolladores no la llevaron de inmediato a las versiones estables, ya que el cambio requería una actualización coordinada del estado de la red.
A comienzos de agosto, nuevos informes ayudaron a Cosmos Labs a entender que el problema afectaba a todas las redes de Cosmos EVM independientemente de la configuración. El 19 de agosto el equipo lanzó las versiones v0.6.2 y v0.7.2 con la corrección; sin embargo, las notas de la versión mencionaban solo la presencia de cambios de seguridad sin describir la gravedad de la amenaza. Al día siguiente, el desarrollador de un proyecto externo, Push Chain, publicó un pull request con una descripción detallada de la vulnerabilidad, el método de explotación y la lista de versiones vulnerables. El primer ataque conocido contra MANTRA comenzó en menos de 12 horas.
Tras el incidente, Cosmos Labs contactó con aproximadamente 40 blockchains y ayudó a 13 redes potencialmente vulnerables a actualizarse, detenerse o aplicar otras medidas de mitigación. Para la rama 0.6.x se requiere una versión igual o superior a v0.6.2, y para 0.7.x igual o superior a v0.7.2. La empresa también prometió cambiar el proceso de evaluación de errores críticos y las reglas sobre lanzamientos encubiertos de correcciones, ya que la valoración inicial equivocada del riesgo y la aparición pública de instrucciones de explotación crearon una ventana demasiado conveniente para los atacantes.