Análisis de vulnerabilidades del compilador Solidity y estrategias de respuesta
El compilador es una parte importante de los sistemas informáticos modernos, y su función es convertir el código fuente de lenguajes de programación de alto nivel en código de instrucciones ejecutables por la computadora. En comparación con el código de la aplicación, la seguridad del compilador en sí misma a menudo se pasa por alto. Sin embargo, las vulnerabilidades del compilador pueden conllevar riesgos de seguridad graves en ciertas circunstancias.
El principal objetivo del compilador de Solidity es convertir el código del contrato inteligente en instrucciones de la Máquina Virtual de Ethereum (EVM). A diferencia de las vulnerabilidades en la propia EVM, las vulnerabilidades del compilador de Solidity afectan principalmente a los desarrolladores de contratos inteligentes, sin poner en riesgo directamente la seguridad de la red de Ethereum.
Las vulnerabilidades del compilador pueden llevar a que el código EVM generado no coincida con las expectativas del desarrollador. Dado que los contratos inteligentes suelen involucrar activos de criptomonedas, cualquier error causado por el compilador puede resultar en pérdidas de activos para los usuarios. Es difícil detectar este tipo de problemas únicamente a través de la auditoría del código del contrato, se requiere un análisis que combine versiones específicas del compilador y patrones de código.
Casos de vulnerabilidad en el compilador Solidity
SOL-2016-9 HighOrderByteCleanStorage
La vulnerabilidad existe en versiones tempranas del compilador Solidity (>=0.1.6 <0.4.4). En ciertos casos, las variables de almacenamiento pueden ser modificadas accidentalmente, lo que provoca que los valores de retorno de la función no coincidan con lo esperado. Esta inconsistencia puede tener graves consecuencias en situaciones que implican verificación de permisos o contabilidad de activos.
La causa de la vulnerabilidad es que el compilador no limpia correctamente los datos de alto orden al manejar tipos de datos de menos de 32 bytes, lo que provoca que, al producirse un desbordamiento de enteros, los datos de alto orden se escriban incorrectamente en las variables adyacentes.
La vulnerabilidad afecta a compiladores de versiones >=0.8.13 y <0.8.15. El problema proviene del manejo incorrecto de las operaciones de memoria durante el proceso de optimización del compilador. En ciertos casos, el compilador elimina incorrectamente las instrucciones de escritura en memoria que parecen redundantes, lo que resulta en valores de retorno anómalos de las funciones.
La vulnerabilidad existe en los compiladores de versiones >= 0.5.8 < 0.8.16. Al realizar la operación abi.encode en un array de tipo calldata, el compilador limpiaba incorrectamente algunos datos, lo que provocaba la modificación de datos adyacentes y resultaba en inconsistencias en los datos después de la codificación y decodificación.
Es importante tener en cuenta que las llamadas externas y los eventos emitidos realizan implícitamente abi.encode, por lo que el alcance de esta vulnerabilidad puede ser más amplio de lo que se pensaba.
Sugerencias de seguridad
En relación con las vulnerabilidades del compilador de Solidity, el equipo de seguridad blockchain de Cobo ha propuesto las siguientes recomendaciones:
Para desarrolladores:
Utiliza una versión más reciente del compilador Solidity
Mejorar los casos de prueba unitarios para aumentar la cobertura del código
Evite el uso de ensamblado en línea, codificación y decodificación ABI complejas, y use con precaución las nuevas características y funciones experimentales.
Para el personal de seguridad:
Prestar atención a los riesgos de seguridad que pueden introducir los compiladores durante la auditoría.
Impulsar la actualización de la versión del compilador en el proceso de desarrollo, considerando la introducción de una verificación automática de versiones en CI/CD.
Evaluar el impacto real en la seguridad de las vulnerabilidades del compilador según el proyecto específico.
Recursos prácticos:
Blog oficial de alertas de seguridad de Solidity
Lista de errores en el repositorio de Solidity en GitHub
Lista de errores del compilador de las diferentes versiones
Mensaje de vulnerabilidad del compilador en la página del código del contrato de Etherscan
En resumen, los desarrolladores y el personal de seguridad deben prestar atención a los riesgos que pueden surgir de las vulnerabilidades del compilador de Solidity y tomar medidas adecuadas para reducir los peligros de seguridad. También es importante evaluar objetivamente el impacto específico para evitar el pánico excesivo.
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.
13 me gusta
Recompensa
13
4
Compartir
Comentar
0/400
AirdropChaser
· 08-02 03:03
Ha surgido otra razón para tomar a la gente por tonta.
Ver originalesResponder0
BearMarketBuilder
· 08-02 02:55
Ay, todo el día desarrollando, solo temo esta cosa.
Ver originalesResponder0
TeaTimeTrader
· 08-02 02:53
¿La literatura de culpar al compilador está bien?
Ver originalesResponder0
0xOverleveraged
· 08-02 02:42
Los compiladores de contratos son poco fiables, ¿para qué jugar con los contratos?
Análisis de vulnerabilidades del compilador Solidity: riesgos potenciales que los desarrolladores no deben ignorar
Análisis de vulnerabilidades del compilador Solidity y estrategias de respuesta
El compilador es una parte importante de los sistemas informáticos modernos, y su función es convertir el código fuente de lenguajes de programación de alto nivel en código de instrucciones ejecutables por la computadora. En comparación con el código de la aplicación, la seguridad del compilador en sí misma a menudo se pasa por alto. Sin embargo, las vulnerabilidades del compilador pueden conllevar riesgos de seguridad graves en ciertas circunstancias.
El principal objetivo del compilador de Solidity es convertir el código del contrato inteligente en instrucciones de la Máquina Virtual de Ethereum (EVM). A diferencia de las vulnerabilidades en la propia EVM, las vulnerabilidades del compilador de Solidity afectan principalmente a los desarrolladores de contratos inteligentes, sin poner en riesgo directamente la seguridad de la red de Ethereum.
Las vulnerabilidades del compilador pueden llevar a que el código EVM generado no coincida con las expectativas del desarrollador. Dado que los contratos inteligentes suelen involucrar activos de criptomonedas, cualquier error causado por el compilador puede resultar en pérdidas de activos para los usuarios. Es difícil detectar este tipo de problemas únicamente a través de la auditoría del código del contrato, se requiere un análisis que combine versiones específicas del compilador y patrones de código.
Casos de vulnerabilidad en el compilador Solidity
SOL-2016-9 HighOrderByteCleanStorage
La vulnerabilidad existe en versiones tempranas del compilador Solidity (>=0.1.6 <0.4.4). En ciertos casos, las variables de almacenamiento pueden ser modificadas accidentalmente, lo que provoca que los valores de retorno de la función no coincidan con lo esperado. Esta inconsistencia puede tener graves consecuencias en situaciones que implican verificación de permisos o contabilidad de activos.
La causa de la vulnerabilidad es que el compilador no limpia correctamente los datos de alto orden al manejar tipos de datos de menos de 32 bytes, lo que provoca que, al producirse un desbordamiento de enteros, los datos de alto orden se escriban incorrectamente en las variables adyacentes.
SOL-2022-4 EfectosSecundariosDeMemoriaEnEnsambladorEnLinea
La vulnerabilidad afecta a compiladores de versiones >=0.8.13 y <0.8.15. El problema proviene del manejo incorrecto de las operaciones de memoria durante el proceso de optimización del compilador. En ciertos casos, el compilador elimina incorrectamente las instrucciones de escritura en memoria que parecen redundantes, lo que resulta en valores de retorno anómalos de las funciones.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup
La vulnerabilidad existe en los compiladores de versiones >= 0.5.8 < 0.8.16. Al realizar la operación abi.encode en un array de tipo calldata, el compilador limpiaba incorrectamente algunos datos, lo que provocaba la modificación de datos adyacentes y resultaba en inconsistencias en los datos después de la codificación y decodificación.
Es importante tener en cuenta que las llamadas externas y los eventos emitidos realizan implícitamente abi.encode, por lo que el alcance de esta vulnerabilidad puede ser más amplio de lo que se pensaba.
Sugerencias de seguridad
En relación con las vulnerabilidades del compilador de Solidity, el equipo de seguridad blockchain de Cobo ha propuesto las siguientes recomendaciones:
Para desarrolladores:
Para el personal de seguridad:
Recursos prácticos:
En resumen, los desarrolladores y el personal de seguridad deben prestar atención a los riesgos que pueden surgir de las vulnerabilidades del compilador de Solidity y tomar medidas adecuadas para reducir los peligros de seguridad. También es importante evaluar objetivamente el impacto específico para evitar el pánico excesivo.