Glosario cripto

Fuzzing

Definición

El fuzzing es una técnica de pruebas automáticas que bombardea un contrato inteligente con entradas aleatorias o mutadas para hallar fallos e invariantes rotos.

En lugar de escribir a mano cada caso de prueba, un fuzzer genera miles o millones de entradas, a menudo guiado por los caminos del código que alcanzan, y llama con ellas a las funciones del contrato. El fuzzing sin estado prueba una función cada vez. El fuzzing de invariantes, o con estado, va más allá: ejecuta secuencias aleatorias de llamadas de distintos usuarios y comprueba tras cada paso que se mantienen las propiedades clave, como que un vault nunca deba más de lo que tiene.

Se ha convertido en práctica habitual en la seguridad de contratos. Entornos de desarrollo como Foundry incluyen pruebas de fuzzing e invariantes, y herramientas específicas como Echidna y Medusa son de uso común entre auditores. Muchos fallos graves detectados en auditorías y concursos salen de invariantes que un fuzzer rompió en pocos minutos.

Un fuzzer encuentra lo que sus entradas e invariantes alcanzan. Los fallos profundos que exigen una secuencia muy concreta, la manipulación de precios a través de protocolos externos o préstamos flash, o los defectos en propiedades que nadie escribió pueden quedar ocultos. El resultado depende también del tiempo de ejecución y de lo bien montado que esté. Complementa la verificación formal y la revisión manual: es más rápido y barato que una demostración, pero no garantiza que no queden errores.

Ejemplo

Una prueba de fuzzing de invariantes llama durante una hora a depositar, retirar y liquidar en orden aleatorio y encuentra una secuencia en la que un usuario retira algo más de colateral del que depositó.

Términos relacionados

Últimos artículos sobre Fuzzing