
MarkUs課題設定アップロードにおけるZip SlipのPoC
MarkUs は、学生の課題を採点するための Web アプリケーションです。
MarkUs の課題設定 ZIP アップロードにはパストラバーサル(Zip Slip)の脆弱性があり、任意のファイル書き込みが可能となり、リモートコード実行につながります。
アーカイブエントリ名は、展開先として意図されたディレクトリ内に結果のパスが収まるかどうかを確認せずにファイルシステムパスの構築に使用されます。認証済みのインストラクターは、トラバーサルシーケンスを含む細工されたアーカイブをアップロードすることで、そのディレクトリ外にファイルを書き込むことができます。
影響は、アプリケーションプロセスのファイルシステム権限に依存します。実行可能なアプリケーションファイルを上書きすると、リモートコード実行につながる可能性があります。
poc.py を使用して、必要なフィクスチャを含む zip-slip-check.zip を生成します。
インストラクターとして MarkUs にログインし、任意のコースの Assignments ページに移動して、「Upload the configuration zip file」をクリックし、アーカイブを送信します。
ペイロードのコールバックアドレスから到達可能な環境でリスナーを起動します:
nc -lvnp 8080 -vvv
学生として、MarkUs プロファイルに公開 SSH キーを追加し、任意のコースリポジトリに対して SSH 経由の Git 操作をトリガーします。
git clone ssh://markus@<host>:2222/~/csc123
MarkUs <= 2.9.0。
バージョン 2.9.1 で修正済み。
修正を含むサポート対象の MarkUs リリースにアップグレードしてください。 アプリケーションプロセスのファイルシステム権限を制限することで、 影響を抑えることができます。