Skip to content

DoS via payload in git config --global user.name

HackerOne report #987689 by stanlyoncm on 2020-09-21, assigned to @dcouture:

Report | Attachments | How To Reproduce

NOTE: The report was sent in Spanish. TL;DR is that a commit from a user with a really long name makes the /-/branches page unreachable. If the commit is pushed directly to master it breaks the entire repository. See the How To Reproduce section below.

Report

==Report in Spanish:==

Summary

Un atacante miembro de un proyecto, podría causar una denegación de servicio en la rama del proyecto en gitlab.com al realizar un cometer desde el emulador de terminal por medio del comando git, el atacante, es capaz de realizar este ataque al colocar una carga útil en el valor de nombre en git config --global user.name

El impacto del DoS depende de los permisos que tenga el atacante dentro del proyecto a mayor permiso, mayor será el impacto del ataque.

Un atacante con permisos de Mantenedor podrá causar el DoS en la rama maestra del proyecto, afectando las ramas de nivel inferior al no poder acceder a /branches (notara esto en el video de domostracion).

Un atacante con permisos de Desarrollo podrá causar el DoS en gitlab.com en cualquier rama que no sea maestra, esto ya que no puede hacer push sobre el origin/master
 

Steps to reproduce

[Preparacion]

Para este proyecto y la demostración en video, se realizo el ataque en la rama maestra del proyecto, por lo que deberá invitar a un miembro con permisos de Mantenedor

__1)__Cree un nuevo proyecto y agregue un nuevo miembro con permisos de mantenedor.
 

[Flujo del ataque] (miembro invitado con permisos de mantenedor)

__1)__Desde el emulador de terminal establezca su nombre de usuario y correo electrónico.

__2)__Clone el proyecto.

__3)__Realice una confirmación de prueba (opcional).

__4)__Coloque el archivo name.txt (adjunto:name.txt) un nivel por debajo del proyecto que acaba de clonar.

__5)__Utilice el siguiente comando para agregar el valor name.txt al nombre de usuario: name=$(cat ../name.txt) && git config --global user.name "$name"

__6)__Ahora realice algún cambio en el proyecto y realice un comiter con el nuevo nombre de usuario.

__7)__Haga git push sobre la rama maestra.

Ahora cualquier persona que visite la pagina principal del proyecto en gitlab.com, se encontrara con la ruta 404 indicando que la pagina no se encuentra, si accede a https://gitlab.com/user/project/-/branches se encontrara con la ruta 503 indicando que gitlab no esta disponible.
 

What is the current bug behavior?

Denegación de servicio al acceder al proyecto a través de gitlab.com, a través de de una carga útil colocada en el nombre de usuario
 

What is the expected correct behavior?

El proyecto debería ser accesible a través de gitlab.com tras cualquier confirmación o cometer de usuario.
 

Relevant logs and/or screenshots

404.png
503.png
 

Output of checks

This bug happens on GitLab.com
 

Poc

poc.mp4

Impact

Todos los usuarios no podrán acceder al proyecto o a las ramas a través de gitlab.com

Attachments

Warning: Attachments received through HackerOne, please exercise caution!

How To Reproduce

Please add reproducibility information to this section:

Clone a repository (victim) that you're a developer (attacker) on and run the following commands:

git checkout -b dostest
git config user.name "$(ruby -e 'puts "name" * 20000')"
echo test >> README.md
git add README.md
git commit -m dos  
git push --set-upstream origin dostest

At this point the /-/branches page is unreachable with 503.

If the repository enables developers to push to master (or if the maintainer does so) the entire repository becomes unavailable, even the settings pages.

Edited by Dominic Couture