リポジトリ管理ソフトウェア「Nexus Repository Manager」に遠隔からのコード実行が可能になる脆弱性

「Sonatype」が開発する「Nexus Repository Manager(NXRM)3」で重大な脆弱性「CVE-2019-7238」が確認されました。この脆弱性を利用すると、認証されていないユーザが細工したリクエストを送信することによって遠隔から任意のコードを実行することが可能になります。NXRMは、ソフトウェア開発、アプリケーションのデプロイ、ハードウェアの自動的な割り当てなどに必要なコンポーネントを管理することができるオープンソースのソフトウェアです。Sonatypeによると、NXRMは15万台以上のサーバで稼働しています。

問題の脆弱性は「Tencent Security Yunding Lab」のRico氏と「Chaitin Tech」のvoidfyoo氏によって報告されました。この脆弱性に対処する更新プログラムが適用されたNXRM 3.15が2019年1月11日に公開されています。

■適切なアクセス制御の欠如により遠隔からのコード実行が可能に

CVE-2019-7238はExpression Language(EL)インジェクション攻撃が可能になる脆弱性です。具体的には、「previewAssets()」メソッドがCSEL(Content Selector Expression Language)式を無害化(サニタイズ)せずに評価することに起因します。CSELは、軽量なバージョンのJEXL(Java Expression Language)で、特定のパスとcoordinate属性に対するクエリをリポジトリマネージャーのフォーマットに即して記述する際に使用します。

トレンドマイクロはこの脆弱性について解析を行いました。「previewAssets()」メソッドは「previewAssets」リクエスト内の「expression」プロパティの値として脆弱性を引き起こすパラメータを受け取ります。次に、このメソッドは受け取った値をサニタイズすることなく「checkJexlExpression()」メソッドを呼び出します。続いて、「ContentExpressionFunction.java」の「execute()」メソッドが呼び出され、任意のコードが実行されます。

図1はJSON形式の「previewAssets」リクエストの例です。キー「method」には「previewAssets」が、キー「property」には「expression」が値として設定されています。そしてキー「value」には不正なコードが含まれています。このリクエストがNXRM 3に送信されると、適切なアクセス制御が行われていないため、不正なコードが実行されてしまいます。

「previewAssets」リクエストの例

図1:「previewAssets」リクエストの例

■CVE-2019-7238を利用する攻撃の前提条件

CVE-2019-7238を利用するためには以下の条件が両方満たされている必要があります。

  • NXRM 3 サーバのバージョンが3.15より前であること
  • NXRM 3 のリポジトリのいずれかにファイルが存在していること

NXRM 3のリポジトリにファイルが存在

図2: NXRM 3のリポジトリにファイルが存在

この前提条件が満たされている場合、攻撃者は問題の脆弱性を利用して遠隔のサーバをコントロールすることが可能になります。

遠隔のホストでリバースシェルを実行

図3:遠隔のホストでリバースシェルを実行

■CVE-2019-7238の修正プログラム

CVE-2019-7238を修正するにはパーミッション要件を追加する必要があります。図4のハイライト部が追加されたコードです。このコードによって、NXRM 3にインポートされたレジストリに対して、、「previewAssets()」メソッドが呼ばれる前にパーミッションのチェックが実行されます。これは、Javaのクラスファイル「org.apache.shiro.authz.annotation.RequiresPermissions」のインターフェイス「@RequiresPermissions(‘nexus:selectors:*’)」によって実現されています。

CVE-2019-7238に対処する修正プログラム

図4:CVE-2019-7238に対処する修正プログラム

■被害に遭わないためには

NXRM 3のようなリポジトリ管理ソフトウェアは、ソフトウェア開発の速度および効率を向上するために利用可能なツールです。しかし、CVE-2019-7238のような脆弱性が見つかった場合、悪用されてしまう恐れがあります。ソフトウェア開発においては、脆弱性の特定およびそれを利用するマルウェアや攻撃コードの有無を継続的に監視する必要があります。サードパーティのコンポーネントによってリスクがもたらされているかどうかを判定し、リスクがある場合それを発見および対処するために、自動化されたセキュリティを実装することが可能です。

サーバ向け総合セキュリティ製品「Trend Micro Deep Security™」以下の DPIルールによってこの脆弱性を利用する脅威から保護されています。

  • 1009553 – Sonatype Nexus Repository Manager Remote Code Execution Vulnerability (CVE-2019-7238)

ネットワーク脅威防御ソリューション「TippingPoint」では、以下のMainlineDV filterにより今回の脅威をブロックします。

  • 34706 – HTTP: Sonatype Nexus Repository Manager Code Injection Vulnerability

参考記事:

翻訳: 澤山 高士(Core Technology Marketing, TrendLabs)