Análisis de vulnerabilidades del compilador Solidity y estrategias de respuesta
El compilador es uno de los componentes básicos de los sistemas informáticos modernos, y su función principal es convertir el código fuente de un lenguaje de programación de alto nivel en instrucciones de código ejecutables por la computadora. En comparación con la seguridad del código de aplicación, los problemas de seguridad del propio compilador a menudo son fáciles de pasar por alto. Sin embargo, las vulnerabilidades del compilador también pueden representar graves riesgos de seguridad en escenarios específicos.
El propósito 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 EVM en sí, las vulnerabilidades del compilador de Solidity no afectan directamente a la red de Ethereum, pero pueden resultar en que el código EVM generado no coincida con las expectativas del desarrollador, afectando así el funcionamiento normal del contrato inteligente y, potencialmente, causando pérdidas de activos para los usuarios.
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 Solidity ( >=0.1.6 <0.4.4). Debido a que el compilador no limpia correctamente los bits altos al manejar el desbordamiento de enteros, esto puede llevar a que el valor de variables adyacentes se modifique accidentalmente.
SOL-2022-4 Efectos Secundarios de Memoria en InlineAssembly
La vulnerabilidad existe en las versiones del compilador de 0.8.13 a 0.8.15. Debido a un problema con la estrategia de optimización del compilador, podría eliminar incorrectamente las instrucciones de escritura de memoria en el ensamblador en línea, lo que provoca que el comportamiento del programa no coincida con lo esperado.
Esta vulnerabilidad afecta a las versiones del compilador de 0.5.8 a 0.8.16. Al realizar operaciones abi.encode en un array de tipo calldata, puede modificar incorrectamente los datos adyacentes, lo que provoca inconsistencias en los datos codificados y decodificados.
En relación con las vulnerabilidades del compilador de Solidity, se recomienda a los desarrolladores:
Utilizar una versión más reciente del compilador de Solidity
Mejorar los casos de prueba unitarios para aumentar la cobertura del código
Intenta evitar el uso de características de lenguaje complejas, como el ensamblado en línea, la codificación y decodificación ABI de matrices multidimensionales, etc.
Para los auditores de seguridad, se recomienda:
Considerar los riesgos de seguridad que el compilador puede introducir durante el proceso de auditoría.
Instar al equipo de desarrollo a actualizar la versión del compilador en el proceso de SDL
Introducir la verificación automática de la versión del compilador en CI/CD
Es importante destacar que la mayoría de las vulnerabilidades de los compiladores solo se activan en patrones de código específicos, por lo tanto, usar una versión vulnerable del compilador no significa que el contrato necesariamente presente un riesgo de seguridad; el impacto real debe evaluarse de manera específica.
Para seguir prestando atención a los problemas de seguridad del compilador de Solidity, se pueden consultar los siguientes recursos:
Advertencia de seguridad publicada por el equipo de Solidity
Lista de errores en el repositorio oficial de Solidity
Lista de errores de los compiladores de cada versión
Aviso de seguridad en la página del código del contrato en Etherscan
Al prestar atención a la seguridad del compilador, utilizar adecuadamente las características del lenguaje y mantenerse alerta, los desarrolladores y el personal de seguridad pueden garantizar mejor la seguridad de los contratos inteligentes.
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.
15 me gusta
Recompensa
15
5
Compartir
Comentar
0/400
ConsensusBot
· hace21h
¿Quién va a cargar con esta olla?
Ver originalesResponder0
RebaseVictim
· hace21h
Dios mío, aún se atreve a usar el viejo compilador.
Ver originalesResponder0
LiquidityHunter
· hace21h
Actualiza, o perderás todo el dinero 555
Ver originalesResponder0
SchrodingerAirdrop
· hace21h
Prueba la compatibilidad de la nueva versión primero.
Análisis de vulnerabilidades del compilador Solidity y estrategias de respuesta
Análisis de vulnerabilidades del compilador Solidity y estrategias de respuesta
El compilador es uno de los componentes básicos de los sistemas informáticos modernos, y su función principal es convertir el código fuente de un lenguaje de programación de alto nivel en instrucciones de código ejecutables por la computadora. En comparación con la seguridad del código de aplicación, los problemas de seguridad del propio compilador a menudo son fáciles de pasar por alto. Sin embargo, las vulnerabilidades del compilador también pueden representar graves riesgos de seguridad en escenarios específicos.
El propósito 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 EVM en sí, las vulnerabilidades del compilador de Solidity no afectan directamente a la red de Ethereum, pero pueden resultar en que el código EVM generado no coincida con las expectativas del desarrollador, afectando así el funcionamiento normal del contrato inteligente y, potencialmente, causando pérdidas de activos para los usuarios.
A continuación se presentan algunos ejemplos reales de vulnerabilidades en compiladores de Solidity:
Esta vulnerabilidad existe en versiones anteriores del compilador Solidity ( >=0.1.6 <0.4.4). Debido a que el compilador no limpia correctamente los bits altos al manejar el desbordamiento de enteros, esto puede llevar a que el valor de variables adyacentes se modifique accidentalmente.
La vulnerabilidad existe en las versiones del compilador de 0.8.13 a 0.8.15. Debido a un problema con la estrategia de optimización del compilador, podría eliminar incorrectamente las instrucciones de escritura de memoria en el ensamblador en línea, lo que provoca que el comportamiento del programa no coincida con lo esperado.
Esta vulnerabilidad afecta a las versiones del compilador de 0.5.8 a 0.8.16. Al realizar operaciones abi.encode en un array de tipo calldata, puede modificar incorrectamente los datos adyacentes, lo que provoca inconsistencias en los datos codificados y decodificados.
En relación con las vulnerabilidades del compilador de Solidity, se recomienda a los desarrolladores:
Para los auditores de seguridad, se recomienda:
Es importante destacar que la mayoría de las vulnerabilidades de los compiladores solo se activan en patrones de código específicos, por lo tanto, usar una versión vulnerable del compilador no significa que el contrato necesariamente presente un riesgo de seguridad; el impacto real debe evaluarse de manera específica.
Para seguir prestando atención a los problemas de seguridad del compilador de Solidity, se pueden consultar los siguientes recursos:
Al prestar atención a la seguridad del compilador, utilizar adecuadamente las características del lenguaje y mantenerse alerta, los desarrolladores y el personal de seguridad pueden garantizar mejor la seguridad de los contratos inteligentes.