Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The Complete Investigation of Encoding and Secu...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for OWASP Japan OWASP Japan
March 20, 2014
1.3k

The Complete Investigation of Encoding and Security #appsecapac2014

Avatar for OWASP Japan

OWASP Japan

March 20, 2014
Tweet

More Decks by OWASP Japan

Transcript

  1. 収穫の⼀一部   ! Chrome/Safari   ! (CVE-­‐2011-­‐3058)  Bad  interac>on  possibly  leading  to

     XSS  in  EUC-­‐JP   ! Firefox   ! (CVE-­‐2012-­‐0477)  Poten>al  XSS  through  ISO-­‐2022-­‐KR/ISO-­‐2022-­‐CN   decoding  issues   ! (CVE-­‐2012-­‐4207)  Improper  character  decoding  in  HZ-­‐GB-­‐2312   charset   ! (CVE-­‐2013-­‐5612)  Character  encoding  cross-­‐origin  XSS  aWack   ! IE   ! (CVE-­‐2012-­‐1872)  EUC-­‐JP  Character  Encoding  Vulnerability   ! (CVE-­‐2013-­‐0015)(CVE-­‐2013-­‐3166)  ShiY  JIS  Character  Encoding   Vulnerability   ! Opera(Presto)   ! (CVEなし)  Some  invalid  EUC-­‐TW  sequences  causes  read  outside  of   allocated  memory  
  2.   エンコーディングを使った               攻撃おさらい   ! ページ構造が期待しない形になり XSSが起こる   ! <script  src=hWp://vic>m  charset=***></script>な

    どで中⾝身を読み出す   ! ポイントは普段使われないエンコーディングも攻撃 者側で指定できること   ! 変わりものがサポートされていると中⾝身を有効に読み出せ る形になるかもしれない  
  3. サポート状況の調査   ! かき集めたエンコーディング名っぽい ⽂文字列列をブラウザが識識別するか⾒見見る   UTF-­‐8   UTF8   unicode-­‐1-­‐1-­‐ue-­‐8

      UTF-­‐9   …   (2500個以上のエンコーディ ングっぽい⽂文字列列)   調査⽅方法の詳細は:    hWp://masatokinugawa.l0.cm/2013/03/browser-­‐support-­‐encodings-­‐list.html   正式名   識識別不不可   エイリアス   (正式名を指す別名)   分 類  
  4. ! Big5   ! Big5-­‐HKSCS   ! BOCU-­‐1   ! CESU-­‐8   ! EUC-­‐JP  

    ! EUC-­‐KR   ! GB18030   ! GBK   ! HZ-­‐GB-­‐2312   ! IBM864   ! ISO-­‐2022-­‐CN   ! iso-­‐2022-­‐CN-­‐EXT   ! ISO-­‐2022-­‐JP   ! ISO-­‐2022-­‐KR   ! ISO-­‐8859-­‐1   ! ISO-­‐8859-­‐10   ! ISO-­‐8859-­‐13   ! ISO-­‐8859-­‐14   ! ISO-­‐8859-­‐15   ! ISO-­‐8859-­‐16   ! ISO-­‐8859-­‐2   ! ISO-­‐8859-­‐3   ! ISO-­‐8859-­‐4   ! ISO-­‐8859-­‐5   ! ISO-­‐8859-­‐6   ! ISO-­‐8859-­‐7   ! ISO-­‐8859-­‐8   ! ISO-­‐8859-­‐8-­‐I   ! KOI8-­‐R   ! KOI8-­‐U   ! macintosh   ! SCSU   ! ShiY_JIS   ! US-­‐ASCII   ! UTF-­‐16BE   ! UTF-­‐16LE   ! UTF-­‐32   ! UTF-­‐32BE   ! UTF-­‐32LE   ! UTF-­‐8   ! Windows-­‐1250   ! Windows-­‐1251   ! Windows-­‐1252   ! Windows-­‐1253   ! Windows-­‐1254   ! Windows-­‐1255   ! Windows-­‐1256   ! Windows-­‐1257   ! Windows-­‐1258   ! Windows-­‐874   ! x-­‐mac-­‐cyrillic   ! x-­‐user-­‐defined   Chromeの例例(計52個)  
  5. IEの例例(計139個!)   ! _autodetect_kr   ! asmo-­‐708   ! Big5   ! cp1025  

    ! cp866   ! cp875   ! csiso2022jp   ! DOS-­‐720   ! DOS-­‐862   ! EUC-­‐CN   ! EUC-­‐JP   ! EUC-­‐KR   ! GB18030   ! GB2312   ! HZ-­‐GB-­‐2312   ! IBM00858   ! IBM00924   ! IBM01047   ! IBM01140   ! IBM01141   ! IBM01142   ! IBM01143   ! IBM01144   ! IBM01145   ! IBM01146   ! IBM01147   ! IBM01148   ! IBM01149   ! IBM037   ! IBM1026   ! IBM273   ! IBM277   ! IBM278   ! IBM280   ! IBM284   ! IBM285   ! IBM290   ! IBM297   ! IBM420   ! IBM423   ! IBM424   ! IBM437   ! IBM500   ! IBM737   ! IBM775   ! IBM850   ! IBM852   ! IBM855   ! IBM857   ! IBM860   ! IBM861   ! IBM863   ! IBM864   ! IBM865   ! IBM869   ! IBM870   ! IBM871   ! IBM880   ! IBM905   ! IBM-­‐thai   ! ISO-­‐2022-­‐JP   ! ISO-­‐2022-­‐KR   ! ISO-­‐8859-­‐1   ! ISO-­‐8859-­‐13   ! ISO-­‐8859-­‐15   ! ISO-­‐8859-­‐2   ! ISO-­‐8859-­‐3   ! ISO-­‐8859-­‐4   ! ISO-­‐8859-­‐5   ! ISO-­‐8859-­‐6   ! ISO-­‐8859-­‐7   ! ISO-­‐8859-­‐8   ! ISO-­‐8859-­‐8-­‐I   ! ISO-­‐8859-­‐9   ! Johab   ! KOI8-­‐R   ! KOI8-­‐U   ! ks_c_5601-­‐1987   ! macintosh   ! ShiY_JIS   ! Unicode   ! UnicodeFEFF   ! US-­‐ASCII   ! UTF-­‐7   ! UTF-­‐8   ! Windows-­‐1250   ! Windows-­‐1251   ! Windows-­‐1252   ! Windows-­‐1253   ! Windows-­‐1254   ! Windows-­‐1255   ! Windows-­‐1256   ! Windows-­‐1257   ! Windows-­‐1258   ! Windows-­‐874   ! x-­‐chinese-­‐cns   ! x-­‐chinese-­‐eten   ! x-­‐cp20001   ! x-­‐cp20003   ! x-­‐cp20004   ! x-­‐cp20005   ! x-­‐cp20261   ! x-­‐cp20269   ! x-­‐cp20936   ! x-­‐cp20949   ! x-­‐cp21027   ! x-­‐cp50227   ! x-­‐cp50229   ! x-­‐ebcdic-­‐koreanextended   ! x-­‐ia5   ! x-­‐ia5-­‐german   ! x-­‐ia5-­‐norwegian   ! x-­‐ia5-­‐swedish   ! x-­‐iscii-­‐as   ! x-­‐iscii-­‐be   ! x-­‐iscii-­‐de   ! x-­‐iscii-­‐gu   ! x-­‐iscii-­‐ka   ! x-­‐iscii-­‐ma   ! x-­‐iscii-­‐or   ! x-­‐iscii-­‐pa   ! x-­‐iscii-­‐ta   ! x-­‐iscii-­‐te   ! x-­‐mac-­‐arabic   ! x-­‐mac-­‐ce   ! x-­‐mac-­‐chinesesimp   ! x-­‐mac-­‐chinesetrad   ! x-­‐mac-­‐croa>an   ! x-­‐mac-­‐cyrillic   ! x-­‐mac-­‐greek   ! x-­‐mac-­‐hebrew   ! x-­‐mac-­‐icelandic   ! x-­‐mac-­‐japanese   ! x-­‐mac-­‐korean   ! x-­‐mac-­‐romanian   ! x-­‐mac-­‐thai   ! x-­‐mac-­‐turkish   ! x-­‐mac-­‐ukrainian   ! x-­‐user-­‐defined    
  6. 余談   ! ⼀一通りみてもやはりUTF-­‐7が凶悪   ! ⼀一般にエスケープの必要がない⽂文字列列だけであらゆる⽂文字 を表現できる   ! エンコーディング絡みのバグがあった際に真っ先に使える   ! サポートしているのは現在IEのみ

      ! IE11でもまだサポート…    (MicrosoYいわく12では削除を検討中とのこと)   ! IEはUTF-­‐7が圧倒的に危険なため他の考えられる⼿手法を脆弱 性と呼ぶ段階にない…   +ADwAcwBjAHIAaQBwAHQAPgBhAGwAZQB yAHQAKAAxACkAPAAvAHMAYwByAGkAcAB0 AD4-­‐  
  7. テストを実施   ! 過去に問題になった挙動を参考にテス トを作成   ! {TEST1}  特定バイトが特別な⽂文字を作る    [0xBC]script[0xBE]  

           ➡    <script>   ! {TEST2}  特定バイトが後続の⽂文字を破壊する              <p  id="abc[0xE0]">    ➡    <p  id="abc[U+FFFD]>   ! {TEST3}  特定バイトが無視される                      <scri[0x80]pt>                      ➡      <script>  
  8. TEST-­‐1  特殊⽂文字の検出   「"&'<>\」(0x22  0x26  0x27  0x3C  0x3E   0x5C)を除いたバイト列列をランダムに

    表⽰示する    特殊⽂文字の有無を確認   あれば別のバイトから特殊⽂文字が   現れたと判断  
  9. TEST-­‐1  結果の⼀一部   ブラウザ   charset   バイト   出現⽂文字

      Chrome/Safari   (CVE-­‐2011-­‐3058)   EUC-­‐JP   0x8EE3   \   Safari   (OS  X)   x-­‐mac-­‐korean   0xA179   <  と  U+F877   0xA178   >  と  U+F877   x-­‐mac-­‐chinesetrad   0x80   \  と  U+F87F   x-­‐mac-­‐japanese   0x80   \  と  U+F87F   IE   (CVE-­‐2012-­‐1872)   EUC-­‐JP   0x8FEBBD   U+4E57  と  \  
  10. TEST-­‐2  結果の⼀一部   ブラウザ   charset   潰すバイト   潰すバイト数

      Firefox   (CVE-­‐2012-­‐0471)   EUC-­‐JP   0x8F   2   HZ-­‐GB-­‐2312   0x7E   or   [0x80-­‐0xFF]   1   GB2312   [0x81-­‐0xFE][0x30-­‐0x39]   2   GBK   GB18030   T.61-­‐8bit   [0xC0-­‐0xCF]   1  
  11. TEST-­‐3  結果の⼀一部   ブラウザ   charset   無視されるバイト   Chrome/Safari

      HZ-­‐GB-­‐2312   ~}   or   ~[0x0A]   Firefox   ISO-­‐2022-­‐JP   0x1B284A   IE   X-­‐ISCII-­‐AS   [0xEF][0x40-­‐0x4B]   X-­‐ISCII-­‐DE   X-­‐ISCII-­‐BE   X-­‐ISCII-­‐KA   X-­‐ISCII-­‐GU   X-­‐ISCII-­‐PA   X-­‐ISCII-­‐MA   X-­‐ISCII-­‐TA   X-­‐ISCII-­‐OR   X-­‐ISCII-­‐TE  
  12. IEのケース   <meta  hWp-­‐equiv>でcharset指定有、XSS有のページ   hWp://example.com?q=<meta  charset=ue-­‐7>  <img  src=x  o+AG4-­‐

    error=alert(1)>&<meta  hWp-­‐equiv=>   <me#a  hWp-­‐equiv="Content-­‐Type"  content="text/ html;charset=ue-­‐8">   …   <meta  charset=ue-­‐7><img  src=x  o+AG4-­‐error=alert(1)>   UTF-­‐7のページになって   フィルタを回避できてしまう!  
  13. 脆弱性ではないけれど   ! charset指定の有無にかかわらず起きる   ! アプリ側での対応は複雑になる   ! HTMLの構造をcharsetが変えられても危険にならない形にする などで⼀一応は対応できる   ! セキュリティ問題が起きることの⼀一般

    ユーザの想像の難しさ   ! ブラウザベンダには⼀一応問題提起として 報告   ! でも機能を無くしたら⽂文字化け時に困るし…   ! FirefoxアドオンのNoScriptは検出可