aXMLRPCはJava向けに開発されたオープンソースの軽量XML-RPCクライアントである。2023年5月1日に、このaXMLRPCにはリモート攻撃につながる重大な脆弱性CVE-2020-36641が存在することが公表された。この脆弱性はリリース済みのバージョン1.12.1で修正されたはずだった。しかし、DynaTraceが1月23日、「Why the CVE-2020-36641 vulnerability is still exploitable」で伝えたところによると、修正はまだ行われておらず、aXMLRPCは依然としてCVE-2020-36641が存在することが明らかになったという。

CVE-2020-36641の概要

aXMLRPCを利用すると、JavaプログラムでXML形式のHTTPプロトコルを介してリモートのサーバにリモートプロシージャコール(RPC)を行える。もともとはAndroid向けに開発されたライブラリだが、Androidライブラリへの依存関係がないので通常のJavaアプリケーションでも使用可能となっている。

CVE-2020-36641は一般的にはXML外部エンティティ参照(XEE: XML External Entity)と呼ばれる脆弱性で、攻撃者がレスポンスのXMLドキュメントが外部サーバのエンティティに対する参照を含ませることで、サーバ内の保護されたファイルをリモートから読み取ることができるというもの。aXMLRPCではレスポンスXMLのパーサとして javax.xml.parsers.DocumentBuilder を使用するが、このクラスはデフォルトでXEE攻撃に対して脆弱とされている。

CVE-2020-36641のCVSS v3のベーススコアは9.8と評価されている。これは、すぐに修正を要する重大度「緊急(Critical)」な脆弱性に該当する。

  • XML外部エンティティ攻撃の例 出典:Dynatrace

    XML外部エンティティ攻撃の例 出典:Dynatrace

脆弱性はなぜ修正されなかったのか

CVE-2020-36641は2022年11月にリリースされたaXMLRPC 1.21.1ですでに修正済みだとされていた。しかしDynatraceの研究チームが調査したところ、この脆弱性は修正されず、aXMLRPCに残っていたことが判明したという。

研究チームによると、aXMLRPCの開発チームではCVE-2020-36641の対策版のコードを一度はGitHubリポジトリにコミットしている。しかしその後に問題が発生したため、暫定的な処置として該当するコミットを取り下げた。その後、再度修正されないままバージョン1.21.1(とそれ以降ぼバージョン)がリリースされたという。

Dynatraceによる警告を受けて、本稿執筆時点でaXMLRPCのGitHubリポジトリには「XEE脆弱性が修正されるまでプロジェクトでaXMLRPCを使用しないように」という注意書きが掲載されている。すでに修正用のコードもコミットされているため、以前に取り下げの原因となった問題に関する調査と修正が済み次第リリースされるだろう。

  • aXMLRPCのGitHubリポジトリの警告

    aXMLRPCのGitHubリポジトリの警告