En el mundo en rápida evolución de DeFi, asegurar la estabilidad y seguridad del protocolo es esencial. Durante una reciente revisión de seguridad de un proyecto CDP, observé cómo ciertas vulnerabilidades específicas podrían surgir bajo ciertas configuraciones. Si bien la configuración de parámetros actual en este proyecto es sólida, comprender estos riesgos potenciales es crucial para mantener la integridad del protocolo.
Este artículo tiene como objetivo explorar el papel crítico que desempeñan las tarifas de préstamo únicas y las tarifas de redención en este contexto. Al examinar escenarios específicos de explotación que podrían surgir sin estas tarifas, demostraré cómo una estructura de tarifas adecuada es esencial para prevenir ataques desestabilizadores, asegurando así la seguridad y viabilidad a largo plazo del protocolo.
Tomando inspiración de uno de los protocolos originales, Liquity, y sus derivados, muchos modelos CDP (Posición de Deuda Colateralizada) generan stablecoins descentralizadas a través de sobre-colateralización. Estos modelos a menudo incorporan un conjunto complejo pero sofisticado de mecanismos diseñados para mantener el anclaje al dólar estadounidense, al tiempo que aseguran la seguridad del protocolo en diversas condiciones, minimizando efectivamente el riesgo de deuda incobrable. Estos protocolos se distinguen por sus adaptaciones clave, que incluyen incentivos económicos a medida que se alinean más estrechamente con los objetivos específicos del protocolo.
La tarifa de rescate es un cargo aplicado cuando un usuario rescata la stablecoin del protocolo por su colateral subyacente. Esta tarifa está diseñada para estabilizar el valor de la stablecoin al hacer que el proceso de rescate sea más costoso cuando las redenciones son frecuentes, evitando así redenciones excesivas que podrían desestabilizar el protocolo.
La tarifa de redención se calcula en función del baseRate del protocolo, un parámetro de ajuste dinámico que refleja la actividad reciente dentro del sistema. Específicamente, el baseRate aumenta con cada redención, lo que hace que las redenciones posteriores sean más caras.
Este aumento es proporcional a la fracción del suministro total de stablecoin que se redime. Con el tiempo, si no se producen redenciones, la tasa base se decae gradualmente a cero, con una vida media de aproximadamente 12 horas.
La tarifa de redención se calcula utilizando la fórmula:
Por ejemplo, si la tasa base es del 1% y un usuario canjea 100 stablecoins cuando el precio del colateral es de $50,000, la comisión de canje sería:
Por lo tanto, el usuario recibiría un poco menos de colateral después de tener en cuenta la tasa de redención. Este mecanismo garantiza que las redenciones sigan siendo económicamente sensatas al mismo tiempo que protege el protocolo de actividades de arbitraje que podrían desestabilizarlo.
La tasa de préstamo es otra tarifa única que se cobra cuando un usuario toma prestadas stablecoins contra su garantía. Esta tarifa se basa de manera similar en la baseRate, pero se aplica en el momento en que las stablecoins se extraen del Trove del usuario (un contrato de bóveda que contiene la garantía y la deuda del usuario).
La tarifa de préstamo se calcula de la siguiente manera:
Por ejemplo, si un usuario desea pedir prestados 4,000 stablecoins y la tasa base está establecida en 0.5%, la tarifa sería:
Esta tarifa se agrega a la deuda del usuario, lo que significa que su deuda total sería la cantidad prestada más la tarifa (por ejemplo, 4,000 stablecoins + 20 stablecoins = 4,020 stablecoins).
Estas tarifas también actúan como anclajes suaves, influenciando indirectamente el precio de mercado de la stablecoin al hacer que sea menos atractivo pedir prestado o canjear en ciertas condiciones, lo que ayuda a mantener la stablecoin estrechamente anclada a $1.
Ahora, exploremos qué podría suceder si estas tarifas cruciales se eliminaran o se establecieran en cero.
Sin una comisión de redención única, el protocolo podría transformarse involuntariamente en un intercambio de DEX sin deslizamiento. En tal escenario, los poseedores de grandes cantidades de stablecoins podrían aprovechar el mecanismo de redención para intercambiar stablecoins por colateral sin incurrir en costos significativos, realizando efectivamente operaciones de arbitraje a gran escala. Esto podría llevar a varios resultados negativos, ya que en este entorno sin deslizamiento, las redenciones a gran escala no solo agotarían la liquidez del protocolo, sino que también obligarían a los prestatarios a vender su colateral al precio de mercado actual. Aunque su deuda se reduciría en consecuencia, esta liquidación forzada podría aumentar los costos operativos para los usuarios, especialmente si la stablecoin está operando por debajo de $1.
Además, existe un riesgo de front-running del oráculo: si un usuario nota que una transacción está a punto de actualizar el oráculo del precio del colateral para reflejar un precio más alto, podría canjear rápidamente una gran cantidad de stablecoin antes de la actualización del precio. Una vez que el precio del colateral se actualice y suba, el usuario podría vender luego el colateral canjeado con ganancia, completando un ciclo de arbitraje. Esta práctica no solo explota el protocolo, sino que también deja a los prestatarios en desventaja, ya que podrían verse obligados a vender su colateral a precios menos favorables.
Uno de los escenarios de explotación más directos implica la manipulación de la tarifa de redención para reducir costos. En protocolos donde no hay una tarifa de préstamo única, los usuarios pueden pedir prestadas grandes cantidades de stablecoin, inflando artificialmente la deuda total del protocolo. Una vez que la deuda está inflada, pueden canjear sus stablecoins a una tarifa más baja, ya que la tarifa de redención se calcula en función de la relación del tamaño de redención con la deuda total.
Esta manipulación socava la estructura de tarifas prevista en el protocolo, lo que lleva a una reducción de los ingresos para el protocolo y potencialmente desestabiliza el sistema. Por ejemplo, los atacantes pueden utilizar préstamos instantáneos para pedir grandes cantidades de garantías, que luego utilizan para acuñar una cantidad sustancial de stablecoins, aumentando así la deuda total del sistema. Luego realizan una operación de rescate, aprovechando la tarifa reducida debido a la deuda inflada, y finalmente, reembolsan el préstamo instantáneo, dejando al protocolo con menos ingresos de lo esperado y puede llevar a una mayor inestabilidad para aquellos usuarios que no habían previsto ser objeto de rescate.
Otra vulnerabilidad crítica surge de la capacidad de forzar el protocolo en el Modo de Recuperación en un solo bloque, lo que permite la liquidación de posiciones con ratios de garantía previamente saludables. Este exploit se basa en el aprovechamiento de préstamos flash y en el momento del ataque alrededor de una actualización del precio del oráculo.
El ataque se desarrolla de la siguiente manera:
El atacante primero utiliza un préstamo flash para pedir prestada una gran cantidad de garantía, que luego se deposita como garantía en el protocolo. Utilizando esta garantía, el atacante toma prestables stablecoins al Ratio Mínimo de Garantía (MCR). El atacante puede realizar esta acción para reducir el Ratio Total de Garantía (TCR) a 150%, el umbral para activar el Modo de Recuperación.
El atacante espera una actualización del oráculo que refleje una caída en el precio del colateral. A medida que el nuevo precio más bajo se actualiza en el sistema, el valor del colateral cae, lo que hace que el TCR caiga por debajo del 150%.
Con el TCR ahora por debajo del 150%, el protocolo entra automáticamente en modo de recuperación. En este estado, el protocolo permite la liquidación de Troves con Índices de Colateral (CR) por debajo del nuevo TCR. El atacante puede proceder a liquidar Troves de otros usuarios que ahora tienen un CR por debajo del TCR, causándoles pérdidas y obteniendo beneficios de las recompensas por liquidación.
Basándose en el escenario de ataque anterior, este exploit avanzado permite a un atacante forzar el protocolo en el Modo de Recuperación a través de un proceso de redención cuidadosamente elaborado. A diferencia del ataque anterior, que puede devolver temporalmente el sistema al modo normal después de la liquidación, este método asegura que el sistema permanezca en el Modo de Recuperación, permitiendo al atacante explotar repetidamente la vulnerabilidad.
El problema central, que surge cuando el sistema admite múltiples tipos de garantías, cada una administrada por diferentes Administradores de Trove, radica en la posibilidad de que la Relación de Colateral Total (TCR) en todo el sistema disminuya después de un rescate, incluso cuando la salud de los Administradores de Trove individuales mejora. Este resultado contra intuitivo es el resultado de la compleja interacción entre las relaciones de colateral globales y locales.
Por ejemplo, considera un escenario donde el TCR del sistema está en 150%.
Si un usuario canjea un Trove con una relación de garantía del 160%, lo que hace que ese Trove se cierre, el cálculo resultante empujaría el TCR por debajo del 150%, lo que activaría el Modo de Recuperación.
El ataque se desarrolla de la siguiente manera:
El atacante abre una posición mínima con una relación de garantía ligeramente superior al 150% en una Trove cuidadosamente seleccionada. Esta configuración es crucial para garantizar que el rescate en el siguiente paso conduzca eficazmente el TCR por debajo del umbral crítico.
El atacante utiliza un préstamo flash para abrir otra posición con una relación de garantía en la Relación de Garantía Mínima (MCR) del 110% en cualquier Gerente de Reserva, lo que reduce la Relación Total de Garantía (TCR) del sistema exactamente al 150%. Este paso prepara el sistema para el Modo de Recuperación.
Entonces, el atacante redime la posición abierta en el primer paso. Debido a que esta posición tiene un CR ligeramente superior al 150%, su redención hace que el TCR caiga por debajo del 150%, lo que activa el Modo de Recuperación. La redención no solo afecta a la Trove específica que se está redimiendo, sino que también causa un efecto sistémico que empuja al TCR hacia el Modo de Recuperación.
Con el sistema ahora en modo de recuperación, el atacante puede liquidar cualquier posición con una relación de colateral por debajo del 150%. Estas liquidaciones podrían restaurar el TCR a más del 150%.
El atacante puede repetir los pasos según sea necesario, manteniendo el sistema en un estado de Modo de Recuperación para explotar continuamente los Troves con relaciones de garantía por debajo del 150%.
Las tarifas de redención única y las tarifas de préstamo juegan un papel crucial en la mitigación de los riesgos asociados con los vectores de ataque descritos anteriormente. Al introducir un costo para pedir prestado y redimir, estas tarifas hacen económicamente inviable para los atacantes ejecutar manipulaciones rentables a gran escala en la mayoría de los casos.
Por ejemplo, en el escenario de manipulación de la tarifa de redención, una tarifa de préstamo única aumentaría el costo de inflar la deuda del sistema, lo que haría que no fuera rentable para el atacante aprovechar la tarifa de redención. De manera similar, en escenarios donde el atacante intenta activar el Modo de Recuperación, la tarifa de préstamo actuaría como un elemento disuasorio al aumentar el costo de asumir grandes cantidades de deuda para manipular el TCR.
A medida que DeFi evoluciona, los protocolos enfrentarán ataques cada vez más sofisticados. Para mantenerse al tanto, es crucial comprender cómo interactúan diferentes características y potencialmente crean vulnerabilidades. La seguridad efectiva requiere una comprensión profunda de cómo interactúan los diferentes componentes del sistema, así como una atención cuidadosa a los ajustes y parámetros que rigen estas interacciones. Al anticipar de manera proactiva las formas en que las características pueden combinarse para crear vulnerabilidades, los diseñadores pueden construir protocolos que no solo son seguros, sino también resistentes y adaptables a los desafíos futuros.
Share
Content
En el mundo en rápida evolución de DeFi, asegurar la estabilidad y seguridad del protocolo es esencial. Durante una reciente revisión de seguridad de un proyecto CDP, observé cómo ciertas vulnerabilidades específicas podrían surgir bajo ciertas configuraciones. Si bien la configuración de parámetros actual en este proyecto es sólida, comprender estos riesgos potenciales es crucial para mantener la integridad del protocolo.
Este artículo tiene como objetivo explorar el papel crítico que desempeñan las tarifas de préstamo únicas y las tarifas de redención en este contexto. Al examinar escenarios específicos de explotación que podrían surgir sin estas tarifas, demostraré cómo una estructura de tarifas adecuada es esencial para prevenir ataques desestabilizadores, asegurando así la seguridad y viabilidad a largo plazo del protocolo.
Tomando inspiración de uno de los protocolos originales, Liquity, y sus derivados, muchos modelos CDP (Posición de Deuda Colateralizada) generan stablecoins descentralizadas a través de sobre-colateralización. Estos modelos a menudo incorporan un conjunto complejo pero sofisticado de mecanismos diseñados para mantener el anclaje al dólar estadounidense, al tiempo que aseguran la seguridad del protocolo en diversas condiciones, minimizando efectivamente el riesgo de deuda incobrable. Estos protocolos se distinguen por sus adaptaciones clave, que incluyen incentivos económicos a medida que se alinean más estrechamente con los objetivos específicos del protocolo.
La tarifa de rescate es un cargo aplicado cuando un usuario rescata la stablecoin del protocolo por su colateral subyacente. Esta tarifa está diseñada para estabilizar el valor de la stablecoin al hacer que el proceso de rescate sea más costoso cuando las redenciones son frecuentes, evitando así redenciones excesivas que podrían desestabilizar el protocolo.
La tarifa de redención se calcula en función del baseRate del protocolo, un parámetro de ajuste dinámico que refleja la actividad reciente dentro del sistema. Específicamente, el baseRate aumenta con cada redención, lo que hace que las redenciones posteriores sean más caras.
Este aumento es proporcional a la fracción del suministro total de stablecoin que se redime. Con el tiempo, si no se producen redenciones, la tasa base se decae gradualmente a cero, con una vida media de aproximadamente 12 horas.
La tarifa de redención se calcula utilizando la fórmula:
Por ejemplo, si la tasa base es del 1% y un usuario canjea 100 stablecoins cuando el precio del colateral es de $50,000, la comisión de canje sería:
Por lo tanto, el usuario recibiría un poco menos de colateral después de tener en cuenta la tasa de redención. Este mecanismo garantiza que las redenciones sigan siendo económicamente sensatas al mismo tiempo que protege el protocolo de actividades de arbitraje que podrían desestabilizarlo.
La tasa de préstamo es otra tarifa única que se cobra cuando un usuario toma prestadas stablecoins contra su garantía. Esta tarifa se basa de manera similar en la baseRate, pero se aplica en el momento en que las stablecoins se extraen del Trove del usuario (un contrato de bóveda que contiene la garantía y la deuda del usuario).
La tarifa de préstamo se calcula de la siguiente manera:
Por ejemplo, si un usuario desea pedir prestados 4,000 stablecoins y la tasa base está establecida en 0.5%, la tarifa sería:
Esta tarifa se agrega a la deuda del usuario, lo que significa que su deuda total sería la cantidad prestada más la tarifa (por ejemplo, 4,000 stablecoins + 20 stablecoins = 4,020 stablecoins).
Estas tarifas también actúan como anclajes suaves, influenciando indirectamente el precio de mercado de la stablecoin al hacer que sea menos atractivo pedir prestado o canjear en ciertas condiciones, lo que ayuda a mantener la stablecoin estrechamente anclada a $1.
Ahora, exploremos qué podría suceder si estas tarifas cruciales se eliminaran o se establecieran en cero.
Sin una comisión de redención única, el protocolo podría transformarse involuntariamente en un intercambio de DEX sin deslizamiento. En tal escenario, los poseedores de grandes cantidades de stablecoins podrían aprovechar el mecanismo de redención para intercambiar stablecoins por colateral sin incurrir en costos significativos, realizando efectivamente operaciones de arbitraje a gran escala. Esto podría llevar a varios resultados negativos, ya que en este entorno sin deslizamiento, las redenciones a gran escala no solo agotarían la liquidez del protocolo, sino que también obligarían a los prestatarios a vender su colateral al precio de mercado actual. Aunque su deuda se reduciría en consecuencia, esta liquidación forzada podría aumentar los costos operativos para los usuarios, especialmente si la stablecoin está operando por debajo de $1.
Además, existe un riesgo de front-running del oráculo: si un usuario nota que una transacción está a punto de actualizar el oráculo del precio del colateral para reflejar un precio más alto, podría canjear rápidamente una gran cantidad de stablecoin antes de la actualización del precio. Una vez que el precio del colateral se actualice y suba, el usuario podría vender luego el colateral canjeado con ganancia, completando un ciclo de arbitraje. Esta práctica no solo explota el protocolo, sino que también deja a los prestatarios en desventaja, ya que podrían verse obligados a vender su colateral a precios menos favorables.
Uno de los escenarios de explotación más directos implica la manipulación de la tarifa de redención para reducir costos. En protocolos donde no hay una tarifa de préstamo única, los usuarios pueden pedir prestadas grandes cantidades de stablecoin, inflando artificialmente la deuda total del protocolo. Una vez que la deuda está inflada, pueden canjear sus stablecoins a una tarifa más baja, ya que la tarifa de redención se calcula en función de la relación del tamaño de redención con la deuda total.
Esta manipulación socava la estructura de tarifas prevista en el protocolo, lo que lleva a una reducción de los ingresos para el protocolo y potencialmente desestabiliza el sistema. Por ejemplo, los atacantes pueden utilizar préstamos instantáneos para pedir grandes cantidades de garantías, que luego utilizan para acuñar una cantidad sustancial de stablecoins, aumentando así la deuda total del sistema. Luego realizan una operación de rescate, aprovechando la tarifa reducida debido a la deuda inflada, y finalmente, reembolsan el préstamo instantáneo, dejando al protocolo con menos ingresos de lo esperado y puede llevar a una mayor inestabilidad para aquellos usuarios que no habían previsto ser objeto de rescate.
Otra vulnerabilidad crítica surge de la capacidad de forzar el protocolo en el Modo de Recuperación en un solo bloque, lo que permite la liquidación de posiciones con ratios de garantía previamente saludables. Este exploit se basa en el aprovechamiento de préstamos flash y en el momento del ataque alrededor de una actualización del precio del oráculo.
El ataque se desarrolla de la siguiente manera:
El atacante primero utiliza un préstamo flash para pedir prestada una gran cantidad de garantía, que luego se deposita como garantía en el protocolo. Utilizando esta garantía, el atacante toma prestables stablecoins al Ratio Mínimo de Garantía (MCR). El atacante puede realizar esta acción para reducir el Ratio Total de Garantía (TCR) a 150%, el umbral para activar el Modo de Recuperación.
El atacante espera una actualización del oráculo que refleje una caída en el precio del colateral. A medida que el nuevo precio más bajo se actualiza en el sistema, el valor del colateral cae, lo que hace que el TCR caiga por debajo del 150%.
Con el TCR ahora por debajo del 150%, el protocolo entra automáticamente en modo de recuperación. En este estado, el protocolo permite la liquidación de Troves con Índices de Colateral (CR) por debajo del nuevo TCR. El atacante puede proceder a liquidar Troves de otros usuarios que ahora tienen un CR por debajo del TCR, causándoles pérdidas y obteniendo beneficios de las recompensas por liquidación.
Basándose en el escenario de ataque anterior, este exploit avanzado permite a un atacante forzar el protocolo en el Modo de Recuperación a través de un proceso de redención cuidadosamente elaborado. A diferencia del ataque anterior, que puede devolver temporalmente el sistema al modo normal después de la liquidación, este método asegura que el sistema permanezca en el Modo de Recuperación, permitiendo al atacante explotar repetidamente la vulnerabilidad.
El problema central, que surge cuando el sistema admite múltiples tipos de garantías, cada una administrada por diferentes Administradores de Trove, radica en la posibilidad de que la Relación de Colateral Total (TCR) en todo el sistema disminuya después de un rescate, incluso cuando la salud de los Administradores de Trove individuales mejora. Este resultado contra intuitivo es el resultado de la compleja interacción entre las relaciones de colateral globales y locales.
Por ejemplo, considera un escenario donde el TCR del sistema está en 150%.
Si un usuario canjea un Trove con una relación de garantía del 160%, lo que hace que ese Trove se cierre, el cálculo resultante empujaría el TCR por debajo del 150%, lo que activaría el Modo de Recuperación.
El ataque se desarrolla de la siguiente manera:
El atacante abre una posición mínima con una relación de garantía ligeramente superior al 150% en una Trove cuidadosamente seleccionada. Esta configuración es crucial para garantizar que el rescate en el siguiente paso conduzca eficazmente el TCR por debajo del umbral crítico.
El atacante utiliza un préstamo flash para abrir otra posición con una relación de garantía en la Relación de Garantía Mínima (MCR) del 110% en cualquier Gerente de Reserva, lo que reduce la Relación Total de Garantía (TCR) del sistema exactamente al 150%. Este paso prepara el sistema para el Modo de Recuperación.
Entonces, el atacante redime la posición abierta en el primer paso. Debido a que esta posición tiene un CR ligeramente superior al 150%, su redención hace que el TCR caiga por debajo del 150%, lo que activa el Modo de Recuperación. La redención no solo afecta a la Trove específica que se está redimiendo, sino que también causa un efecto sistémico que empuja al TCR hacia el Modo de Recuperación.
Con el sistema ahora en modo de recuperación, el atacante puede liquidar cualquier posición con una relación de colateral por debajo del 150%. Estas liquidaciones podrían restaurar el TCR a más del 150%.
El atacante puede repetir los pasos según sea necesario, manteniendo el sistema en un estado de Modo de Recuperación para explotar continuamente los Troves con relaciones de garantía por debajo del 150%.
Las tarifas de redención única y las tarifas de préstamo juegan un papel crucial en la mitigación de los riesgos asociados con los vectores de ataque descritos anteriormente. Al introducir un costo para pedir prestado y redimir, estas tarifas hacen económicamente inviable para los atacantes ejecutar manipulaciones rentables a gran escala en la mayoría de los casos.
Por ejemplo, en el escenario de manipulación de la tarifa de redención, una tarifa de préstamo única aumentaría el costo de inflar la deuda del sistema, lo que haría que no fuera rentable para el atacante aprovechar la tarifa de redención. De manera similar, en escenarios donde el atacante intenta activar el Modo de Recuperación, la tarifa de préstamo actuaría como un elemento disuasorio al aumentar el costo de asumir grandes cantidades de deuda para manipular el TCR.
A medida que DeFi evoluciona, los protocolos enfrentarán ataques cada vez más sofisticados. Para mantenerse al tanto, es crucial comprender cómo interactúan diferentes características y potencialmente crean vulnerabilidades. La seguridad efectiva requiere una comprensión profunda de cómo interactúan los diferentes componentes del sistema, así como una atención cuidadosa a los ajustes y parámetros que rigen estas interacciones. Al anticipar de manera proactiva las formas en que las características pueden combinarse para crear vulnerabilidades, los diseñadores pueden construir protocolos que no solo son seguros, sino también resistentes y adaptables a los desafíos futuros.