Volver al blog

Nuevo Error de Desbordamiento de Enteros Descubierto en Solana rBPF

Code Auditing
30 de diciembre de 2021
3 min de lectura

Recientemente, nuestro sistema de detección de vulnerabilidades descubrió un problema crítico en el rBPF de Solana (es decir, la máquina virtual donde se ejecutan todas las dApps de Solana: https://github.com/solana-labs/rbpf). Tras una investigación exhaustiva, descubrimos que se trata de un error de desbordamiento de enteros que puede explotarse para colapsar toda la red de Solana. Reportamos el error al equipo de seguridad de Solana, y el equipo actuó de inmediato para confirmar y corregir el fallo. Al momento de escribir esto, casi todos los nodos validadores recibieron el parche y se actualizaron a la última versión, lo que significa que es seguro hacer una divulgación pública.

eBPF y rBPF

Extended Berkeley Packet Filter (eBPF[1]) fue desarrollado inicialmente para el filtrado de paquetes en el kernel. Debido a la seguridad, eficiencia y escalabilidad de eBPF, actualmente se utiliza en diversas áreas como redes, rastreo, perfilado, etc[2]. Considerando la amplia capacidad de eBPF, Solana lo eligió también como motor de ejecución para los contratos inteligentes. Para desarrollar dApps en Solana, los desarrolladores deben crear sus contratos inteligentes en Rust, que serán compilados en bytecode eBPF.

Para alojar las dApps de Solana, se requiere una máquina virtual precisa para eBPF. En este caso, Solana utiliza rBPF, que es una máquina virtual para eBPF escrita en Rust. Sin embargo, se desconoce si la máquina virtual propuesta (es decir, rBPF) es robusta, segura y precisa. Si existen problemas de seguridad dentro de rBPF, todos los validadores que contengan rBPF pueden verse afectados, ocasionando grandes pérdidas (p. ej., ataques DDoS) para toda la red de Solana.

La causa raíz del error

Hemos desarrollado una herramienta para localizar errores en rBPF. Esta herramienta aún se encuentra en desarrollo activo. Durante este proceso, se identificó un problema grave en rBPF (versión 0.2.16) que puede derribar toda la red.

Específicamente, la función "load" en el archivo "elf.rs" se utiliza para analizar y verificar el archivo ELF (el contrato inteligente). Primero, la función "load" lee la estructura ELF e invoca la función "relocate" para configurar el desplazamiento del destinatario. Sin embargo, en la función "relocate", el atributo "sym.st_value" se recupera directamente del archivo ELF. Si el valor "st_value" es suficientemente grande, se puede desencadenar un desbordamiento de enteros al calcular "addr", que es la suma de "sym.st_value" y "refd_pa".

En este caso, un atacante puede crear un archivo ELF malicioso como contrato inteligente, lo que puede provocar el desbordamiento de enteros. Después de eso, cada validador ejecutaría el archivo ELF objetivo y rBPF entraría en pánico con "add with overflow".

En ese momento, rBPF quedará bloqueado y las transacciones entrantes no se ejecutarán, lo que resultará en un ataque DoS. Podemos observar que el nodo queda atascado en "Finalizing transaction", como se muestra a continuación, debido al desbordamiento de enteros al cargar el archivo ELF.

Este problema fue introducido en https://github.com/solana-labs/rbpf/pull/200, lo que significa que rBPF es vulnerable desde la versión 0.2.14. Identificamos el problema y lo reportamos al equipo de seguridad de Solana el 6 de diciembre de 2021. Solana solucionó el problema en pocas horas mediante el mecanismo de matemática segura tras nuestro reporte. La corrección está en https://github.com/solana-labs/rbpf/pull/236. Al momento de escribir esto (2021/12/30), más del 86% de los validadores se han actualizado a la versión más reciente.

[1] https://en.wikipedia.org/wiki/Berkeley_Packet_Filter

[2] https://ebpf.io/

Cronología

  • 2021/12/06: el problema fue reportado al equipo de seguridad de Solana
  • 2021/12/06: la vulnerabilidad fue corregida.
  • 2021/12/30: la información sobre esta vulnerabilidad fue publicada
  • 2022/01/28: se asignó el CVE-2021–46102
Apúntate para recibir las novedades
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.

Pérdidas de ~542.000 dólares: explotación de MakerDaoBot | Resumen semanal de BlockSec
Security Insights

Pérdidas de ~542.000 dólares: explotación de MakerDaoBot | Resumen semanal de BlockSec

Ethereum (05–11/10/2026): 1 incidente; pérdida estimada de $542 mil. MakerDaoBot, sin control de acceso, dio a un adaptador malicioso acceso a sus saldos MakerDAO. Este cerró 4 subastas ETH-A y convirtió 200 ETH-A en WETH; el atacante los cambió por 200 ETH y se los envió.

El mejor auditor de seguridad para Web3

Valida el diseño, el código y la lógica de negocio antes del lanzamiento, siguiendo los estándares de seguridad más exigentes del sector.

Auditoría de BlockSec
Nuevo Error de Desbordamiento de Enteros Descubierto en Solana rBPF