291 Intercept: Los sondeos en busca de repositorios Git expuestos se duplicaron con creces en nuestra infraestructura
En la semana del 19 de octubre, el número de orígenes que sondearon nuestra infraestructura expuesta a internet en busca de repositorios de código fuente olvidados aumentó un 137% respecto a la media semanal de las dos semanas anteriores. También detectamos más escáneres que buscaban archivos .env en subcarpetas, archivos de claves de la nube y copias de seguridad.
Presentamos 291 Intercept
291 Intercept es una nueva serie semanal de 291 Group. Como cualquier organización con presencia en internet, nuestra infraestructura expuesta a internet recibe a diario sondeos de escáneres automatizados que buscan puertas abiertas: archivos de contraseñas expuestos, copias de seguridad olvidadas, páginas de administración sin parchear. Cada entrega recoge lo que esos escáneres buscaron en nuestra propia infraestructura durante una semana, para que otros administradores de sistemas y empresas puedan revisar si sus sistemas tienen esos mismos problemas.
Cada entrega incluye los patrones que destacaron en nuestra infraestructura y cómo cambiaron respecto a la semana anterior, de dónde procedía el tráfico y una breve lista de aspectos que conviene revisar en los servidores propios. Todos los datos son agregados. Nunca identificamos direcciones ni sistemas concretos, y solo incluimos patrones observados desde muchos orígenes distintos. Cada entrega cubre una semana que terminó al menos siete días antes de su publicación.
Del 19 al 25 de octubre, unos 240 orígenes sondearon nuestra infraestructura expuesta a internet en busca de repositorios de código fuente olvidados en servidores web. Son un 137% más que la media semanal de las dos semanas anteriores. Solicitaron archivos como /.git/config, /.git/index y /.svn/entries. En nuestra infraestructura, esta semana solo WordPress atrajo más escáneres que el código fuente.
Al mismo tiempo aumentaron otras búsquedas relacionadas contra nuestros sitios. Los orígenes que buscaban archivos de claves de la nube subieron un 51%, y los que pedían copias de seguridad y volcados de bases de datos, un 75%. También vimos escáneres apuntar a un grupo de archivos .env en subcarpetas que antes despertaban mucho menos interés. Ninguno de estos objetivos es un fallo de software. Todos son archivos que alguien olvidó retirar de un servidor público.
La semana en resumen
Observamos unos 660 orígenes distintos, un 28% más que en el mismo periodo de referencia. Los inicios de sesión, XML-RPC y las rutas de plugins de WordPress fueron lo más buscado, por un 56% de los orígenes. Los archivos de secretos y de configuración atrajeron al 32%. Los orígenes que buscaban páginas de diagnóstico como /info.php aumentaron un 33%, y los que sondeaban componentes internos de aplicaciones como /actuator/env, un 37%.
De los orígenes que nos alcanzaron, el 88% usaba cadenas de user agent que se hacen pasar por navegadores comunes, y el 64% procedía de servidores alquilados. Los países más frecuentes fueron Estados Unidos, Alemania, Países Bajos, Singapur e India.
Cómo una carpeta .git expuesta delata a un sitio
La mayoría de los equipos de desarrollo controlan los cambios en su código con Git, y cada proyecto Git guarda su historial en una carpeta oculta .git. Si un sitio se publica copiando toda la carpeta del proyecto al servidor web, esa carpeta oculta también puede acabar copiada, y cualquiera que solicite sus archivos podrá leerlos.
/.git/config fue una de las rutas de código fuente más solicitadas contra nuestra infraestructura expuesta a internet. Ese archivo indica el repositorio del que procede el código y, a veces, contiene las credenciales usadas para desplegarlo. Los escáneres también nos pidieron /.git/head, /.git/logs/head y /.git/index, que permitirían saber si una parte suficiente de la carpeta es legible como para ir más allá. Cuando la carpeta está expuesta, los atacantes a veces pueden reconstruir el código fuente completo y el historial de commits.
Es un error habitual. Un estudio publicado en febrero de 2026 detectó unos 4.96 millones de servidores web públicos que exponían metadatos de Git. En 252,733 de ellos, el archivo de configuración contenía credenciales de despliegue, lo que, según advierte el mismo informe, puede conducir a la toma de control de repositorios y a ataques a la cadena de suministro.
Secretos en carpetas inesperadas
Los escáneres pidieron a nuestros sitios /.env en la raíz, pero esta semana muchos buscaron también en subcarpetas. /mailer/.env atrajo a 40 orígenes, 7.8 veces su media anterior. /live/.env, /mail/.env, /v3/.env, /sitemaps/.env, /releases/.env y /exapi/.env atrajeron a 40 orígenes cada una, aproximadamente entre seis y siete veces sus medias anteriores. Cuatro rutas nos llegaron por primera vez, cada una desde unos 10 orígenes: /core/database/.env, /.changeset/config.json, /secrets y /settings/credentials.
Para un atacante, estos archivos merecen el esfuerzo. Las aplicaciones web guardan en archivos .env claves de API, contraseñas de bases de datos y claves de acceso a la nube. Una investigación de abril de 2026 sobre un escáner masivo halló archivos .env robados a más de 900 empresas comprometidas, con más de 30,000 nombres de archivo .env distintos recopilados entre el 10 y el 21 de abril de 2026. Los secretos robados correspondían a servicios de IA, nube, pagos y mensajería.
Vimos el mismo patrón con las credenciales de la nube. /application_default_credentials.json atrajo a 40 orígenes, 6.2 veces su media anterior. Los escáneres también nos pidieron /service-account.json y /.config/gcloud/application_default_credentials.json. Este archivo se genera al iniciar sesión desde la línea de comandos de un proveedor de nube, y la propia documentación del proveedor indica que se almacena sin cifrar y permite a quien lo tenga solicitar tokens de acceso de forma indefinida. Si una copia acaba en la raíz web, el atacante que la encuentre conservará el acceso hasta que se revoque.
Un solo barrido, muchos objetivos
Varios grupos coordinados de orígenes lanzaron las mismas listas contra nuestra infraestructura expuesta a internet. En uno de ellos, 20 orígenes de 7 países solicitaron las mismas 8 rutas, entre ellas /.git/config, /.env, /info.php, /config.json, /actuator/env y /server-status. La mayoría empezó con menos de 60 horas de diferencia. Dos grupos más pequeños, de unos 10 orígenes cada uno, usaron listas mucho más largas, de 210 y 158 rutas. Ambas incluían /.git/config, variantes de .env como /.env.old y /.env.development, y archivos de claves de la nube.
La ruta /actuator/env pertenece a la misma familia. Cuando el endpoint de Spring Boot Actuator de una aplicación Java es accesible sin autenticación, devuelve las variables de entorno y la configuración de la aplicación, que pueden incluir credenciales de bases de datos y claves de la nube. Las páginas phpinfo olvidadas también pueden revelar variables de entorno, y en nuestra infraestructura /admin/phpinfo.php subió a 5.9 veces su media anterior. En un caso real, un plugin de WordPress incluía un phpinfo.php que cualquiera podía abrir.
WordPress tuvo su propia campaña contra nuestros sitios: 20 orígenes de 7 países solicitaron /xmlrpc.php junto con copias de wlwmanifest.xml en carpetas adivinadas como /blog/wp-includes/wlwmanifest.xml y /wordpress/wp-includes/wlwmanifest.xml. Pedir el mismo archivo bajo muchos nombres de carpeta es una forma rápida de averiguar si un sitio usa WordPress y en qué ruta. A través de XML-RPC, un atacante puede probar cientos o miles de contraseñas en una sola petición.
Qué hacer esta semana
- Verificar desde el exterior. Desde una red ajena, solicitar
/.git/configy/.enven cada uno de los sitios. Si alguno devuelve contenido real, hay que dar por hecho que alguien ya lo ha leído. - Desplegar compilaciones, no carpetas de trabajo. Publicar solo los archivos que el sitio necesita y bloquear el acceso web a .git, .env y demás archivos ocultos.
- Rotar todo lo que se haya filtrado. Si los archivos .git o .env eran legibles, cambiar las credenciales y claves que contenían. Eliminar el archivo no deshace la copia que alguien ya haya hecho.
- Mantener los secretos fuera de la raíz web. Guardar los archivos .env y de credenciales de la nube fuera de cualquier carpeta publicada. Si un archivo de credenciales llegó a estar expuesto, revocarlo.
- Eliminar restos. Borrar copias de seguridad como
/wp-config.php.baky/database.sql, y retirar las páginas phpinfo y de depuración. - Cerrar los endpoints de administración. Proteger los endpoints de Actuator con autenticación y desactivar XML-RPC en los sitios WordPress que no lo usen.
Sobre estas observaciones
Este informe lo elabora 291 Heat Seeker One, el sistema de monitoreo de seguridad de 291 Group, que funciona sobre 291 Crossband, nuestra plataforma propia de operaciones de seguridad. Solo abarca el tráfico dirigido a la infraestructura de 291 Group expuesta a Internet.
Las cifras están redondeadas, las proporciones y variaciones se miden por número de orígenes distintos y no de peticiones, y solo se incluyen patrones observados desde al menos 20 orígenes distintos.