Mishandling of ETH (Mal manejo de ETH)
Se refiere a errores en la gestión de transacciones con ETH, lo que puede resultar en pérdidas de fondos, bloqueos de contratos o un comportamiento inesperado. Estas vulnerabilidades suelen ocurrir debido a una incorrecta implementación de funciones que manejan la recepción, el envío o la transferencia de ETH.
Ejemplo:
Considera un contrato que permite a los usuarios depositar ETH y luego retirar su saldo en cualquier momento. Un problema común es el uso de la función transfer()
o send()
para enviar ETH, sin considerar que estas funciones limitan la cantidad de gas disponible para la ejecución de la lógica del contrato receptor. Esto puede ser explotado si el receptor es un contrato que consume mucho gas, provocando que la transacción falle y el ETH no sea transferido, bloqueando potencialmente los fondos.
En este ejemplo, si un usuario intenta retirar ETH y su dirección es un contrato que requiere más gas de lo que transfer()
o send()
permite (2300 gas), la transacción fallará y los fondos podrían quedar bloqueados.
Mitigación:
Usar
call
para Enviar ETH: En lugar de usartransfer()
osend()
, se recomienda usar la funcióncall{value: amount}("")
que proporciona más flexibilidad en el manejo del gas. Sin embargo,call
devuelve un valor booleano que debe ser verificado para asegurar que la transferencia fue exitosa.Considerar la reentrada: Al utilizar
call
para enviar ETH, el contrato es vulnerable a ataques de reentrada si no se implementan las medidas de seguridad adecuadas. Para mitigar esto, es esencial usar el patrón "efecto-interacción" (checks-effects-interactions), asegurando que el estado del contrato se actualice antes de hacer la llamada externa.Funciones Fallback y recepción de ETH: Implementar correctamente las funciones
fallback
oreceive
para manejar de forma segura los ETH recibidos por el contrato. Evitar que estas funciones incluyan demasiada lógica para reducir el riesgo de errores o exploits.Gestión de fondos bloqueados: Implementar una función de emergencia que permita al propietario del contrato recuperar fondos bloqueados si ocurre un error en las transferencias, asegurando que los fondos no queden permanentemente inaccesibles.
Last updated