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 lenguajes de programación de alto nivel en código de instrucciones ejecutables por la computadora.
Aunque la mayoría de los desarrolladores y personal de seguridad se centra más en la seguridad del código de las aplicaciones, la seguridad del propio compilador tampoco debe pasarse por alto. Como programa informático, el compilador también puede tener vulnerabilidades de seguridad, lo que en ciertos casos puede presentar riesgos de seguridad graves. Por ejemplo, cuando un navegador compila y ejecuta código front-end de JavaScript, puede sufrir un ataque de ejecución remota de código debido a vulnerabilidades en el motor de análisis de JavaScript, lo que finalmente permite a un atacante controlar el navegador de la víctima e incluso su sistema operativo.
El compilador de Solidity no es una excepción, existen vulnerabilidades 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 ejecutará en la EVM.
Es importante tener en cuenta que hay diferencias entre los errores del compilador de Solidity y los errores del EVM en sí. Los errores del EVM se refieren a problemas de seguridad que surgen al ejecutar instrucciones en la máquina virtual, y pueden afectar a toda la red de Ethereum. Por otro lado, los errores del compilador de Solidity son problemas que ocurren al convertir el código de Solidity en código EVM; aunque no afectan directamente a la red de Ethereum, pueden dar lugar a que el código EVM generado no coincida con las expectativas del desarrollador.
Una de las amenazas de las vulnerabilidades del compilador de Solidity es que puede llevar a que el código EVM generado no se alinee con las expectativas de los desarrolladores de contratos inteligentes. Dado que los contratos inteligentes en Ethereum generalmente implican los activos de criptomonedas de los usuarios, cualquier error causado por el compilador podría resultar en la pérdida de los activos de los usuarios, lo que tendría graves consecuencias.
Los desarrolladores y los auditores de contratos suelen centrarse más en la implementación lógica del código del contrato y en los problemas de seguridad a nivel de Solidity, y pasan por alto las vulnerabilidades del compilador. Es difícil detectar vulnerabilidades del compilador solo auditando el código fuente del contrato; se necesita analizar en combinación con versiones específicas del compilador y patrones de código específicos.
A continuación se presentan algunos ejemplos reales de vulnerabilidades de compiladores de Solidity:
SOL-2016-9 HighOrderByteCleanStorage
La vulnerabilidad existe en versiones tempranas del compilador Solidity (>=0.1.6 <0.4.4). En ciertos casos, el compilador no limpia correctamente los bytes más significativos, lo que provoca que un bit 1 más significativo se escriba en el almacenamiento después de un desbordamiento de enteros, sobrescribiendo el valor de las variables adyacentes. Este comportamiento inconsistente con lo esperado puede tener graves consecuencias en situaciones que implican verificación de permisos o contabilidad de activos.
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, en ciertos casos se eliminan incorrectamente las instrucciones de escritura en memoria, lo que provoca que el valor de retorno de la función no coincida con lo esperado. Este tipo de error relacionado con la optimización es difícil de detectar mediante una simple revisión del código.
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, el compilador limpia incorrectamente ciertos datos, lo que lleva a la modificación de datos adyacentes, causando inconsistencias en los datos después de la codificación y decodificación. Este problema también puede ocurrir en llamadas externas y eventos emitidos, ya que estas operaciones ejecutan implícitamente abi.encode.
Basado en el análisis de las vulnerabilidades del compilador de Solidity, se presentan las siguientes recomendaciones de seguridad:
Para los desarrolladores:
Utiliza una versión más reciente del compilador Solidity, los problemas de seguridad conocidos suelen ser menores.
Mejorar los casos de prueba unitarios, aumentar la cobertura del código, ayuda a descubrir problemas causados por el compilador.
Evite el uso de ensamblado en línea, operaciones complejas de codificación y decodificación de ABI, y use con precaución 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
Instar a actualizar la versión del compilador en el proceso SDL, considerar introducir una verificación automática de versiones en CI/CD.
Evaluar el impacto real de las vulnerabilidades del compilador según las circunstancias específicas del proyecto, para evitar preocupaciones excesivas.
Algunos recursos útiles:
Advertencia de seguridad publicada oficialmente por Solidity
Lista de errores actualizada periódicamente en el repositorio de Solidity
Lista de errores del compilador de varias versiones, que se puede utilizar para la verificación automática
Aviso de vulnerabilidad del compilador en la página de código del contrato de Etherscan
En resumen, aunque las vulnerabilidades del compilador Solidity no son comunes, pueden tener graves consecuencias. Los desarrolladores y el personal de seguridad deben estar en 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.
20 me gusta
Recompensa
20
5
Compartir
Comentar
0/400
AltcoinAnalyst
· 07-21 10:23
Ten cuidado, es un problema antiguo de la versión 0.8.x.
Ver originalesResponder0
MemecoinResearcher
· 07-21 10:12
rekt esperando a suceder fr basado en mi análisis (p<0.01)
Ver originalesResponder0
just_another_wallet
· 07-21 10:12
¡Desarrolladores jóvenes, echen un vistazo rápido!
Ver originalesResponder0
FarmHopper
· 07-21 10:11
¡Vaya! Esta vulnerabilidad se ve aterradora.
Ver originalesResponder0
YieldWhisperer
· 07-21 10:10
he visto este mismo patrón de explotación de compiladores desde 2021... los desarrolladores nunca aprenden smh
Análisis de vulnerabilidades del compilador Solidity: riesgos de seguridad y formas de mitigación
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 lenguajes de programación de alto nivel en código de instrucciones ejecutables por la computadora.
Aunque la mayoría de los desarrolladores y personal de seguridad se centra más en la seguridad del código de las aplicaciones, la seguridad del propio compilador tampoco debe pasarse por alto. Como programa informático, el compilador también puede tener vulnerabilidades de seguridad, lo que en ciertos casos puede presentar riesgos de seguridad graves. Por ejemplo, cuando un navegador compila y ejecuta código front-end de JavaScript, puede sufrir un ataque de ejecución remota de código debido a vulnerabilidades en el motor de análisis de JavaScript, lo que finalmente permite a un atacante controlar el navegador de la víctima e incluso su sistema operativo.
El compilador de Solidity no es una excepción, existen vulnerabilidades 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 ejecutará en la EVM.
Es importante tener en cuenta que hay diferencias entre los errores del compilador de Solidity y los errores del EVM en sí. Los errores del EVM se refieren a problemas de seguridad que surgen al ejecutar instrucciones en la máquina virtual, y pueden afectar a toda la red de Ethereum. Por otro lado, los errores del compilador de Solidity son problemas que ocurren al convertir el código de Solidity en código EVM; aunque no afectan directamente a la red de Ethereum, pueden dar lugar a que el código EVM generado no coincida con las expectativas del desarrollador.
Una de las amenazas de las vulnerabilidades del compilador de Solidity es que puede llevar a que el código EVM generado no se alinee con las expectativas de los desarrolladores de contratos inteligentes. Dado que los contratos inteligentes en Ethereum generalmente implican los activos de criptomonedas de los usuarios, cualquier error causado por el compilador podría resultar en la pérdida de los activos de los usuarios, lo que tendría graves consecuencias.
Los desarrolladores y los auditores de contratos suelen centrarse más en la implementación lógica del código del contrato y en los problemas de seguridad a nivel de Solidity, y pasan por alto las vulnerabilidades del compilador. Es difícil detectar vulnerabilidades del compilador solo auditando el código fuente del contrato; se necesita analizar en combinación con versiones específicas del compilador y patrones de código específicos.
A continuación se presentan algunos ejemplos reales de vulnerabilidades de compiladores de Solidity:
La vulnerabilidad existe en versiones tempranas del compilador Solidity (>=0.1.6 <0.4.4). En ciertos casos, el compilador no limpia correctamente los bytes más significativos, lo que provoca que un bit 1 más significativo se escriba en el almacenamiento después de un desbordamiento de enteros, sobrescribiendo el valor de las variables adyacentes. Este comportamiento inconsistente con lo esperado puede tener graves consecuencias en situaciones que implican verificación de permisos o contabilidad de activos.
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, en ciertos casos se eliminan incorrectamente las instrucciones de escritura en memoria, lo que provoca que el valor de retorno de la función no coincida con lo esperado. Este tipo de error relacionado con la optimización es difícil de detectar mediante una simple revisión del código.
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, el compilador limpia incorrectamente ciertos datos, lo que lleva a la modificación de datos adyacentes, causando inconsistencias en los datos después de la codificación y decodificación. Este problema también puede ocurrir en llamadas externas y eventos emitidos, ya que estas operaciones ejecutan implícitamente abi.encode.
Basado en el análisis de las vulnerabilidades del compilador de Solidity, se presentan las siguientes recomendaciones de seguridad:
Para los desarrolladores:
Para el personal de seguridad:
Algunos recursos útiles:
En resumen, aunque las vulnerabilidades del compilador Solidity no son comunes, pueden tener graves consecuencias. Los desarrolladores y el personal de seguridad deben estar en alerta y tomar las medidas adecuadas para reducir el riesgo.