2 puntos por GN⁺ 2024-01-27 | 1 comentarios | Compartir por WhatsApp

Descubrimiento de XSS en Chess.com

  • Mientras disfrutaba el ajedrez como pasatiempo y jugaba con la tecnología, descubrí una vulnerabilidad XSS en Chess.com.
  • Chess.com es el sitio de ajedrez más grande de internet, con más de 100 millones de miembros.

Resumen

  • A inicios de 2023 empecé a pasar mucho tiempo en Chess.com.
  • Hice que un amigo se registrara en el sitio y, usando la función de amigos, nos agregamos de inmediato.
  • Me dio curiosidad si sería posible agregar amigos automáticamente de una forma similar al gusano de MySpace.
  • Creé una cuenta nueva y revisé la pestaña de red en las herramientas de desarrollador para encontrar la URL de agregado automático de amigos.

Medio juego

  • Intenté hacer XSS usando el editor de texto enriquecido TinyMCE.
  • Usé un proxy de Burp para insertar código HTML directamente en la descripción de "About".
  • Revisé la configuración de TinyMCE y generé una carga útil de XSS usando la propiedad de estilo background-image.
  • Probé varios símbolos hasta encontrar una forma de ejecutar el XSS.
  • Finalmente desarrollé una manera de extraer cookies y objetos de JavaScript.

Final

  • Trabajé para ejecutar el XSS por completo.
  • Encontré un método nuevo que usaba el atributo srcset para permitir una sintaxis de JS más amplia.
  • Ejecuté directamente la carga útil de XSS usando codificación Base64.
  • El impacto era grande porque el editor TinyMCE se usaba en todo el sitio.

Análisis

  • La causa raíz de la vulnerabilidad es la función de re-subida de imágenes.
  • Es posible evadir la verificación de alojamiento de imágenes incluyendo el nombre de dominio de Chess.com.
  • El editor de texto enriquecido permite varios elementos HTML, por lo que es adecuado para lograr XSS.
  • TinyMCE estaba actualizado, pero faltaba la sanitización del HTML final.
  • Chess.com debe aplicar sanitización al HTML final que se muestra a los usuarios.

Opinión de GN⁺:

  1. Esta publicación de blog explica de forma interesante el proceso de descubrir y reportar una vulnerabilidad de seguridad que puede surgir en una plataforma en línea a gran escala como Chess.com.
  2. Las vulnerabilidades XSS pueden representar una amenaza grave para la seguridad de un sitio web, y encontrar y corregir estas fallas es muy importante para proteger la privacidad de los usuarios.
  3. Este artículo subraya para desarrolladores de software y profesionales de seguridad la importancia de reconocer las vulnerabilidades en componentes de aplicaciones web como los editores de texto enriquecido y de prevenirlas.

