おちゃのこネット/DLsite.com/ジーカツ/SYSZOの脆弱性

  • 2
    いいね
  • 0
    コメント

脆弱性"&'<<>\ Advent Calendar 2016の24日目の記事です。

おちゃのこネット

https://www.ocnk.net/

デモサイト

ネットショップのシステムを提供するサービス。「おちゃのこネットは15000店以上に利用されています」というサービスに脆弱性があると、15000店以上のサイトに脆弱性があることになるので怖い。

XSS。ページタイトルに表示される検索キーワードがエスケープされていなかった。

  <head>
    <title>
      <script>alert(location)</script>
    </title>
  </head>

ではスクリプトは動作しないらしい(サンプル)。</title><script>alert(location)</script>と一旦閉じてやると当然動く。脆弱性が無いか確認するときに、単純に<img src=x onerror=alert(0)>などを入力するだけだと見落とすのかもしれない。

「おちゃのこネット」を使っているサイトで見つけて、「おちゃのこネット」の脆弱性としてIPAに報告したけど、「複数のウェブサイトの脆弱性について記載されていた」という扱いで、「おちゃのこネット」と使っているサイトで、取り扱い番号が2個発行された。

DLsite.com

http://www.dlsite.com/

脆弱な部分は下記の通り。HTMLのエスケープを解除したかったらしい。

<script type="text/javascript">
//<!CDATA[

jQuery(function($){
    $('input#search_text').val($('<div>\x3cimg src=x onerror=alert(location)\x3e</div>').text());

jQueryの$の引数にタグを含めることができるとスクリプトが動かせる。この部分を正しく動かすためには、HTMLのエスケープをした後に、JavaScriptの文字列としてのエスケープをする必要がある(さらに</script>という文字列が含まれないようにしないとならないが、<>は最初のHTMLのエスケープで消えるはず)。これは<script>タグの中だけど、もし、onsubmitなどの属性値の中に移動するならば、さらにHTMLのエスケープをする必要がある。JavaScriptを動的に生成するのは止めましょう。条件が複雑すぎるからか、\でエスケープしていると、ChromeのXSS Auditorも守ってくれない。

ページのロード時に常にこの処理が実行されるならば、単にinput#search_textvalueに出力すれば良かったのに、どうしてこんなことに……。今はinput#search_textに出力されるようになっている。

ジーカツ

http://g-katsu.com/
「18歳以上ですか?」みたいな注意書きは出てこないけど、たぶんアダルトサイトなので閲覧注意。

検索キーワードに'が含まれていると、下記のSQLエラーが出ていた。やばい。

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%" OR description LIKE "%"%")' at line 3

今は503エラーが返るようになっている。どうせなら'が含まれていても検索できるようにしてくれれば良いのに。

この脆弱性は対応がとても速かった。

  • 2016年5月16日 6時29分 届出
  • 2016年5月16日 10時56分 届出情報受信の連絡
  • 2016年5月16日 11時26分 届出情報受理の連絡
  • 2016年5月17日 9時46分 取扱い開始(脆弱性関連情報の通知)の連絡
  • 2016年5月20日 18時41分 修正完了の連絡

受信から受理まで30分。やはり脅威度に応じて優先順位が変わっているのかも。

SYSZO

http://syszo.com/

XSS。「"><script>alert(location)</script>でスクリプトが動く」と報告して修正後に確認したところ、", >, <はエスケープされるようになっていたけど、'がエスケープされていなかった。このサイトはなぜかHTMLの属性値を括るのに"'が混在している。該当箇所は'で括られていたから、'autofocus onfocus='alert(location)でまだスクリプトが動いた。どういう事情で混在しているのか分からないけど、できるなら統一したほうが良さそう。

████████

http://████████