Análisis de vulnerabilidades del compilador Solidity y estrategias de protección de seguridad

robot
Generación de resúmenes en curso

Análisis de vulnerabilidades del compilador Solidity y estrategias de respuesta

El compilador es una de las partes fundamentales de los sistemas informáticos modernos. Es un programa que convierte lenguajes de programación de alto nivel en instrucciones ejecutables por la computadora. Aunque los desarrolladores y los expertos en seguridad suelen centrarse en la seguridad del código de las aplicaciones, la seguridad del propio compilador también es igualmente importante.

Los compiladores, como programas informáticos, también pueden tener vulnerabilidades de seguridad, lo que en ciertos casos puede conllevar riesgos de seguridad graves. Por ejemplo, al analizar y ejecutar código JavaScript, los navegadores pueden ser atacados debido a vulnerabilidades en el motor de JavaScript, lo que puede resultar en que los usuarios sufran ataques al acceder a páginas web maliciosas, y en última instancia, permitir que los atacantes controlen el navegador de la víctima o incluso el sistema operativo.

El compilador de Solidity no es una excepción. Según las advertencias de seguridad del equipo de desarrollo de Solidity, hay vulnerabilidades de seguridad en varias versiones del compilador de Solidity.

Análisis de vulnerabilidades del compilador Solidity y medidas de respuesta

Vulnerabilidad del compilador de Solidity

El compilador de Solidity tiene la función de convertir el código de los contratos inteligentes en código de instrucciones de la Máquina Virtual de Ethereum (EVM). Estas instrucciones EVM se empaquetan y se suben a Ethereum a través de transacciones, y finalmente son ejecutadas por la EVM.

Es necesario distinguir entre las vulnerabilidades del compilador de Solidity y las vulnerabilidades de la EVM en sí. Las vulnerabilidades de la EVM se refieren a fallos de seguridad que ocurren al ejecutar instrucciones en la máquina virtual, y pueden afectar a toda la red de Ethereum. Por otro lado, las vulnerabilidades del compilador de Solidity se refieren a problemas al convertir Solidity en código EVM.

Las vulnerabilidades del compilador de Solidity no afectarán directamente a la red de Ethereum, pero pueden provocar que el código EVM generado no coincida con las expectativas del desarrollador. Dado que los contratos inteligentes generalmente involucran activos de criptomonedas, cualquier error causado por el compilador puede resultar en la pérdida de activos de los usuarios, con graves consecuencias.

Es difícil detectar vulnerabilidades del compilador solo mediante la auditoría del código fuente del contrato. Es necesario combinar el análisis con una versión específica del compilador y patrones de código para determinar si el contrato se ve afectado por vulnerabilidades del compilador.

Ejemplo de vulnerabilidad del compilador Solidity

A continuación se presentan varios ejemplos reales de vulnerabilidades en compiladores de Solidity, que muestran las formas específicas, las causas y los peligros.

SOL-2016-9 HighOrderByteCleanStorage

La vulnerabilidad existe en versiones anteriores del compilador de Solidity (>=0.1.6 <0.4.4).

Considera el siguiente código:

solidez contrato C { uint32 a = 0x12345678; uint32 b = 0; función run() devuelve (uint256) { a = a + 1; return b; } }

La variable de almacenamiento b no ha sido modificada, la función run() debería devolver el valor predeterminado 0. Sin embargo, en versiones de compilador con vulnerabilidades, run() devolverá 1.

Esta situación inesperada, si la variable b se utiliza para la verificación de permisos o la contabilidad de activos, podría tener graves consecuencias.

La razón de este fenómeno es que EVM utiliza elementos de pila de 32 bytes y espacios de almacenamiento, mientras que Solidity admite tipos de datos más pequeños como uint32. El compilador necesita limpiar los bits más altos al manejar estos tipos, pero no lo maneja correctamente en caso de desbordamiento entero, lo que hace que el bit más alto 1 se escriba en el almacenamiento, sobrescribiendo la variable b.

SOL-2022-4 InlineAssemblyMemorySideEffects

La vulnerabilidad está presente en los compiladores de la versión >=0.8.13 <0.8.15.

Considera el siguiente código:

solidez contrato C { function f() public pure returns (uint) { ensamblaje { mstore(0, 0x42) } uint x; ensamblaje { x := mload(0) } return x; } }

