En una de mis aplicaciones web, accidentalmente dejé el directorio .git legible por el servidor web durante las últimas semanas. El listado de índice fue deshabilitado. Visitar la URL del sitio web.com/.git daría lugar a un error 404 que no se puede distinguir de ningún otro error 404, pero navegar a sitio web.com/.git/config, por ejemplo, descargaría el archivo.
¿Qué tipo de riesgos existen con mis aplicaciones? ¿Es posible que exista suficiente información de que alguien podría haber descargado el código fuente de la aplicación completa?
git clone http://website.com/.git
? Ese es el mayor riesgo (poder clonar el repositorio completo).Respuestas:
Sí, es posible descargar todo el contenido del repositorio (incluido el historial); una simple acción
git clone
sería suficiente. Sin embargo, esto supone que alguien sabía sobre la existencia de ese.git
directorio ... es más probable que nadie lo haya notado. Siempre puede verificar los registros de su servidor web para estar seguro.fuente
curl $URL/.git/config
todo el día por cada url que ven ... :)refs
ypacked-refs
.Un simple
git clone
en la raíz del documento no es del todo exacto. La clonación de un repositorio GIT expuesto no es posible con servidores " tontos ", como una exposición accidental de .git a través de HTTP, a menos quegit update-server-info
se ejecute en el servidor. Si bien algunos de los metadatos están disponibles,.git/objects
no siempre es posible obtener el contenido del directorio (también conocido como material jugoso). Es posible recuperar objetos que no están empaquetados . No debería ser el caso con una copia de trabajo / repositorio en un servidor de producción.Es una historia diferente para una máquina de desarrollo con cambios comprometidos que no se envían a un control remoto. En este caso, generalmente no se llama al recolector de basura, a menos que invoque
git gc
, por lo tanto, los archivos aún no forman parte de los archivos de paquete. Puede recuperar a través de HTTP los archivos comprometidos desde el último envío.update-server-info básicamente crea un mapa de las referencias (.git / info / refs) y de los paquetes (.git / objects / info / packs). Si bien se pueden usar .git / package -refs para sustituir el primero, no es posible obtener los archivos de paquete sin tener habilitado el índice de directorio o SHA-1 de fuerza bruta (que es una mala idea desde el principio).
fuente