Back to Portfolio
Sample Audit — Educational

FlashLoan Vulnerable Contract

Contrato educativo con 11 vulnerabilidades — auditado con AI Multi-Model (Gemini + Groq + DeepSeek)

Severidad
ALTA
Score
3.2/10
Hallazgos
11
Duración
4 horas
CRÍTICA

C-01: Reentrancy en flashLoan()

FlashLoanVuln.sol:45

La función realiza una llamada externa ANTES de actualizar el balance, permitiendo drenar todos los fondos del contrato mediante reentrancy.

function flashLoan(address borrower, uint256 amount) external {
    uint256 balanceBefore = address(this).balance;
    require(balanceBefore >= amount, "Insufficient liquidity");
    
    (bool success,) = borrower.call{value: amount}(""); // ← Llamada externa
    require(success, "Transfer failed");
    
    uint256 balanceAfter = address(this).balance;
    require(balanceAfter >= balanceBefore + fee, "Flash loan not repaid");
}
Aplicar Checks-Effects-Interactions. Actualizar balance ANTES de la llamada externa.
CRÍTICA

C-02: Uso de tx.origin en onlyOwner

FlashLoanVuln.sol:12

El modifier onlyOwner usa tx.origin en lugar de msg.sender, permitiendo ataques de phishing donde un contrato intermediario ejecuta acciones privilegiadas.

modifier onlyOwner() {
    require(tx.origin == owner); // ← vulnerable
    _;
}
Usar msg.sender en lugar de tx.origin para verificar identidad.
ALTA

H-01: Unchecked Call en withdraw()

FlashLoanVuln.sol:60

La función withdraw() no verifica el resultado de call(). Si falla, el owner no recibe los fondos pero el estado se actualiza igual.

function withdraw(uint256 amount) external onlyOwner {
    owner.call{value: amount}(""); // ← no se verifica
}
Verificar siempre el booleano de retorno de call().
ALTA

H-02: Sin límite de flash loan

FlashLoanVuln.sol:30

No hay límite máximo. Un atacante puede tomar el 100% del balance en un solo flash loan.

Implementar límite máximo por transacción.
ALTA

H-03: Sin mecanismo de pausa

N/A

No hay circuito de emergencia. Si se detecta un ataque en curso, no hay forma de detener las operaciones.

Implementar OpenZeppelin Pausable.

Auditá tu proyecto con la misma tecnología

3 modelos de AI analizan tu contrato en busca de vulnerabilidades. Resultados en horas, no semanas.