@OnyxDAO fue atacado, lo que resultó en una pérdida de casi $4 millones. La causa principal fue la entrada no verificada del usuario durante el proceso de liquidación. Específicamente, los parámetros clave de la función liquidateWithSingleRepay en el contrato NFTLiquidation eran controlables por el atacante, lo que permitió la manipulación de la variable extraRepayAmount a través del parámetro repayAmount. Al explotar esto, el atacante pudo liquidar todas las garantías con un solo token.

Los pasos clave del ataque se resumen de la siguiente manera:
1. El atacante primero depositó oETH y tomó prestados varios activos para alcanzar el umbral de liquidación. Simultáneamente, creó un nuevo contrato que, a través de un ataque de donación y pérdida de precisión (inherente a la bifurcación de Compound V2), redujo el tipo de cambio de oETH, lo que hizo que la posición del atacante fuera elegible para la liquidación.
2. Luego, el atacante realizó la liquidación. Debido a una validación de parámetros insuficiente, el atacante manipuló la variable extraRepayAmount, que se agregó al cálculo de cuántos tokens debían liquidarse. Esto le permitió al atacante obtener más oETH a través de la liquidación, lo que generó una ganancia.

Tx del ataque: