
このサービスをハックしてCVE-2022–29622が有効であることを証明せよ
このコードベースは、セキュリティ専門家や開発者が、なぜ私がFormidableはCVE-2022-29622に対して脆弱ではなかったと考えるのかを理解するために作成されました。分析内容はこちらにまとめています:CVE-2022–29622: (非)脆弱性分析
一部の方には理解されなかったため、実際に動作するコードを使って私の主張を説明しようと思います。
サーバーはindex.mjsで実装されています。アップロードするファイルにはFormidable バージョン3.1.4を使用しています。
以下に示すようにFormidableを明示的に設定しました。
{
uploadDir: './uploads/',
keepExtensions: true,
}
これにより、すべてのファイルがuploadsディレクトリにアップロードされます。keepExtensionを有効にしているため、悪意のあるファイル名のままファイルをアップロードできます。
サーバーをセットアップして起動するには、このディレクトリで以下のコマンドを実行します。
npm install
npm run start
最初のコマンドで、適切なバージョンのformidableを含むすべての依存関係がインストールされます。2番目のコマンドでサーバーが起動します。
起動後、サーバーが公開するファイルアップロードフォームにアクセスできます: http://127.0.0.1:3000/
examplesディレクトリに、悪意のある名前が付けられたファイルを例として2つ含めています。
http://127.0.0.1:3000 のフォームを使って送信されたファイルは、uploadsディレクトリにアップロードされます。
チャレンジは、formidableがCVE-2022–29622に対して脆弱であることを証明できるかどうかです。そのためには、アップロードしたファイル内またはファイル名に含めたコードを、このWebサーバーに実行させる必要があります。
ルール:
3000です。このディレクトリ内のファイルを絶対に変更してはいけません。もし、上記のルールを厳密に守って任意のコードを実行できたなら、そのとき初めてformidableが任意のコード実行に対して脆弱であったことを証明したことになります。
提案: 最もシンプルな視覚的デモは、サーバーを起動したコンソールに、例えば「私はすごい、任意のコードを実行できた」という文字列を出力させることでしょう。