
Eclipse CheのCSRFによるRCE
このバグにより、リモートのウェブサイトが、ユーザーがウェブページを訪問した際に、バージョン7.3.0以前および7.4.1以前のCheを実行しているマシン上で任意のDockerコンテナを作成・起動できるようになります。
これはCSRFバグであり、リモートのウェブサイトが、スタンドアロンモードでEclipse Cheを実行している任意のユーザーのマシン上でDockerコンテナを作成・起動できるようにします。攻撃者が制御できる多くのパラメータにより、精密なレベルの制御が可能です。一部の開発者は、ローカルのDockerコンテナを管理する便利な方法として、スタンドアロンモードでCheを利用しています。
これは、CheがデフォルトでCORSを有効にしていたために可能でした。これに伴う問題は、その意味を理解している人にはかなり明白ですが、基本的にCheはあらゆるソースからのリクエストに応答していました。ブラウザはCORS攻撃を困難にするために最善を尽くしますが、サーバーがCORSを許可している場合、リモートサイトからローカルで実行中のCheサービスへのPOSTリクエストを成功させることが可能です。
基本的に、これは、スタンドアロンモードでCheを実行しているコンピュータが攻撃者のウェブサイトを訪問した場合、認証されていない任意のAPIメソッドを呼び出すことができることを意味します。これには、新しいDocker/OpenShiftコンテナの作成と実行が含まれます。
簡単なPOCがこのREADMEに含まれていますが、ローカルのCheサービスにPOSTされたJSONを確認すると、制御できるかなり興味深いパラメータが多数明らかになります。どのイメージを使用するか、起動時に実行するコマンド、コンテナ内で起動するサーバーなど、その他にもかなり興味深い特性があります。
この脆弱性を悪用するには、自分のコンピュータでEclipse Cheを実行しているユーザーを標的にする必要があります。標的となるユーザーに、HTTP経由で自分が制御するページを訪問させる必要があります。そこから、XMLHttpRequestが機能し、攻撃を開始できます。この脆弱性を完全に理解するには、Cheのソースコードを調べてAPIについて学ぶか、このリポジトリに置いたPOCを試してみることをお勧めします。基本的に、自分が望むような足がかりを得られるコンテナを作成するか、新しく起動したコンテナ内でコマンドを実行させます。任意のサーバーをセットアップするか、起動時にコマンドを実行させてペイロードをダウンロードし、そこから運用を開始することができます。この攻撃は、日和見的な攻撃にも標的型攻撃にも適しています。
より詳細な議論については、こちらで追跡されているバグをご覧ください。そのほとんどはこの記事の繰り返しです。
この攻撃を成功させるには、ページがHTTP(HTTPSではない)サーバーから配信されている必要があります。 これは、ローカルのCheサーバーがHTTPで動作しており、一般的なブラウザはHTTPとHTTPSのコンテンツを混在させることを好まないため必要です。
この問題を修正するために、CheチームはデフォルトでCORSを無効化しました。これにより、少なくともこの種の攻撃は今後かなり困難になるはずです。Dockerイメージを管理するためにCheをローカルで実行している場合は、アップグレードを検討してください。