Análisis profundo de vulnerabilidades en el compilador de Solidity
El compilador es uno de los componentes fundamentales de los sistemas informáticos modernos, y su función principal es convertir el código fuente de lenguajes de programación de alto nivel en código de instrucciones ejecutables a nivel de computadora. Aunque la mayoría de los desarrolladores y personal de seguridad suelen centrarse en la seguridad del código de aplicaciones, la seguridad del propio compilador a menudo se pasa por alto. De hecho, el compilador, como un programa informático, también puede tener vulnerabilidades de seguridad, las cuales en ciertos casos pueden representar graves riesgos de seguridad.
Por ejemplo, durante el proceso de análisis y ejecución del código JavaScript en el navegador, una vulnerabilidad en el motor de análisis de JavaScript podría permitir que un usuario sufra un ataque de ejecución remota de código al visitar una página web maliciosa, lo que finalmente podría llevar a que el atacante controle el navegador o incluso el sistema operativo de la víctima. Además, investigaciones indican que un bug en el compilador Clang C++ también podría desencadenar consecuencias graves como la ejecución remota de código.
El compilador de Solidity también presenta vulnerabilidades de seguridad. Según la alerta de seguridad publicada por el equipo de desarrollo de Solidity, existen riesgos de seguridad en varias versiones del compilador de Solidity. 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), que finalmente se sube a Ethereum a través de transacciones y es ejecutado por la EVM.
Es importante tener en cuenta que las vulnerabilidades del compilador de Solidity son diferentes de las vulnerabilidades de la EVM en sí. Las vulnerabilidades de la EVM se refieren a problemas de seguridad que surgen cuando la máquina virtual ejecuta instrucciones, lo que puede afectar toda la red de Ethereum. Por otro lado, las vulnerabilidades del compilador de Solidity se refieren a problemas que ocurren cuando el compilador convierte el código de Solidity en código de EVM, y no afectan directamente a la red de Ethereum en sí.
Las vulnerabilidades del compilador de Solidity pueden resultar en que el código EVM generado no sea coherente con las expectativas del desarrollador. Dado que los contratos inteligentes en Ethereum suelen involucrar los activos de criptomonedas de los usuarios, cualquier error causado por el compilador puede llevar a la pérdida de activos de los usuarios, con graves consecuencias. Los desarrolladores y los auditores de contratos suelen centrarse en la implementación lógica del contrato y en problemas de seguridad comunes, mientras que las vulnerabilidades del compilador son difíciles de detectar solo a través de auditorías de código fuente, requiriendo un análisis conjunto del versión específica del compilador y los patrones de código.
A continuación se presentan algunos ejemplos reales de vulnerabilidades en compiladores de Solidity:
SOL-2016-9 HighOrderByteCleanStorage
Esta vulnerabilidad existe en versiones anteriores del compilador de Solidity (>=0.1.6 <0.4.4). En ciertos casos, el valor de las variables de almacenamiento puede ser modificado accidentalmente, lo que lleva a que el valor de retorno de la función no coincida con lo esperado. Esta inconsistencia puede tener graves consecuencias en escenarios como la verificación de permisos o la contabilidad de activos.
SOL-2022-4 Efectos secundarios de memoria de InlineAssembly
La vulnerabilidad existe en los compiladores de las versiones 0.8.13 a 0.8.15. Debido a un problema con la estrategia de optimización del compilador, las modificaciones de memoria en ciertos códigos de ensamblado en línea podrían ser eliminadas incorrectamente, lo que provoca errores en el valor de retorno de la función.
La vulnerabilidad afecta a las versiones del compilador de 0.5.8 a 0.8.16. Al realizar la operación abi.encode en un array de tipo calldata, puede limpiar incorrectamente algunos datos, lo que lleva a la modificación de datos adyacentes y causa inconsistencias en los datos después de la codificación y decodificación.
Ante las vulnerabilidades del compilador Solidity, el equipo de seguridad de blockchain de Cobo propone las siguientes recomendaciones:
Para los desarrolladores:
Utiliza una versión más nueva del compilador Solidity
Mejorar los casos de prueba unitarios para aumentar la cobertura del código
Evite el uso de ensamblaje en línea, operaciones complejas de codificación y decodificación de ABI, y use con precaución las nuevas características y funciones experimentales.
Para el personal de seguridad:
Considerar los riesgos de seguridad que el compilador puede introducir durante la auditoría.
Se sugiere al equipo de desarrollo que actualice la versión del compilador a tiempo.
Introducir la verificación automática de la versión del compilador en el proceso de CI/CD
Evaluar el impacto real de seguridad de las vulnerabilidades del compilador según el proyecto específico.
Algunos recursos útiles:
Advertencia de seguridad del blog oficial de Solidity
Lista de errores del repositorio de Solidity en GitHub
Lista de errores del compilador de cada versión
Advertencia de vulnerabilidad en la página de código del contrato de Etherscan
Al comprender las características e impactos de las vulnerabilidades del compilador de Solidity, los desarrolladores y profesionales de la seguridad pueden evaluar de manera más integral los riesgos de seguridad de los contratos inteligentes y tomar medidas correspondientes para reducir las amenazas potenciales.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
16 me gusta
Recompensa
16
6
Compartir
Comentar
0/400
0xSoulless
· hace4h
Otra herramienta para tomar a la gente por tonta
Ver originalesResponder0
RumbleValidator
· 07-12 19:34
¿Este fallo puede provocar errores en la capa de consenso? El riesgo para los nodos de validación es alto.
Ver originalesResponder0
SocialFiQueen
· 07-12 19:29
Parece que los contratos inteligentes van a fallar~ jaja, ¡es demasiado emocionante!
Ver originalesResponder0
CryptoTherapist
· 07-12 19:27
solo otro caso del síndrome de ansiedad de los desarrolladores... respira durante el proceso de depuración familia
Ver originalesResponder0
StablecoinAnxiety
· 07-12 19:14
Los compiladores no son seguros, ¿quién se atreve a codificar?
Ver originalesResponder0
Blockwatcher9000
· 07-12 19:06
Desarrolladores, es tan difícil. Abrázate fuerte, mi btc se fue a Rug Pull.
Análisis de vulnerabilidades del compilador Solidity: riesgos ocultos que afectan la seguridad de los contratos inteligentes
Análisis profundo de vulnerabilidades en el compilador de Solidity
El compilador es uno de los componentes fundamentales de los sistemas informáticos modernos, y su función principal es convertir el código fuente de lenguajes de programación de alto nivel en código de instrucciones ejecutables a nivel de computadora. Aunque la mayoría de los desarrolladores y personal de seguridad suelen centrarse en la seguridad del código de aplicaciones, la seguridad del propio compilador a menudo se pasa por alto. De hecho, el compilador, como un programa informático, también puede tener vulnerabilidades de seguridad, las cuales en ciertos casos pueden representar graves riesgos de seguridad.
Por ejemplo, durante el proceso de análisis y ejecución del código JavaScript en el navegador, una vulnerabilidad en el motor de análisis de JavaScript podría permitir que un usuario sufra un ataque de ejecución remota de código al visitar una página web maliciosa, lo que finalmente podría llevar a que el atacante controle el navegador o incluso el sistema operativo de la víctima. Además, investigaciones indican que un bug en el compilador Clang C++ también podría desencadenar consecuencias graves como la ejecución remota de código.
El compilador de Solidity también presenta vulnerabilidades de seguridad. Según la alerta de seguridad publicada por el equipo de desarrollo de Solidity, existen riesgos de seguridad en varias versiones del compilador de Solidity. 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), que finalmente se sube a Ethereum a través de transacciones y es ejecutado por la EVM.
Es importante tener en cuenta que las vulnerabilidades del compilador de Solidity son diferentes de las vulnerabilidades de la EVM en sí. Las vulnerabilidades de la EVM se refieren a problemas de seguridad que surgen cuando la máquina virtual ejecuta instrucciones, lo que puede afectar toda la red de Ethereum. Por otro lado, las vulnerabilidades del compilador de Solidity se refieren a problemas que ocurren cuando el compilador convierte el código de Solidity en código de EVM, y no afectan directamente a la red de Ethereum en sí.
Las vulnerabilidades del compilador de Solidity pueden resultar en que el código EVM generado no sea coherente con las expectativas del desarrollador. Dado que los contratos inteligentes en Ethereum suelen involucrar los activos de criptomonedas de los usuarios, cualquier error causado por el compilador puede llevar a la pérdida de activos de los usuarios, con graves consecuencias. Los desarrolladores y los auditores de contratos suelen centrarse en la implementación lógica del contrato y en problemas de seguridad comunes, mientras que las vulnerabilidades del compilador son difíciles de detectar solo a través de auditorías de código fuente, requiriendo un análisis conjunto del versión específica del compilador y los patrones de código.
A continuación se presentan algunos ejemplos reales de vulnerabilidades en compiladores de Solidity:
Esta vulnerabilidad existe en versiones anteriores del compilador de Solidity (>=0.1.6 <0.4.4). En ciertos casos, el valor de las variables de almacenamiento puede ser modificado accidentalmente, lo que lleva a que el valor de retorno de la función no coincida con lo esperado. Esta inconsistencia puede tener graves consecuencias en escenarios como la verificación de permisos o la contabilidad de activos.
La vulnerabilidad existe en los compiladores de las versiones 0.8.13 a 0.8.15. Debido a un problema con la estrategia de optimización del compilador, las modificaciones de memoria en ciertos códigos de ensamblado en línea podrían ser eliminadas incorrectamente, lo que provoca errores en el valor de retorno de la función.
La vulnerabilidad afecta a las versiones del compilador de 0.5.8 a 0.8.16. Al realizar la operación abi.encode en un array de tipo calldata, puede limpiar incorrectamente algunos datos, lo que lleva a la modificación de datos adyacentes y causa inconsistencias en los datos después de la codificación y decodificación.
Ante las vulnerabilidades del compilador Solidity, el equipo de seguridad de blockchain de Cobo propone las siguientes recomendaciones:
Para los desarrolladores:
Para el personal de seguridad:
Algunos recursos útiles:
Al comprender las características e impactos de las vulnerabilidades del compilador de Solidity, los desarrolladores y profesionales de la seguridad pueden evaluar de manera más integral los riesgos de seguridad de los contratos inteligentes y tomar medidas correspondientes para reducir las amenazas potenciales.