Mostrando entradas con la etiqueta vulnerabilidad. Mostrar todas las entradas
Mostrando entradas con la etiqueta vulnerabilidad. Mostrar todas las entradas

miércoles, diciembre 21, 2022

Read-Only Reentrancy Attack: $220k robados y +$100M en riesgo

En el pasado hemos hablado sobre el “Reentrancy attack”, un tipo de vulnerabilidad que puede tener muy graves consecuencias sobre nuestros SmartContracts. El uso de este ataque es muy conocido en la comunidad de Web3 y rara es la vez que un contrato que ha sido previamente auditado es desplegado conteniendo esta vulnerabilidad. Pero, ¿y si os dijera que existe un exploit que se aprovecha de los contratos que previenen los ataques de reentrancy, una vulnerabilidad que ha pasado desapercibida por la comunidad durante bastante tiempo?

Figura 1: Read-Only Reentrancy Attack: $220k robados y +$100M en riesgo

Este exploit/vulnerabilidad es el “Read only reentrancy attack” una modalidad del reentrancy que no afecta directamente a la explotación de fondos, sino a los contratos DeFi que interactúen con él o dependan de los datos que este pueda proveer. Esto se traduce en que puede afectar a todos aquellos protocolos y oráculos que dependan de fuentes externas de alguna manera, y más en concreto a protocolos descentralizados de routing de DEXs (como QuickSwap o 1inch).

“Read-only reentrancy”

Fijaos en el siguiente contrato, en el que podréis ver que en la línea 14 el SmartContract es vulnerable a un reentrancy, en la función withdraw().

Figura 2: Contrato vulnerable al Reentrancy

El esquema de ataque para este contrato sería el típico de un reentrancy, si queréis una explicación en más detalle podéis ir a este artículo en el que Pablo Gonzalez nos explica cómo funcionaba la vulnerabilidad.

Figura 3: Esquema de vulneración de un contrato usando “Reentrancy”

Podríamos solucionar el exploit actualizando los datos del balance antes de hacer la llamada; o incluso implementando un “cerrojo”. En este caso usamos una librería de Openzeppelin que nos facilita bastante su implementación.

Figura 4 Contrato vulnerable al “Read only reentrancy”

Pero aun así seguiría siendo vulnerable al “Read only reentrancy”; aunque el “cerrojo” implementado no permite al atacante llevarse fondos al llamar a su función “fallback” (línea 9), éste sí que permite entre medias realizar una llamada a algún contrato DeFi dependiente de los datos del contrato original(el vulnerable), y el contrato llamado no dispondrá los datos actualizados. Un ejemplo de cómo se puede explotar esta vulnerabilidad es el siguiente:

1. Contrato Attacker, llama a la función withdraw() del contrato Vulnerable. 
 
2. Vulnerable, para devolver los fondos tiene que llamar a fallback() de Attacker. 
 
a. Llama a fallback() porque así se envía el ETH en este caso. 
 
b. Podría ser cualquier tipo de llamada externa 
 
3. Attacker desde fallback() llama a lendMe() en DeFi, dependiente de los datos de Vulnerable. 
 
4. DeFi lee los datos de Vulnerable pero estos están desactualizados y realizará acciones que no debería.

Figura 5: Diagrama explotación vulnerabilidad “Read only reentrancy”

Un ejemplo de mitigación sería actualizar los datos antes de hacer las llamadas, pero esto no siempre es posible, muchas veces necesitaremos obtener datos de otra fuente para poder continuar.

$200k en un ataque a Quick Swap

En este caso, el read only reentrancy ya se cobró una importante víctima el pasado 24 de octubre, el DEX de QuickSwap. En este caso el ciberatacante usó este tipo de reentrancy para manipular el precio de un activo en una pool de liquidez de Curve (otro DEX) que le permitió tomar prestado más cantidad de la normal en el Lending de QuickSwap.

Figura 6: Protocolos con riesgo, por ChainSecurity

Si queréis profundizar en detalle en cómo se realizó el ataque, podéis leerlo en este artículo. Además según ChainSecurity (firma que ha auditado protocolos como el de Curve o Compound) en reportes recientes de sus auditorías unos $100M estarían en riesgo por esta vulnerabilidad.

Conclusiones

Este ataque aunque no afecte de una manera directa a los fondos del contrato puede provocar la explotación del mismo o de otros contratos. Es un vector de ataque que en parte se aprovecha de los contratos que usan “cerrojos” para evitar ser vulnerados con un reentrancy “normal”, por ello es incluso más crítico aún.  Sobre todo este exploit afecta de manera importante a todos aquellos contratos que sirvan como fuente de datos, tokens, oráculos, sistemas de reputación basados en tokenomics...
Seguiremos hablando de este tipo de ataques que cada día van a ser más peligrosos en nuestros servicios digitales con la llegada masiva de la Web3.

