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

  1. 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.
  2. 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.
  3. Checks, effects, interactions — El arreglo son dos líneas dadas vuelta. Y cuando no se pueden dar vuelta, un candado.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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.
  11. 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.
  12. 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.

Es parte de