Volver al blog

Asegurando el Ecosistema de Solana (7) — Confusión de Tipos

29 de abril de 2022
5 min de lectura

0. Revisión

1. Descripción General

En el artículo anterior, presentamos la implementación de un Multi-Sig general. En esta publicación, discutiremos otro problema de seguridad — la Confusión de Tipos.

2. Deserialización/Serialización

En Solana, los estados del programa se almacenan en cuentas. El problema de confusión de tipos surge durante la deserialización/serialización de las cuentas. La lógica del programa generalmente depende de las estructuras de datos. Sin embargo, el programa puede no verificar correctamente el tipo de las cuentas durante el proceso de deserialización/serialización. Esto puede ser aprovechado por atacantes, resultando en pérdidas inesperadas.

3. Revisión de Código (Confusión de Tipos)

A continuación, ilustramos el problema de confusión de tipos con un programa sencillo. Puede encontrar el código de prueba aquí.

En el programa de prueba, implementamos dos estructuras de datos: una es User y la otra es Metadata. Ambas registran la clave pública de una cuenta (cuenta diferente).

El programa tiene tres instrucciones diferentes. La instrucción InitializeUser está diseñada para crear la cuenta User y establecer una cuenta autorizada (es decir, authority). De manera similar, la instrucción InitializeMeta se invoca para crear la cuenta MetaData y establecer una cuenta normal (es decir, account). La instrucción Test demuestra que el atacante puede eludir la lógica de verificación del programa y llevar a cabo ataques con MetaData controlada.

Analicemos la instrucción Test(). El programa verifica que el propietario de la cuenta User pasada sea el propio programa (línea 86 - línea 89). Después de la deserialización (línea 92), el programa compara la clave pública de la cuenta authority pasada con la clave pública almacenada en la cuenta User. Si no son iguales, el programa revierte (línea 93 - línea 96). La última verificación es asegurarse de que la cuenta de autoridad haya firmado la transacción. Sin embargo, si un atacante pasa la cuenta Metadata controlada, todas las verificaciones aún pueden ser eludidas. La razón es que el programa no verifica el tipo de las cuentas. Recibe un arreglo de bytes y lo deserializa directamente en diferentes tipos de estructuras definidas en el programa.

Desplegamos el programa de prueba para realizar más pruebas, y puede encontrarse en este enlace.

3.1 Enviar Transacción

Después de desplegar el programa, escribimos el script para invocar las tres instrucciones proporcionadas en el programa en orden.

Primero invocamos InitializeUser e InitializeMeta. Tenga en cuenta que establecemos nuestra propia clave pública como la cuenta account almacenada en la cuenta Metadata.

En la función test(), pasamos la cuenta Metadata como la cuenta User y nuestra propia cuenta como authority_info (línea 347 - línea 348). El programa deserializó el Metadata con la estructura User y todas las verificaciones pueden ser eludidas.

Enviamos la transacción y puede encontrarse aquí. El programa devolvió éxito, lo que significa que logramos pasar la verificación con el tipo de cuenta no verificado.

4. Resumen

En este artículo, presentamos el problema de confusión de tipos en Solana. Existen muchas formas de evitar este problema. Por ejemplo, podemos agregar un atributo para registrar el tipo de cuenta en la estructura, y el programa siempre debe verificar el atributo de tipo antes de leer/escribir desde/hacia la cuenta pasada. Continúe siguiéndonos y compartiremos más en las próximas publicaciones.

Lea otros artículos de esta serie:


Acerca de BlockSec

BlockSec es una empresa pionera en seguridad blockchain fundada en 2021 por un grupo de distinguidos expertos en seguridad a nivel mundial. La empresa está comprometida con mejorar la seguridad y la usabilidad del emergente mundo Web3 con el fin de facilitar su adopción masiva. Con este objetivo, BlockSec ofrece servicios de auditoría de seguridad de contratos inteligentes y cadenas EVM, la plataforma Phalcon para el desarrollo de seguridad y el bloqueo proactivo de amenazas, la plataforma MetaSleuth para el rastreo e investigación de fondos, y la extensión MetaSuites para que los desarrolladores de web3 naveguen de manera eficiente en el mundo cripto.

Hasta la fecha, la empresa ha prestado servicios a más de 300 distinguidos clientes como MetaMask, Uniswap Foundation, Compound, Forta y PancakeSwap, y ha recibido decenas de millones de dólares en dos rondas de financiamiento de destacados inversores, entre ellos Matrix Partners, Vitalbridge Capital y Fenbushi Capital.

Sitio web oficial: https://blocksec.com/

Cuenta oficial de Twitter: https://twitter.com/BlockSecTeam

Apúntate para recibir las novedades
Cómo la solución de seguridad de pagos de BlockSec ayuda a las instituciones a mantenerse seguras en la era de la IA
Security Services

Cómo la solución de seguridad de pagos de BlockSec ayuda a las instituciones a mantenerse seguras en la era de la IA

Descubra cómo BlockSec ayuda a las instituciones de pago a proteger los fondos y los datos, y a reforzar su resiliencia mediante evaluaciones de seguridad, pruebas y monitoreo continuo.

Pérdidas de ~5,57 millones USD: exploits de X100 Freezer y NEM | Resumen semanal de BlockSec
Security Insights

Pérdidas de ~5,57 millones USD: exploits de X100 Freezer y NEM | Resumen semanal de BlockSec

Este informe semanal cubre dos incidentes de seguridad ocurridos en Ethereum y BNB Chain durante el período 19/10/2026–25/10/2026. Examina una toma de control de la gobernanza de X100 Freezer financiada mediante un préstamo flash y un fallo en la liquidación de impuestos que afectó a un pool de liquidez de un token NEM en BNB Chain. Las pérdidas estimadas dentro del alcance del informe suman aproximadamente 5,57 millones USD: ~4,75 millones USD de la transacción representativa de X100 y ~820 mil USD del incidente del pool de NEM. El total excluye las extracciones posteriores de X100 reportadas por separado.

Pérdidas de aproximadamente 3,87 millones USD: hackeos de Autheo Network y UNCX | Resumen semanal de BlockSec
Security Insights

Pérdidas de aproximadamente 3,87 millones USD: hackeos de Autheo Network y UNCX | Resumen semanal de BlockSec

Este informe semanal cubre 3 incidentes de seguridad correspondientes al período 12/10/2026–18/10/2026, con pérdidas totales estimadas en aproximadamente 3,87 millones USD. Autheo Network sufrió una vulneración de clave privada con pérdidas de aproximadamente 1,76 millones USD; Qubic Wallet perdió aproximadamente 1,30 millones USD debido a la generación de una semilla débil; y los contratos Smart Token Vesting V2 de UNCX Network sufrieron un error contable con pérdidas de aproximadamente 807 mil USD en Ethereum, BNB Chain, Base y Robinhood Chain. El análisis destacado de UNCX explica cómo un cálculo agregado de participaciones defectuoso mezcló tramos de adquisición de derechos creados con distintas proporciones entre tokens y participaciones, lo que permitió retiros excesivos de pools compartidos.