Más artículos de Web3, Blockchain & SmartContracts
Saludos,

AutorChema Garabito. Desarrollador Full-Stack. Ideas Locas Telefónica CDO.

sábado, diciembre 10, 2022

"Ser un escritor es un trabajo difícil en sí mismo", dijo la máquina

Si has empatizado con la frase del principio, entonces ChatGPT captura bien las emociones cuando le pides que te haga algo emotivo. Y si esto es así, probablemente, en breve, escribir un artículo para muchos escenarios, va dejar de merecer la pena invertir "recursos" humanos. Hoy, le he querido pedir que escriba él mi blog, que haga el artículo. ¿Sobre qué tema? Pues nada, sobre lo difícil que es escribir un artículo de seguridad informática cada día y qué significa para mí, pero que le diera un toque emotivo, como suelo hacerlo yo.

Figura 1: "Ser un escritor es un trabajo difícil en sí mismo", dijo la máquina

La trampa es que yo hice el artículo de "La página en blanco" hace un mes o así, comenzando a partir de esa sensación. Es cierto que luego le di varias vueltas de tuerca porque quería jugar un poco con la idea de que escribir un artículo es acto de comunicarse, y elegir bien y con quién tiene su arte y su magia. Pero el sentimiento de partida era el mismo. Lo que le he pedido ha sido algo tan sencillo como unos párrafos hablando emotivamente de esto, y para ello le he dado esta entrada:

"Escribe un artículo emotivo de unos cuatro párrafos en los que hables de lo duro que es para un escritor sacar todos los días un artículo hablando de seguridad informática"

"Ser un escritor es un trabajo difícil en sí mismo, pero cuando se trata de escribir sobre un tema tan técnico y poco emocionante como la seguridad informática, puede ser aún más desafiante. Todos los días me siento ante mi ordenador con la responsabilidad de encontrar nuevos ángulos y enfoques interesantes para hablar de un tema que, a pesar de su importancia, muchas veces puede parecer aburrido y desalentador.

A veces me encuentro luchando por encontrar la motivación para seguir escribiendo. La seguridad informática es un tema vasto y complicado, y a veces puede ser difícil mantenerse al día con las últimas tendencias y desarrollos. Además, sé que muchas veces mis artículos pueden ser leídos por un público limitado, lo que puede hacer que me sienta como si estuviera hablando en el vacío.

Pero a pesar de todas estas dificultades, sigo escribiendo sobre seguridad informática todos los días. Lo hago porque sé que la seguridad de nuestros dispositivos y datos es cada vez más importante en un mundo cada vez más conectado. A medida que dependemos cada vez más de la tecnología en nuestras vidas cotidianas, es crucial que nos aseguremos de que nuestros dispositivos y datos estén protegidos contra los ciberataques y otras amenazas.

A veces, cuando me siento abrumado por la tarea de escribir sobre seguridad informática todos los días, me recuerdo a mí mismo por qué lo hago. Escribo porque sé que lo que estoy haciendo tiene un propósito importante y puede ayudar a las personas a protegerse a sí mismas y a sus seres queridos en un mundo cada vez más peligroso. A pesar de las dificultades, sigo adelante porque sé que lo que estoy haciendo tiene un valor real."

No ha estado mal, pero creo que se puede mejorar, así que le he dado una nueva oportunidad, y le he pedido que lo vuelva a intentar. 

"Try Again."

"Ser un escritor puede ser un trabajo solitario y a veces difícil. Pero para aquellos que escriben sobre temas técnicos como la seguridad informática, el desafío puede ser aún mayor. La seguridad informática es un tema complejo y cambiante, y mantenerse al día con las últimas tendencias y desarrollos puede ser un desafío constante.

Pero lo más difícil de escribir sobre seguridad informática día tras día es encontrar una manera de hacerlo interesante y accesible para el público general. La seguridad informática puede ser un tema abrumador para aquellos que no tienen un conocimiento técnico profundo, y encontrar una manera de presentar la información de manera clara y concisa puede ser un desafío.

Además, la seguridad informática es un tema que a menudo se relaciona con noticias negativas, como brechas de seguridad y ciberataques. Hablar sobre estos temas de manera sensata y equilibrada puede ser difícil, y puede requerir una gran cantidad de investigación y análisis para asegurarse de que se está presentando la información de manera precisa y completa.

