
このリポジトリには、CVE-2024-48208のPoC開発に関するすべての作業と、単純なOOB(Out-of-bound)読み取りがどのようにしてjailエスケープやアクセス制御の破壊につながるかが含まれています。
このリポジトリには、単純なOOB(Out-of-bound)読み取りがどのようにしてジャイル脱獄やアクセス制御の破綻を引き起こすかに関するPoC開発のすべての作業が含まれています。
元のCVE説明は以下の通りです:

公式リポジトリのGitHub PRは、ls.c ファイル内の domlsd() 関数がOOB読み取りの脆弱性に対してどのように脆弱であるかを詳しく説明しています。これは、基本ポインタの未チェックのインクリメントによるもので、ポインタが cmd バッファの外側のバッファを指すことになり、行番号 1053 と 1054 に示されています。

GDBでバッファをデバッグしているときに、OOB読み取りによってユーザーが replybuf と呼ばれる領域に到達することを発見しました。
さらに分析を進めると、replybuf はサーバーがクライアントに提供した応答で埋められるバッファであることがわかりました。replybuf は、以下のようにファイル ftpd.c で定義されています:

まとめると、以下のようになります:
base が replybuf の一部を指します。replybuf にはクライアントに提供された応答が含まれます。さて、元のGitHub PRでは、CVEの作成者は、ls.c:1055 の次の条件が真を返した場合に何が起こるかを考慮・実証していません。

私たちはこれについて考え始めましたが、攻撃者が chdir(base) を真に返させることができれば、domlsd() 関数はファイルのリスト表示を続行することがわかりました。
チームは、VMsetup.txt で提供されている、システム管理者が制限された環境をセットアップするシナリオを検討し、以下のように動作するエクスプロイトを構築することにしました。
制限されたユーザーは、脆弱なFTPサーバーに接続し、自分の資格情報でログインします。
nc <server-ip> <ftp-port>
USER <username>
PASS <password>
その後、ユーザーはEPSVモードに入ります。
EPSV
ユーザーは返されたポート番号をメモします。リスト結果を読み取るためにそのポートに接続する必要があるからです。
ユーザーは、ファイルをリスト表示したいディレクトリを指すリンクファイルを作成できます(最後に受信した応答に応じて容易に自動化できるバッファオフセットに依存します)。
ユーザーは、悪意のあるコマンドを送信します(選択したオフセットに依存します)。
MLSD -........<more than 4096 to overflow the cmd buffer>
その後、ユーザーは先ほど記録したポート番号への別の接続を確立し、リストを読み取ります。
私たちは、同じ手順を実行する自動化エクスプロイトスクリプト pure.py を開発しました。これは、テスト用に開発してきた他のスクリプトを基にしており、dev_files ディレクトリにあります。
脆弱性を再現するには、VMsetup.txt にある仮想マシンセットアップのステップバイステップガイドに従ってください。
脆弱なインスタンスのDockerコンテナを作成するには、Dockersetup.txt を参照してください。