Esta vulnerabilidad se origina en la optimización de compilación. El compilador intenta eliminar operaciones de escritura en memoria que parecen redundantes, pero cruza incorrectamente los bloques de ensamblado para analizarlos. En la versión vulnerable, la función f() devolverá 0, en lugar del correcto 0x42.

SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup

La vulnerabilidad afecta a las versiones del compilador >= 0.5.8 < 0.8.16.

Considera el siguiente código:

solidez contrato C { función f(string[1] calldata a) externo puro devuelve (string memoria) { return abi.decode(abi.encode(a), (string[1]))[0]; } }

En condiciones normales, este código debería devolver el valor de la variable a "aaaa". Pero en la versión con vulnerabilidades, devolverá una cadena vacía "".

Esto se debe a que Solidity, al realizar la operación abi.encode en un array de tipo calldata, eliminó erróneamente algunos datos, lo que provocó la modificación de datos adyacentes y causó una inconsistencia en los datos después de la codificación y decodificación.

Es importante tener en cuenta que Solidity ejecuta implícitamente abi.encode al realizar llamadas externas y emitir eventos, por lo que el alcance de estas vulnerabilidades puede ser más amplio de lo que se esperaba.

Análisis de vulnerabilidades del compilador Solidity y medidas de respuesta

Sugerencias de seguridad

Basado en el análisis del modelo de amenaza de los vulnerabilidades del compilador de Solidity y la revisión de vulnerabilidades históricas, se presentan las siguientes recomendaciones para desarrolladores y personal de seguridad:

para los desarrolladores:

  1. Usa una versión más reciente del compilador de Solidity. Las versiones nuevas suelen corregir problemas de seguridad conocidos.

  2. Mejorar las pruebas unitarias. La mayoría de los errores a nivel de compilador pueden causar que los resultados de ejecución del código no coincidan con las expectativas; al aumentar la cobertura del código, se pueden detectar este tipo de problemas en la fase de pruebas.

  3. Evitar el uso de ensamblador en línea, operaciones de codificación/decodificación ABI complejas, etc. La mayoría de las vulnerabilidades históricas están relacionadas con estas características complejas.

para el personal de seguridad:

  1. No subestime los riesgos de seguridad que el compilador puede introducir durante la auditoría. El elemento de verificación relacionado con la Clasificación de Debilidades de Smart Contract(SWC) es SWC-102.

  2. En el proceso interno de SDL, instar al equipo de desarrollo a actualizar la versión del compilador de Solidity, considerar la introducción de una verificación automática en CI/CD.

  3. No hay que preocuparse demasiado por las vulnerabilidades del compilador. La mayoría de las vulnerabilidades solo se activan en patrones de código específicos, y es necesario evaluar el impacto real según el caso concreto.

Recursos útiles:

  • Alerta de seguridad publicada por el equipo de Solidity:
  • Lista de errores oficial de Solidity:
  • Lista de errores del compilador de cada versión:
  • El ícono de advertencia en la esquina superior derecha de la página del código del contrato de Etherscan puede indicar vulnerabilidades de seguridad en la versión actual del compilador.

Resumen

Este artículo introduce el concepto de vulnerabilidades en el compilador de Solidity, analiza los riesgos de seguridad que pueden surgir en el desarrollo real de Ethereum y proporciona consejos prácticos de seguridad para desarrolladores y personal de seguridad. Al comprender las características e impactos de las vulnerabilidades del compilador, se puede garantizar mejor la seguridad de los contratos inteligentes.

Análisis de vulnerabilidades del compilador Solidity y medidas de respuesta

ETH0.61%
SOL-1.28%
Ver originales
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
  • Recompensa
  • 3
  • Compartir
Comentar
0/400
DataBartendervip
· hace15h
La seguridad no tiene fin, los parches temporales no son suficientes.
Ver originalesResponder0
Ser_This_Is_A_Casinovip
· hace15h
Las vulnerabilidades son la razón por la que la billetera se escapa.
Ver originalesResponder0
Anon4461vip
· hace15h
¿Quién se atreve a tocar este código?
Ver originalesResponder0
Opere con criptomonedas en cualquier momento y lugar
qrCode
Escanee para descargar la aplicación Gate
Comunidad
Español
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)