
GoogleのProtocol Buffersの広く使用されているJavaScript実装であるprotobuf.jsの重大なリモートコード実行欠陥に関する概念実証エクスプロイトコードが公開されました。
このツールはNode Package Manager(npm)レジストリで非常に人気があり、平均して週に約5000万回のダウンロードがあります。サービス間通信、リアルタイムアプリケーション、およびデータベースとクラウド環境での構造化データの効率的な保存に使用されています。
アプリケーションセキュリティ企業のEndor Labsは金曜日のレポートで、protobuf.jsのリモートコード実行脆弱性(RCE)は安全でない動的コード生成が原因であると述べています。
このセキュリティ問題は公式のCVE番号を受け取っていないため、現在GitHubが割り当てた識別子であるGHSA-xq3m-2v4x-88ggとして追跡されています。
Endor Labsは、ライブラリが文字列を連結し、Function()コンストラクタを介して実行することでprotobufスキーマからJavaScript関数を構築していますが、メッセージ名などのスキーマから派生した識別子の検証に失敗していると説明しています。
これにより、攻撃者は悪意のあるスキーマを提供して、生成された関数に任意のコードを注入することができます。その後、アプリケーションがそのスキーマを使用してメッセージを処理する際に実行されます。
これは、攻撃者に影響されたスキーマをロードするサーバーまたはアプリケーション上でRCEへの道を開き、環境変数、認証情報、データベース、および内部システムへのアクセスを許可し、インフラストラクチャ内での横展開さえ可能にします。
その攻撃は、信頼されていないスキーマをローカルでロードおよびデコードする場合、開発者マシンにも影響を与える可能性があります。
この欠陥はprotobuf.jsバージョン8.0.0/7.5.4以下に影響します。Endor Labsは、この問題に対応する8.0.1および7.5.5へのアップグレードをお勧めします。
パッチは英数字以外の文字を削除することでタイプ名をサニタイズし、攻撃者が合成関数を閉じることを防ぎます。ただし、Endorは、より長期的な修正は、Function経由で攻撃者が到達可能な識別子をラウンドトリップさせることを完全に停止することであるとコメントしています。
Endor Labsは「悪用は簡単である」と警告しており、セキュリティアドバイザリに含まれる最小限の概念実証(PoC)がこれを反映していることを指摘しています。ただし、現在のところ、野生での実際の悪用は観察されていません。
この脆弱性は、Endor Labs研究者およびセキュリティバグ報奨金ハンターのCristian Staicuによって3月2日に報告され、protobuf.jsメンテナーは3月11日にGitHubでパッチをリリースしました。npmパッケージの修正は、8.xブランチについては4月4日に、7.xブランチについては4月15日に利用可能になりました。
パッチ版へのアップグレードに加えて、Endor Labsはシステム管理者に対して、推移的な依存関係を監査し、スキーマ読み込みを信頼できない入力として扱い、本番環境ではプリコンパイル/静的スキーマを優先することをお勧めしています。