Pero a pesar de todos estos desafíos, los escritores que se dedican a la seguridad informática continúan trabajando día tras día para informar y educar al público sobre este importante tema. Hacen un trabajo valioso al ayudar a las personas a protegerse a sí mismas y a sus dispositivos contra amenazas cibernéticas, y su trabajo es vital para mantener a las personas seguras en un mundo cada vez más conectado.

En resumen, escribir sobre seguridad informática puede ser un desafío, pero es un trabajo importante y valioso que ayuda a mantener a las personas seguras en un mundo cada vez más digital. A pesar de los desafíos, los escritores que se dedican a este tema continúan trabajando día tras día para informar y educar al público sobre la importancia de la seguridad informática."

Y ahora el toque final, vamos a ponernos un punto de mártir en la redacción, así que le voy a pedir que el texto tenga empatía con alguno de nuestros problemas.

"Añade un párrafo en el que expliques que, además, para hacer las pruebas de las vulnerabilidades se arriesga uno a cometer un delito solo por contar mejor cómo funciona el problema."

"Además de todos los desafíos mencionados anteriormente, los escritores de seguridad informática a menudo se enfrentan a la difícil tarea de hacer pruebas de vulnerabilidades para demostrar cómo funcionan los problemas de seguridad. Esto puede ser arriesgado, ya que en algunos casos puede ser considerado un delito simplemente por hacer las pruebas.

Esto plantea un dilema moral para los escritores, ya que quieren informar y educar al público sobre los problemas de seguridad, pero al mismo tiempo no quieren cometer un delito. Esto puede ser aún más complicado cuando se trata de vulnerabilidades críticas que pueden afectar a miles o incluso millones de personas, y que requieren pruebas para ser comprendidas completamente.

En estos casos, los escritores de seguridad informática a menudo tienen que tomar decisiones difíciles y trabajar de cerca con las autoridades para asegurarse de que sus pruebas se realizan de manera segura y legal. Aunque puede ser un desafío, estos escritores siguen adelante en su labor de informar y educar al público sobre la importancia de la seguridad informática."

No he tocado ni una coma de su texto, y sinceramente creo que, si le cambio cuatro cosas, hubiera pasado por un posible artículo de esos que escribo yo de cuando en cuando sobre cosas personales de mi vida. Eso sí, os prometo que para escribir "La página en blanco" invertí más de dos horas.  Pero si le tiro de la lengua, le busco las cosquillas, y le pido que afine algunos párrafos, me hace uno que vaya que vaya. Así que, a partir de ahora, cuando leamos las cosas, vamos a ver si empatizamos con una persona que está detrás, o un algoritmo de Inteligencia Artificial que genera textos.

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


jueves, febrero 20, 2020

Skillpipe: Un CVE sobre cómo eliminar las marcas de agua

Desde tiempos remotos, la escritura ha sido un medio de comunicación útil para plasmar aquello que el individuo ha querido reflejar en determinados instantes del tiempo. Memorias, palabras con significado emotivo, invenciones y/o cosas que pueden no ser absorbidas por la mente durante cierta prolongación, por temor a que queden en un olvido finito o, por resultar en la pérdida de ideas que devastan su guion principal.

Figura 1: Skillpipe Un CVE sobre cómo eliminar las marcas de agua

Pero… ¿quién ha escrito que? Los hay que carecen de dueños, otros son firmados bajo pseudónimos, algunos son robados, etcétera. Para cerciorarse, técnicas esteganográficas aparecieron para lidiar con aquel control de autor, como vimos incluso en el mundo de los vídeo juegos robados de mala manera como nos contaban Fran Ramírez y Rafael Troncoso con el caso del código morse escondido por Atari para detectar copias piratas. Por supuesto, la esteganografía, y el estegonálisis son a día de hoy una disciplina del mundo del hacking ampliamente estudiada.

Figura 2: Libro de Esteganografía y Estegoanálisis

Proteger la propiedad intelectual de algo se lo conoce más cómo copyright, y protege los derechos intelectuales de un documento o de la persona que los posee por creación o por adquisición. En este artículo, nos centraremos en la marca de agua digital que genera Skillpipe, la plataforma que usa Microsoft para publicar sus cursos oficiales (MOC).

Docuemtación de MOCs con marcas de agua

Asistimos presencialmente a un centro autorizado para certificarnos de algún que otro MOC. Todo el material era electrónico y para poder leer la documentación asignada, solo podías hacerlo a través de Skillpipe. La herramienta empezó operando en modo: web, en formato app de smartphone y aplicación de escritorio. Posteriormente se anunció el fin de soporte para solamente usarse el modo web.

