Cloudflareサーバー上でコード実行を可能にするcdnjsの脆弱性

Cloudflareのcdnjsコンテンツ配信ネットワークに重大な脆弱性が確認されました。このネットワークはJavaScriptライブラリの配信を高速化するように設計されており、CDNサーバー上で任意のコードが実行される可能性があります。 インターネット上のすべてのサイトの約 12.7% がこのサービスを使用して JavaScript ライブラリをダウンロードしており、インフラストラクチャが侵害されると、これらのサイトのいずれかが提供するライブラリを置き換えることが可能になるという事実によって、この問題の危険性はさらに悪化します。

cdnjs サービスは、Git または NPM リポジトリからパッケージをダウンロードします。その後、どのサイトでも Cloudflare コンテンツ配信ネットワークを無料で使用して、JavaScript ライブラリの読み込みを高速化できます。 GitHub で公開されている cdnjs コンポーネントのコードを調査したところ、tgz アーカイブ内の NPM パッケージを解凍するには、Go 言語の標準の archive/tar モジュールが使用され、パスを正規化せずにファイルのリストをそのまま生成することが明らかになりました。 。 スクリプトが指定されたリストに基づいてコンテンツを解凍する場合、「../../../../../../../tmp/test」のようなファイルがアーカイブ内に存在する可能性があります。アクセス権が許す限り、システム内の任意のファイルを上書きする可能性があります。

攻撃者は自身のライブラリを cdnjs に追加し、パスに「../」文字を含むファイルを含む特別に設計されたアーカイブを NPM リポジトリにアップロードすることを申請できる可能性があることが示唆されました。 cdnjs サーバーでは、「自動更新」操作が定期的に実行され、この操作中にハンドラーが提案されたライブラリの新しいバージョンをダウンロードし、コンテンツを解凍します。 攻撃者は、パス「../」のファイルを使用して、サービス スクリプトでファイルを上書きし、解凍が実行されたサーバー上でそのコードを実行する可能性があります。

Git から更新をダウンロードする場合、更新をダウンロードするハンドラーが Git からファイルをコピーするときにシンボリック リンクを考慮していないことが判明しました。 この機能により、Git にシンボリック リンクを追加することで、サーバーからのファイルの読み取りを整理できるようになりました。

ファイル読み取りに関する仮説を検証して、HackerOne で賞を獲得するために、cdnjs をハッキングするデモンストレーションの実験を開始することが決定されました。 シンボリック リンク test.js が、CDN 経由で提供される JavaScript ライブラリの Git リポジトリに追加され、/proc/self/maps ファイルを指します。 新しいバージョンのライブラリを公開した後、更新ハンドラーはこのリポジトリを処理し、指定されたファイルを cdnjs で公開しました (test.js はシンボリック リンクとして作成され、このファイルが要求されたときに /proc/self/maps の内容が返されました) )。

ファイル /proc/self/environ へのシンボリック リンクを置き換えると、研究の著者は、指定されたデータに環境変数 GITHUB_REPO_API_KEY および WORKERS_KV_API_TOKEN の値が含まれていることに気づきました。 最初の変数には、GitHub 上の robocdnjs リポジトリへの書き込みアクセス用の API キーが格納されました。 XNUMX 番目の変数は、トークンを cdnjs の KV ストレージに保存しました。 攻撃者は受信した情報を使用して cdnjs に変更を加え、インフラストラクチャを完全に侵害する可能性があります。

出所: オープンネット.ru

コメントを追加します