先日IPAから以下の注意喚起が出ましたので、今回は久しぶりに脆弱性の検証をやります。
IPA:Apache Tomcat における脆弱性(CVE-2020-1938)について
すでにPoCはGitHubで公開されており、今回もその公開されているPoCを使用して検証します。
なお、悪用厳禁であり、この記事についても悪用を促すわけではございませんのでご理解ください。
tomcat環境の準備
まずはtomcat環境が必要ですので、準備を行います。
以前作成した記事を参考に構築していきます。
javaインストールの参考:今さらS2-045の検証をしてみる①:LinuxでTomcatを動かす
tomcatのインストールについてはaptでそのままインストールすると最新版(脆弱性が修正されている)がインストールされる可能性があったので、以下を参考にinstall-tomcat9.shを作成しました。
参考:Ubuntu18.04にTomcat9をインストールする方法
記事のようにファイル作成する必要があるのですが、wgetするURLにアクセスできなかったので、以下のようにしました。(もともとのwgetの個所はコメントアウトしています。)
#!/bin/bash # Declare variables. TomcatMajorVersion=9 TomcatVersionFull="${TomcatMajorVersion}.0.30" TomcatDirectory="apache-tomcat-${TomcatVersionFull}" TomcatInstaller="${TomcatDirectory}.tar.gz" # Uninstall tomcat. rm -Rf /opt/$TomcatDirectory rm /etc/systemd/system/tomcat.service rm -Rf ./$TomcatDirectory rm $TomcatInstaller # Add tomcat user. useradd -M tomcat # Tomcat download and deploy. #wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/tomcat/tomcat-$TomcatMajorVersion/v$TomcatVersionFull/bin/$TomcatInstaller wget https://archive.apache.org/dist/tomcat/tomcat-$TomcatMajorVersion/v$TomcatVersionFull/bin/$TomcatInstaller tar -xzvf ./${TomcatInstaller} rm $TomcatInstaller mv ./$TomcatDirectory /opt chown -R tomcat:tomcat /opt/$TomcatDirectory # Service create and registration. cat << EOS > /etc/systemd/system/tomcat.service [Unit] Description=Apache Tomcat $TomcatMajorVersion After=network.target [Service] User=tomcat Group=tomcat Type=oneshot PIDFile=/opt/$TomcatDirectory/tomcat.pid RemainAfterExit=yes ExecStart=/opt/$TomcatDirectory/bin/startup.sh ExecStop=/opt/$TomcatDirectory/bin/shutdown.sh ExecReStart=/opt/$TomcatDirectory/bin/shutdown.sh;/opt/$TomcatDirectory/bin/startup.sh [Install] WantedBy=multi-user.target EOS # Change tomcat.service's permission. chmod 755 /etc/systemd/system/tomcat.service # Setting tomcat service auto start. systemctl enable tomcat # Start tomcat service. systemctl start tomcat
今回、tomcatのバージョンについては脆弱性のあるギリギリのバージョン「9.0.30」を選択しています。(「9.0.31」からは脆弱性は修正されている)
さて、これでブラウザでアクセスして以下のように表示されれば準備OKです!
脆弱性の検証
次はKaliLinuxから実際にできるか試してみます。なお、ローカルの検証環境ではKaliは「192.168.70.142」検証環境のTomcatは「192.168.70.137」となっています。
まずはオープンポートの確認を行います。nmapをフルポート確認してもよかったのですが、簡単に1-10000ポートのチェックだけにしています。sshは環境構築時に入れたものです。
# nmap -p 1-10000 192.168.70.137 Starting Nmap 7.70 ( https://nmap.org ) at 2020-02-26 08:18 EST Nmap scan report for 192.168.70.137 Host is up (0.000096s latency). Not shown: 9997 closed ports PORT STATE SERVICE 22/tcp open ssh 8009/tcp open ajp13 8080/tcp open http-proxy MAC Address: 00:0C:29:15:2A:A8 (VMware) Nmap done: 1 IP address (1 host up) scanned in 0.49 seconds
脆弱性の存在する「8009/tcp open ajp13」にKaliからアクセスできることが確認できました。
実際にGitHubのPoCを試してみます。
ここではPoCのURLは念のため伏せておきますが、検索エンジンで検索すれば簡単に探せます。
GitHubでClone用のURLを取得して以下のコマンドでPoCを取得することができます。
#git clone https://github.com/xxxxxxxxxxxxxxxx/xxxxxxxx.git #URLについてはgithubでコピーしたURLを入力
これで準備はOKです。あとは実際に動かしてみましょう!
上記のように脆弱性が検証することができました。
「/WEB-INF/web.xml」にアクセスできました!!!
なお、ブラウザでは「/WEB-INF/web.xml」にアクセスしても以下のように404が応答されアクセスすることができません。
このため、本来は外部からアクセスできないファイルにアクセスされることで機密情報の漏洩になる可能性があります。
また、ファイルアップロードを悪用して任意のコマンド実行を行われる恐れもあります。
使用しているバージョンを確認の上、至急対応を行うことを推奨します。
最後に
CVE-2020-1938の脆弱性の検証を行いました。
該当の脆弱性ですが、Ghostcatというかわいい名前がついています。(ロゴもかわいい)
しかし、内容についてはかなり大きな問題があるので注意が必要です。
Apache JServ Protocol (AJP)という機能については検証でやったとおり、通常はインストールした時点では動作する状態になっています。(ポート:8009は空いている)
そのため、AJP自体を現在使用していなくても攻撃をされる可能性は大きいです。
tomcatを使用しているサーバをお持ちの方はすぐに状態を確認することをお勧めします。
不明点や要望やこういったこともやって欲しいとの要望があれば、お問い合わせページやコメント、ツイッターからでも結構ですので、気軽にご連絡ください。
久々に検証したから疲れた・・・
コメント