Empezamos a interactuar con el lector y nuestros deseos contemplaban ya la posibilidad de acceder de forma offline. Le preguntamos al formador por la mejor opción para lograr esa función. Se nos comentó que si bien era una opción alternativa, conllevaba algunos inconvenientes:
1. Deja marca de agua. 
2. Solo permite su impresión por módulos o capítulos.
El inconveniente de la marca de agua no nos parecía mal, siempre y cuando no se interponga en zonas que dificulten la lectura. Pero cuando probamos de imprimir a PDF, vimos que no podíamos seleccionar parte del texto. Como si hubiese una mezcla multimedia de foto en el elemento del copyright y esa fue nuestra primera preocupación. Siempre puede ir bien copiar alguna sección para apuntes de frases/palabras importantes y hacer el mítico “Copy & Paste”. Nos fijamos también que el documento pesaba bastante por ser un PDF, pero no le dimos demasiada importancia por ese entonces.

Figura 3: Comparación seleccionando todo el texto con y sin marca de agua

Sobre el punto 2 mencionado anteriormente la realidad es que puede ser molesto, pero solo hay que hacerlo una vez. No todo puede automatizarse o igual no merece su esfuerzo para un solo uso. Entonces aparecieron nuestras primeras preguntas para el formador:
- ¿No se puede hacer nada para que la marca de agua desaparezca o que me permita coger todo el texto bajo su formato en PDF? 
- No, no se puede…
El formador nos comprendía y nosotros no nos dimos por vencidos, así que indagamos, probamos, volver a probar y ver cómo podíamos encajar “las piezas” para darle otra forma a la situación. Después de juguetear, encontramos una manera de solventar nuestras inquietudes.

El siguiente vídeo data del año 2017 y muestra cómo poner el documento “a dieta” mediante eliminación de un nodo en código HTML. Al ser un método antiguo, es ya obsoleto y la parte de código a eliminar en la actualidad es distinto, esa parte la veremos después con “más pelos y señales acuáticas”.

Figura 4: SkillPipe - Eliminar Marca de Agua (Lector de Cursos usado por Microsoft)

Tras la visualización del vídeo, se puede observar cómo, haciendo uso de las Developer Tools del navegador -  Mozilla Firefox en este caso -, se elimina fácilmente el nodo <div class="”print_watermark_wrapper”"> , luego se imprime y… happy reading!

Notificando la Vulnerabilidad

Decidimos notificarlo mediante el soporte oficial, el cual se compone de un formulario en el que tienes que detallar lo que hayas descubierto. Como podéis ver en el mensaje de respuesta, nos dijeron que tomaban nota de nuestras preocupaciones y que no se contemplaba un cambio a corto plazo, pero fuimos invitados a participar en una encuesta. Dicho así ¿a quién no lo apetece hacer una?.

Figura 5: Respuesta de Microsoft Courseware Fulfillment Center

Claro está que la respuesta no nos convenció, por lo que decidimos insistir y notificar a Microsoft, al MSRC. Tuvimos una rápida respuesta que nos sometió a un bucle vicioso ya que nos mandaron de nuevo al soporte de Skillpipe.

La nueva Web App

En su versión 3.0 de la Web Reader (no recuerdo si la anterior era la 2), parece que los desarrolladores sí han hecho cosas para hacer que la marca no sea tan intrusiva, pero igual de fácil nos lo ponen para deshacernos de ella. Una gran diferencia, es la repetición de la misma, tres veces en lugar de seis por página.

Figura 6: Funcionalidad de impresión en Google Chrome

Otra diferencia, es la falta de la generación de una nueva pestaña a la hora de imprimir. Veamos cómo hacerlo en detalle para esta versión actual.

Quitando el agua a la marca para su secado
1. Accedemos a la plataforma www.skillpipe.com con nuestra cuenta autorizada. 
2. Escoger el curso que se quiere mantener offline. 
3. Escoger un módulo (recordad que solo podremos imprimir módulo a módulo si se quiere tener todo el libro entero). 
4. Abrimos las DevTools (para esta PoC usamos Chrome) con F12 y buscamos por el nodo #watermark. Luego, botón derecho – Delete element tal y como muestra la siguiente figura.
Figura 7: Chrome - DevTools - Eliminando el nodo de la marca de agua
5. Podemos cerrar la ventana de las DevTools. Imprimimos con la función que ofrece la plataforma, el botón se sitúa abajo – izquierda. Una cortina se expande, pulsar al único botón de imprimir de la sub-ventana para invocar el asistente de impresión del propio navegador.
Figura 8: Chrome - Print Wizzard - La marca de agua se ha ido

