
CVE-2018-18925 のエクスプロイト: セッション処理におけるディレクトリトラバーサルによる Gogs のリモートコード実行。セッションバイパスと管理者アクセスを可能にし、git フックを介したその後の RCE を実現します。
Git のセルフホスト型ツール Gogs に対するリモートコード実行(Remote Code Execution)である CVE-2018-18925 の悪用。
Gogs は Macaron フレームワークをベースにしています。セッション管理に使用されるシステムは、PHP の仕組みと非常によく似ています。Cookie 内のセッション識別子は、ファイルシステム上のファイルにマッピングされます。Web サーバーは、セッション識別子(Cookie として)を含むリクエストを受信すると、ファイルシステム上のファイルを検索します。
この脆弱性は、ファイルシステム上でセッションに使用されるファイルを取得する際の、単純なディレクトリトラバーサルです。たとえば、i_like_gogits Cookie を ../../../../../../etc/passwd に設定すると、サーバーからエラーが返されます。

セッションバイパスを悪用するには、特別に細工したファイルをアップロードする手段が必要です。次に、このファイルをセッション ID として使用します。独自に細工したセッション ID ファイルは、https://github.com/RyouYoo/CVE-2018-18925/blob/main/main.go を使用して作成できます。
go run main.go
リポジトリのコピーをローカルに作成するとき、Gogs はファイルを /data/gogs/data/tmp/local-repo/[REPO_ID]/[FILENAME] に配置します(このリポジトリは、「Upload file」機能を使用した場合にのみ作成されます)。

ここで、[FILENAME] はアップロードするファイルの名前であり、[REPO_ID] は Fork リンクを使用して確認できるリポジトリ識別子です:

ここで、5 はリポジトリ ID です。
デフォルトでは、セッションは /data/gogs/data/sessions/ に保存されます。したがって、セッション ID には次の相対パスを使用できます: ../tmp/local-repo/[REPO_ID]/[FILENAME]。このパスを i_like_gogits Cookie で使用すると、administrator としてログインできます。

RCE を達成するには、特定のリポジトリの git hooks 機能を使用してシェルスクリプトを実行できます。

pre-receive にコードを注入します:

その後、git またはファイル作成機能を使用してプッシュを行い、フックを実行させます。