Análisis de vulnerabilidades del compilador Solidity y estrategias de respuesta
El compilador, como uno de los componentes básicos de los sistemas informáticos modernos, tiene la función de convertir el código fuente de lenguajes de programación de alto nivel en instrucciones que la computadora puede ejecutar. Sin embargo, el propio compilador también puede tener vulnerabilidades de seguridad, lo que puede conllevar graves riesgos de seguridad en ciertas circunstancias.
Tomando el campo de la blockchain como ejemplo, la función del compilador de Solidity es convertir el código de los contratos inteligentes en código de instrucciones para la Máquina Virtual de Ethereum (EVM). A diferencia de las vulnerabilidades de la propia EVM, las vulnerabilidades del compilador de Solidity se manifiestan principalmente cuando hay problemas en la conversión de Solidity a código EVM, lo que puede llevar a que el código EVM generado no coincida con las expectativas del desarrollador. Esta inconsistencia puede tener un impacto grave en los contratos inteligentes que involucran activos de criptomonedas.
Veamos algunos casos reales para entender específicamente las vulnerabilidades del compilador de Solidity:
SOL-2016-9 AlmacenamientoLimpioDeByteDeOrdenAlto
Esta vulnerabilidad existe en versiones anteriores del compilador Solidity entre 0.1.6 y 0.4.4. En ciertos casos, las variables de almacenamiento pueden ser modificadas accidentalmente, lo que lleva a que los valores de retorno de las funciones no coincidan con lo esperado. Este problema es difícil de detectar mediante una simple revisión de código, pero si involucra la verificación de permisos o la contabilidad de activos, las consecuencias pueden ser muy graves.
La vulnerabilidad afecta a los compiladores de las versiones 0.8.13 a 0.8.15. Debido a un manejo incorrecto del bloque de assembly durante el proceso de optimización de compilación, algunas operaciones de escritura en memoria pueden ser eliminadas incorrectamente, lo que resulta en valores de retorno de función no esperados.
Esta vulnerabilidad existe en los compiladores de las versiones de 0.5.8 a 0.8.16. Al realizar la operación abi.encode en un array de tipo calldata, puede que se eliminen erróneamente ciertos datos, lo que provoca que se modifiquen datos adyacentes, resultando en una inconsistencia en los datos después de la codificación y decodificación.
Basado en el análisis de las vulnerabilidades del compilador Solidity, proponemos las siguientes recomendaciones para desarrolladores y personal de seguridad:
Para desarrolladores:
Usa una versión más reciente del compilador de Solidity
Mejorar los casos de prueba de unidad para aumentar la cobertura del código
Evitar el uso de ensamblaje en línea, operaciones complejas de codificación y decodificación de ABI, etc.
Usa con precaución las nuevas características del lenguaje y las funciones experimentales
Para el personal de seguridad:
Considerar los riesgos de seguridad que el compilador puede introducir durante la auditoría.
Instar a actualizar la versión del compilador en el proceso de desarrollo
Introducir la verificación automática de la versión del compilador en el proceso de CI/CD
Evaluar el impacto real en la seguridad de las vulnerabilidades del compilador según el proyecto específico.
Algunos recursos útiles:
Alerta de seguridad publicada por el equipo de Solidity
Lista de errores del repositorio oficial de Solidity
Lista de errores del compilador de cada versión
Consejos de seguridad en la página de código del contrato de Etherscan
En general, aunque las vulnerabilidades del compilador de Solidity no son comunes, su impacto potencial no debe ser ignorado. Los desarrolladores y el personal de seguridad deben mantenerse alerta y tomar las medidas adecuadas para reducir el riesgo.
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.
18 me gusta
Recompensa
18
5
Republicar
Compartir
Comentar
0/400
SchrodingersFOMO
· hace10h
Otro día siendo engañado por el compilador
Ver originalesResponder0
PumpDetector
· 08-10 06:17
la misma historia de siempre... he estado viendo problemas de compilador desde '13, los días de mtgox eran más salvajes, para ser honesto
Ver originalesResponder0
AirdropHuntress
· 08-10 06:13
Los detalles de la auditoría de código son inofensivos, la billetera del capitalista es el verdadero problema.
Ver originalesResponder0
TokenEconomist
· 08-10 06:06
en realidad, todo este problema de EVM vs compilador de solidity es paralelo al famoso error del año 2000... cosas fascinantes, para ser honesto
Ver originalesResponder0
MidnightTrader
· 08-10 05:59
Siento que el compilador ha fallado, el riesgo del proyecto es muy alto.
Vulnerabilidad del compilador de Solidity: Riesgos potenciales y estrategias de mitigación
Análisis de vulnerabilidades del compilador Solidity y estrategias de respuesta
El compilador, como uno de los componentes básicos de los sistemas informáticos modernos, tiene la función de convertir el código fuente de lenguajes de programación de alto nivel en instrucciones que la computadora puede ejecutar. Sin embargo, el propio compilador también puede tener vulnerabilidades de seguridad, lo que puede conllevar graves riesgos de seguridad en ciertas circunstancias.
Tomando el campo de la blockchain como ejemplo, la función del compilador de Solidity es convertir el código de los contratos inteligentes en código de instrucciones para la Máquina Virtual de Ethereum (EVM). A diferencia de las vulnerabilidades de la propia EVM, las vulnerabilidades del compilador de Solidity se manifiestan principalmente cuando hay problemas en la conversión de Solidity a código EVM, lo que puede llevar a que el código EVM generado no coincida con las expectativas del desarrollador. Esta inconsistencia puede tener un impacto grave en los contratos inteligentes que involucran activos de criptomonedas.
Veamos algunos casos reales para entender específicamente las vulnerabilidades del compilador de Solidity:
Esta vulnerabilidad existe en versiones anteriores del compilador Solidity entre 0.1.6 y 0.4.4. En ciertos casos, las variables de almacenamiento pueden ser modificadas accidentalmente, lo que lleva a que los valores de retorno de las funciones no coincidan con lo esperado. Este problema es difícil de detectar mediante una simple revisión de código, pero si involucra la verificación de permisos o la contabilidad de activos, las consecuencias pueden ser muy graves.
La vulnerabilidad afecta a los compiladores de las versiones 0.8.13 a 0.8.15. Debido a un manejo incorrecto del bloque de assembly durante el proceso de optimización de compilación, algunas operaciones de escritura en memoria pueden ser eliminadas incorrectamente, lo que resulta en valores de retorno de función no esperados.
Esta vulnerabilidad existe en los compiladores de las versiones de 0.5.8 a 0.8.16. Al realizar la operación abi.encode en un array de tipo calldata, puede que se eliminen erróneamente ciertos datos, lo que provoca que se modifiquen datos adyacentes, resultando en una inconsistencia en los datos después de la codificación y decodificación.
Basado en el análisis de las vulnerabilidades del compilador Solidity, proponemos las siguientes recomendaciones para desarrolladores y personal de seguridad:
Para desarrolladores:
Para el personal de seguridad:
Algunos recursos útiles:
En general, aunque las vulnerabilidades del compilador de Solidity no son comunes, su impacto potencial no debe ser ignorado. Los desarrolladores y el personal de seguridad deben mantenerse alerta y tomar las medidas adecuadas para reducir el riesgo.