Hackeamos GitHub durante un mes

Feb 11 2023
Introducción Después de un largo paréntesis, volvemos con un nuevo artículo. Aunque normalmente no participamos en programas de recompensas por errores debido a otros compromisos, asumimos el desafío de piratear GitHub durante un mes y estamos emocionados de compartir nuestros hallazgos.

Introducción

Después de un largo paréntesis, volvemos con un nuevo reportaje. Aunque normalmente no participamos en programas de recompensas por errores debido a otros compromisos, asumimos el desafío de piratear GitHub durante un mes y estamos emocionados de compartir nuestros hallazgos. Todo comenzó cuando Shivam Singh (el Sr. Rajput Hacker) se acercó a mí en noviembre y me animó a probar la recompensa por errores. Decidimos centrarnos en npmjs.com, una subsidiaria de GitHub. A pesar de que GitHub es una gran corporación y el programa de recompensas por errores era público en HackerOne, sentimos que valía la pena intentarlo.

Reconocimiento

En nuestra búsqueda de encontrar vulnerabilidades en npmjs.com, Th3Pr0xyB0y (Vansh Devgan) y Mr Rajput Hacker (Shivam Singh) comenzaron realizando una operación de reconocimiento. Utilizamos nuestro producto interno, X (parte de la suite CyberXplore), para recopilar la mayor cantidad de información posible, incluidas direcciones IP, puertos abiertos, capturas de pantalla y puntos finales. Con el poder de la computación en la nube, el proceso de reconocimiento fue rápido y eficiente.

Sin embargo, al revisar la información recopilada, encontramos que había un alcance limitado para atacar el objetivo, npmjs.com y npmjs.org. Nuestro producto interno, X , hizo que el proceso de reconocimiento fuera pan comido y nos complace anunciar que la versión beta privada estará disponible pronto para el público en general .

Centrándose en la lógica empresarial

El Sr. Rajput Hacker y yo decidimos centrarnos únicamente en los errores de lógica empresarial en la aplicación. Antes de comenzar nuestra búsqueda, nos aseguramos de entender completamente la aplicación. Esto implicó un uso mínimo de Burp Suite y un enfoque en la comprensión de la funcionalidad y los procesos centrales de la aplicación. Nuestro objetivo era encontrar cualquier debilidad en la lógica empresarial que pudiera explotarse. Al limitar nuestro conjunto de herramientas y centrarnos en comprender la aplicación, nuestro objetivo era descubrir vulnerabilidades únicas o pasadas por alto. Como npmjs.com era una aplicación relativamente pequeña, nuestra comprensión y nuestras notas nos llevaron menos de dos horas.

Vulnerabilidades descubiertas

Aunque mencionamos que se informaron 9 vulnerabilidades, hoy escribiremos sobre 3 de ellas aquí, que se detallan a continuación:

  1. Omisión de verificación de inicio de sesión en npmjs.com
  2. Adquisición previa a la cuenta en npmjs.com
  3. Problema de control de acceso en education.github.com

Descripción -

Mientras revisaba la parte de autenticación de npmjs.com y las funcionalidades comunes, como la actualización de la dirección de correo electrónico y las funcionalidades de actualización del perfil, descubrimos un comportamiento extraño sobre una aplicación que nos llamó la atención, que era el formato del enlace de verificación de correo electrónico, el enlace de restablecimiento de contraseña y el enlace enviado. para actualizar la dirección de correo electrónico.

El enlace se formateó como https://npmjs.com/verify/{some_random_token_here} para todas las funcionalidades, ya sea el restablecimiento de contraseña, el enlace de verificación de correo electrónico o cualquier enlace XYZ en este sitio para cualquier propósito. A continuación, observamos que cada vez que inicia sesión en la aplicación, envía un código de verificación a su dirección de correo electrónico registrada y debe ingresarlo como parte de la función de verificación de inicio de sesión (una especie de código 2FA/MFA en el correo electrónico) para iniciar sesión correctamente en la cuenta. . Luego, intentamos omitir esta funcionalidad y logramos omitirla, ya que usamos una aplicación por completo en las últimas 2 horas. Conocíamos cada funcionalidad, por lo que pudimos relacionarnos y obtuvimos la omisión. lo hizo.

Durante nuestro examen del proceso de autenticación y las funcionalidades comunes de npmjs.com, como la actualización de direcciones de correo electrónico y perfiles, descubrimos un comportamiento peculiar en el formato de los enlaces de verificación de correo electrónico, pegar GitHub pirateado durante un mes: esto es lo que encontramos, restablecer enlaces, y enlaces enviados para actualizar las direcciones de correo electrónico. Estos enlaces se formatearon como https://npmjs.com/verify/{random_token} y se usaron para todas las funcionalidades, incluido el restablecimiento de contraseña, la verificación de correo electrónico y otras.

También notamos que cada vez que un usuario iniciaba sesión en la aplicación, se enviaba un código de verificación a la dirección de correo electrónico registrada. Este código de verificación era necesario para completar el proceso de inicio de sesión y actuaba como una forma de autenticación de dos factores. Lo segundo que notamos Al actualizar una dirección de correo electrónico en npmjs, el proceso de actualización ocurriría sin requerir una confirmación de contraseña. Se enviaría un correo electrónico tanto a la dirección de correo electrónico antigua como a la nueva. El correo electrónico enviado a la dirección anterior informaría al destinatario que si no realizó el cambio, puede hacer clic en un enlace (https://npmjs.com/verify/{some_random_token_here}) para revertir el cambio y hacer su dirección anterior. el actual El correo electrónico enviado a la nueva dirección contendría un enlace para verificar el nuevo correo electrónico y vincularlo a la cuenta que se acaba de actualizar.

Encontramos un problema sorprendente al intentar iniciar sesión en una cuenta después de actualizar la dirección de correo electrónico en la página de perfil. A pesar de no haber confirmado o hecho clic en ningún enlace en el correo electrónico antiguo o nuevo, el sistema mostró un mensaje que indicaba que se había enviado un código de verificación a la nueva dirección no verificada. Esto parecía sugerir que no podríamos iniciar sesión. Sin embargo, luego de una inspección más cercana, descubrimos un correo electrónico enviado a nuestra dirección anterior, que nos pedía que revirtiéramos el cambio para evitar el bloqueo de la cuenta. Al hacer clic en el enlace provisto ( https://npmjs.com/verify/{random_token}) para revertir el correo electrónico, fuimos dirigidos a la página de inicio de sesión. Para nuestra sorpresa, cuando ingresamos nuestras credenciales, el sistema no solicitó el código de verificación y, en cambio, nos permitió iniciar sesión y revertir el cambio de correo electrónico.

Sin embargo, luego de una mayor investigación, pudimos omitir con éxito esta funcionalidad. Nuestro profundo conocimiento de la aplicación, obtenido al pasar dos horas familiarizándonos con sus características, nos permitió relacionar diferentes funcionalidades y encontrar el bypass. Los pasos para reproducir el bypass se pueden encontrar a continuación.

Haga clic aquí o visitehttps://blog.cyberxplore.com/we-hacked-github-for-a-month-heres-what-we-found/Para leer el blog completo completo publicado en CyberXplore Blog .

No se olvide de seguir a nuestros investigadores de seguridad:

Gracias a todos por leer. No olviden dejar un aplauso si les gusta.

Síganos -

Twitter → @MrRajputHacker @ Th3Pr0xyB0y

Instagram → @MrRajputHacker @vanshdevgan

Linkedin → MrRajputHacker @ th3pr0xyb0y

Medio → @mrrajputhacker @ th3pr0xyb0y