Seguridad Web3
Reentrancy, front-running y cómo se vacía un contrato.
12 aulas · 6 horas de práctica · en el navegador, sin instalar nada
Temario
- Pensar como auditor — La pregunta de un contrato no es «¿funciona?» sino «¿qué pasa si me llaman en el medio?». Y el invariante es la forma de escribir esa pregunta.
- El retiro que se llama a sí mismo — Reentrancy: mandar plata devuelve el control, y el saldo todavía no bajó. Cuatro retiros de 100 sobre un saldo de 100.
- Checks, effects, interactions — El arreglo son dos líneas dadas vuelta. Y cuando no se pueden dar vuelta, un candado.
- Enteros y redondeo — No hay decimales: solo enteros. Dividir antes de multiplicar hace que el reparto se evapore, y el resto tiene que ir a algún lado.
- Taller — Vaciar el contrato — Escribís la bóveda, escribís el atacante que la vacía, la parcheás, y demostrás con la misma prueba que el ataque ya no funciona — con lo de las cuatro primeras aulas y nada más.
- La función que nadie marcó — El bug más caro de la historia de Ethereum fue una función administrativa sin `onlyOwner`. Se encuentra probando: llamá todo como si fueras un extraño.
- Tu transacción es pública antes de ejecutarse — Entre que mandás una transacción y que se ejecuta, cualquiera la lee. El orden lo compra el que paga más, y contra eso no hay chequeo: hay límite.
- El precio que se puede empujar — Si tu contrato pregunta el precio en un solo lugar y en un solo instante, alguien puede mover ese lugar en ese instante. La defensa es no creerle a un solo número.
- Leer un contrato ajeno — El checklist con el que se mira un contrato que no escribiste vos, y las señales que describen un rug pull antes de que pase.
- Flash loans: atacar con plata prestada — Un préstamo que se pide y se devuelve en la misma transacción no necesita garantía — y con eso alcanza para mover el precio de una pool y cobrarle de más a un contrato que le cree.
- Denegación de servicio: bucles sin techo y griefing — Repartir en un solo bucle es un lugar donde cualquiera puede bloquear a todos con una sola función que se niega a recibir. La salida no es dejar de repartir: es que cada quien retire lo suyo, en su propia transacción.
- Taller — La auditoría — Un contrato con tres bugs plantados. Los encontrás con pruebas que corren, los arreglás sin romper nada, y emitís el informe que cierra los tres hallazgos.