1 comentarios

 
GN⁺ 2024-01-27
Comentarios de Hacker News
  • Soy el OP. Muchas gracias por todos los comentarios positivos. Para dar un poco de contexto, soy un estudiante de 17 años en el Reino Unido preparándome para los A-Levels, y todavía estoy decidiendo a qué universidad ir y si tomar la opción de degree apprenticeship
    Pueden ver mi perfil de GitHub aquí -> https://github.com/Jayy001
    Soy uno de los miembros principales de HashPals, hice Search-That-Hash y también soy mantenedor principal de un repositorio de software libre y de código abierto para la tablet ReMarkable

    • Hice un degree apprenticeship en una empresa FAANG y, por suerte, me contrataron de tiempo completo ahí mismo. Varía mucho según la empresa, pero si ves solo las perspectivas laborales inmediatas, creo que un programa de aprendiz en una empresa reconocida ayuda mucho más que la universidad, salvo Oxbridge
      Si quieres platicarlo más, puedes contactarme; mi correo está en la descripción del perfil
    • Mi ReMarkable te lo va a agradecer. Vas muy bien, así que sigue así
      Y si te vas por IT, también conviene aprender negociación de contratos y finanzas
    • ¿Cuánto tiempo te tomó lograr el XSS?
    • Voy a intentar recomendarte en Meta. ¿Podrías enviar tu CV/correo, etc., a tehlike gmail com?
  • En la época en que toda mi experiencia en internet consistía en perder una y otra vez como “bibliotecario voluntario” en Chess.com, solía inyectar en partidas en vivo de Chess.com caracteres escapados de forma rara, etiquetas de cierre, cadenas de control comunes e incluso objetos OLE
    El fundador, Eric, me pidió amablemente una auditoría más formal, pero no quise aceptar porque no quería revelar que era un script kiddie de 11 años. En cambio, le expliqué las expresiones regulares necesarias para la censura del chat, y también abordamos juntos el problema más grande de cómo detectar trampas en un entorno asíncrono
    Después de pensarlo, dije que la única forma posible era comparar todas las jugadas importantes y de alto valor de una partida con las mejores jugadas conocidas por un motor, y usar inferencia estadística para distinguir entre humanos muy fuertes y tramposos
    Claro, en ese momento era una idea ridículamente imposible de implementar, y así quedó la conclusión. Aun así, es un buen recuerdo de internet que un niño recién salido de primaria pudiera discutir temas tan sutiles con un webmaster de verdad

    • ¿Por qué dices que era “la única forma posible”? Se me ocurren varias maneras de detectar trampas
  • La parte de “esta función me recordó al gusano de MySpace, como de 2005, ¡yo ni siquiera había nacido entonces!” me hizo sentir que envejezco cada día

    • Mi exesposa dirigió el equipo de seguridad de MySpace entre 2006 y más o menos 2008. La parte realmente pesada era entrar directamente a los foros de hackers de MySpace para ver cómo iba avanzando el trabajo del día
      La terquedad de querer permitir que los usuarios metieran HTML en el sitio era un problemón. Hoy parsearías bien la entrada HTML para eliminar atributos y etiquetas prohibidas, pero en ese entonces lo resolvían con pura locura de expresiones regulares
    • Mi primer pensamiento fue algo más como “qué bueno ver que la chaviza de hoy hace estas cosas”, pero luego saqué la cuenta de la edad y me pegó duro mentalmente
    • Espera, esta persona ni siquiera tiene 20 años
  • No sé si esté relacionado, pero yo vi directamente, e incluso grabé, casos en los que otra gente hacía mis jugadas en partidas de Chess.com. También me pasó que una partida en curso me aparecía a mí y podía hacer una jugada en una situación donde en teoría no debería haber podido
    Si buscas en Google, hay bastantes hilos al respecto. No sé si Chess.com lo haya arreglado en los últimos meses, pero cuando intenté reportarlo no quisieron escuchar
    Todo esto pasó sin haber iniciado sesión en el sitio. Nunca me ha pasado estando logueado, pero no juego ajedrez muy seguido porque no le hace bien a mi presión arterial

    • No estoy seguro de entender. Cuando dices “otra gente hacía mis jugadas”, ¿quieres decir que reemplazaban tus jugadas por las suyas en tu partida? ¿O que copiaban las jugadas de tu partida en la suya? ¿O significa otra cosa?
    • ¿Cómo sabes que ellos estaban haciendo tus jugadas?
    • ¿A qué te refieres exactamente con “mis jugadas”?
  • Solo por el título pensé que sería algo mucho más básico para principiantes, pero en realidad construyó un exploit que atravesaba de forma ingeniosa varias capas de validación de entrada con un bypass. Incluso configuró un subdominio para que pareciera el dominio base
    No esperaba que eso funcionara, y por sí solo ya me pareció interesante. Si piensas en lo complicado que es parsear dominios con expresiones regulares, se ve como algo fácil de pasar por alto. Aunque también pudo haber sido algo tan simple como revisar '...' dentro de una variable
    El autor sabe muy bien lo que hace. Impresiona pensar cuánto tiempo le dedicó a profundizar hasta alcanzar ese nivel técnico. Parece que va a tener una carrera muy interesante

    • Por algo que el autor menciona de pasada en el texto, nació después de 2005, así que eso lo hace aún más impresionante considerando lo joven que es
    • El primer exploit para agregar como amigo a quienes visitaban el perfil sí era, por lo menos, bastante simple, y el título es un juego de palabras. Pero el camino hasta el XSS completo luego se volvió muchísimo más complejo
  • Muy buen post, OP. Ojalá sigas avanzando bien en tu camino en el hacking. Por si aún no lo conoces, cuando en payloads como alert(1) los paréntesis son filtrados o codificados, puedes intentar usar backticks con alert\1``
    Si quieres subir un nivel en inyección de JavaScript, el XSS cheatsheet de Brute Logic y Javascript for Hackers de Gareth Heyes son muy buenos recursos. Algunas personas minimizan la cross-site scripting, pero sigue siendo muy poderosa y está por todos lados. Especialmente, como señaló plugin-baby, si las cookies de sesión no tienen HttpOnly

  • Está padrísimo. Me encanta leer análisis de bug bounty, especialmente de XSS. Siempre parece fácil de encontrar, pero eso es puro sesgo de confirmación, y en realidad yo no veo todo el tiempo que se fue en pruebas sin resultado y callejones sin salida

    • En mi experiencia, normalmente llegas a eso después de encontrar por accidente algo raro. La parte realmente difícil es volver explotable ese defecto, y en este caso el objetivo fue el editor de texto
  • La parte de “esta función me recordó al gusano de MySpace, como de 2005, ¡yo ni siquiera había nacido entonces!” me hizo sentir viejo al instante

    • No te preocupes demasiado. Se pone peor
      Lo que me gustaría preguntarle al OP sobre esto es cómo se enteró del tema. ¿Fue por Darknet Diaries o por algún otro camino?
  • Me dio risa la parte donde llamó al editor de texto enriquecido el “santo grial”. Chess.com es un sitio grande, pero cada vez que veo ese tipo de editores o funciones demasiado recargadas en lugares como foros viejos, no puedo evitar pensar si el sitio no estará lleno de agujeros. En cualquier caso, gran post

  • La parte de “durante el reporte y revisión del bug bounty, cuando intenté reproducirlo otra vez los desarrolladores intentaron implementar un bloqueo y apareció el siguiente mensaje de error…” parece bastante alejada del espíritu de un programa de bug bounty