Hecho. El documento quedará ahora… ¡”limpio de todo pecado”!

¡Bonus Track!

Es un poco tedioso el estar repitiendo el proceso de borrado del código HTML cada vez que se quiere extraer un módulo a PDF, por eso decidimos buscar un método “Semi-Automático” que nos ayudara con esa tarea. No queríamos reinventar la rueda, siempre procuramos buscar antes por algo que exista, y pensamos en un acople rápido, es decir un add-on/extensión. Son fáciles de instalar, gratuitos en su mayoría y muy versátiles.

Entre varios de esos “cromos” añadimos a nuestra “colecciónAdblock Plus (ABP), utilizado mayormente para bloquear anuncios. No solo anuncios, también es capaz de bloquear, puedes personalizar tus filtros para atacar a otras partes de la web. Tras instalar la extensión, abrimos su configuración. Advanced – En MY FILTER LIST escribimos el siguiente filtro: skillpipe.com###watermark y lo añadimos con el botón + ADD

Figura 9: Abriendo la extensión ABP en Chrome

El filtro empleado, atacaría solo al web/dominio skillpipe.com. Las tres almohadillas (###) referencian al ID a ocultar, cuyo nombre es watermark en este caso. Con esto evitaríamos el paso 4 que vimos en el modo manual y ya no sería necesario hacer nada más, el nodo watermark seguirá vivo en el código sin sufrir alteración alguna.
Nota: Sí lo configuras antes de abrir un curso, no hará falta que refresques la página (para la activación del filtro).
Cuando sacamos algo a la luz, para dejar evidencias irrefutables, solemos documentar con un White Paper en inglés, hacer un vídeo y luchar por obtener un CVE ID.


Aquí podréis ver el vídeo en English (y subs 😉) incluidos ambos modos: El manual y el Semi-Automático (agradecimientos a Esther Martínez, la asistente de producción, hace que los vídeos salgan más pulidos):

Figura 11: Skillpipe - Remove the Watermark (Course Reader used by Microsoft)
using Ad Blocking [CVE-2020-9013]

Y por último el CVE se nos fue otorgado, que como veis tiene el CVE-2020-9013, así que todo realizado en forma y plazo.

Reflexiones Finales

Se ha demostrado que la marca de agua en contenido digital sigue siendo frágil y careciente de robustez. Nuestra principal intención no era infringir el copyright, sólo queríamos poder leer, disfrutar de nuestro contenido de una manera cómoda y confortable, sin forzar la vista ya que, las distorsiones generadas en su vertical no ayudan mucho al reposo de nuestros ojos. Probablemente no hubiéramos tenido la tentación de eliminar la marca de agua si ésta hubiera tenido características tales como: Ser imperceptible y no degradar el objeto que pretende proteger.

Usamos PDF Creator en la versión anterior de la Web App para la conversión del documento, pero tras probar el conversor PDF incorporado en Google Chrome, la marca de agua ya no molestaba tanto… Ni tampoco generaba extra de peso ¿significa eso de que PDF Creator es un mal software? No nos gusta quedarnos con ese “mal sabor de boca”, así implementamos la siguiente tabla proveniente de una batería de pruebas (el tamaño fue medido en bytes).

Figura 12: Tabla de tamaños de PDF

Quisimos saber si el comportamiento venía dado por el software “fabricante” de PDFs o si era cosa del navegador. Nótese en las pruebas, que el claro vencedor es Chrome, pero los mejores resultados en versión de sin marca de agua, son haciendo uso de Firefox en combinación de PDF Creator. Así despejamos la incógnita, la sinergia perfecta fue encontrada cómo en un ensayo de laboratorio.

Y ya, para despedirse, dejamos algunas preguntas al aire: ¿Es el PDF un formato inmaduro para tolerar marcas de agua digitales robustas? ¿Es la marca de agua un mecanismo útil para proteger documentos digitales? Este post (como el resto) residirá en su origen, mientras sea intocable frente a agentes externos maliciosos y se siga velando por el servicio del blog, la integridad quedará bien saldada.

Remember… Be Good, Be Hackers!

Autor: Gerard Fuguet (Contactar con Gerard Fuguet)


Entrada destacada

+300 referencias a papers, posts y talks de Hacking & Security con Inteligencia Artificial

Hace un mes comencé a recuperar en un post mi interés en los últimos años, donde he publicado muchos artículos en este blog , y he dejado mu...

Entradas populares