¡Bienvenido al Foco de Vulnerabilidades de Sherlock! Cada semana, destacaremos una vulnerabilidad impactante que nuestros investigadores descubrieron durante una auditoría de Sherlock. Esta semana tenemos un retiro excesivo por mala configuración. Fue encontrado por @bin2chen, @TheCHADuke, iglyx, @tapired, @xiaoming9090 y @0xleastwood en el concurso @NotionalFinance V3.
Si el currentBalance es de 999,900 USDC y el withdrawAmountExternal es de 1,000,000 USDC, entonces no hay saldo suficiente en el contrato y es necesario retirar fondos adicionales del mercado monetario (por ejemplo, Compound).
Dado que el contrato ya tiene 999,900 USDC, solo se necesitan retirar 100 USDC adicionales del mercado monetario para cumplir con la solicitud de retiro de 1,000,000 USDC
Sin embargo, en lugar de retirar 100 USDC del mercado monetario, Notional retira 1,000,000 USDC del mercado según la función oracle.getRedemptionCalldata(withdrawAmountExternal). Como resultado, se está retirando del mercado monetario un exceso de 999,900 USDC.
¿Cuál es el impacto? Esto llevó a una cantidad excesiva de activos inactivos en Notional y no generaron ningún rendimiento o interés en el mercado monetario, lo que condujo a una pérdida significativa de rendimiento para los usuarios, ya que recibirían una tasa de interés más baja de lo esperado e incurrirían en pérdidas de oportunidad.
Los atacantes podrían abusar de esto para retirar los fondos que Notional invirtió en el mercado monetario, lo que provocaría un duelo y una asombrosa pérdida de rendimientos/intereses para el protocolo.
La solución: Esencialmente, antes de la corrección, el código le decía al oráculo: "Prepare los pasos para retirar todo lo que el usuario quiera del mercado monetario". Cuando debería haber dicho: "Solo saca lo que nos falta del mercado monetario".
Después de la corrección, para el ejemplo anterior, los 999,900 USDC que ya tenía el contrato permanecen intactos y continúan obteniendo rendimiento, mejorando la eficiencia y preservando los rendimientos para todos los usuarios.
Esta vulnerabilidad se debió a una sutil falla lógica en la forma en que se calcularon y aprobaron los montos de retiro. Al pasar por alto el saldo existente del contrato, el sistema retiró innecesariamente fondos excesivos del mercado monetario, lo que provocó ineficiencia de capital y pérdida de rendimiento. Estamos orgullosos de haber ayudado a asegurar a Notional a través de este descubrimiento. Cuando es absolutamente necesario que sea seguro, Sherlock es la elección correcta.
2.83K