http://securitymemo.blogspot.jp/2014/10/mixi_46.html
※2014.4.16 23:00 本記事の反響がやたら大きくなってしまったのでコメントを追加します。
もともと本エントリはmixiさんの不正な判定を告発するとかそういう意図は全くなく、「超面白かった脆弱性検査の記録」という以上の意味はありませんでした。(あとこんだけ検査したんだぜーという自己PRと)
私がこの脆弱性を報告したのは、報告制度の最終日(3/31)間際だったので、最後の駆け込みで大量の報告が上げられていて、mixiさんのマンパワーが単純に足りなかった状況だったのではないかと思います。
また、報告日時が日曜深夜だったので、週末に誰かが(私より先に)同様の脆弱性の報告を上げていたけど、月曜まではmixiさんに認識されていなかった、というようなことだったのかもしれません。(推定ですが)
いずれにせよ、mixiさんは私の他の脆弱性報告では高額な賞金をルール通りきっちり払ってくれてますので、この件だけ出し惜しみするとは思えないため、「既知」というのが具体的にどういう状況だったのか分からないながらも、正当な判断だったんだろうなと思っています。
報告内容:
ショッパーズアイのマイページ
https://www.shoppers-eye.jp/mypage/recruit
の「募集中の調査案件」の検索フォームで、「キーワード」欄のエスケープがされておらず、プログラムに任意のコードを差し込めるコードインジェクション脆弱性があり、system関数によりOSコマンドがコールできた。
現象の詳細としては、このキーワード欄でシングルクォート入力時の挙動がおかしく、下記のような挙動が見られた。
'+ → システムエラー
'+' → OK (結果0件)
'+'a → OK かつ 検索画面のキーワードの内容が「a」になる
'+'1'+' → OK かつ 検索画面のキーワードの内容が「1」になる
また、下記のような挙動があることも分かった。
'+sleep(10)+' → 時間がかかった上でシステムエラー
'+sleep(100)+' → かなり時間がかかった上でタイムアウトエラー
当初これはSQLインジェクションだと思っていて、何らかのDBのsleep関数が呼ばれていると思い、色々なデータベースの関数を試して見たが、どうも他に呼べるデータベース系の関数がないので、もしや・・・と思い、下記を試したところ、20秒sleepをしているような挙動があった。
'+system("/bin/sleep 20")+'
これはSQLインジェクションではなくてコードインジェクションということが分かったが、sleepだと決め手に欠けるので、システムに害をもたらさないで、確実にOSコマンドが呼ばれていることを証明するには・・・と考えて下記入力を試したところ、「MailSubject」というタイトルの「1」という内容のメールが指定のメールアドレスに届いた。
そのため確実にsystem関数の実行が行われているということで報告した。
'+system("/bin/echo 1 | /bin/mail -s MailSubject <自分のメールアドレス>")+'
この脆弱性は、mixi脆弱性報告制度の一番高額な例(「リモートから、ウェブサーバー上で、任意のコードが実行可能」)に当てはまるので、かなり緊張しながら結果を待ったが「弊社において既知の脆弱性のため対象外」とのことだった。
2.ショッパーズアイ DOS攻撃を容易にする仕様
報告日:2014年3月31日
評価結果連絡:2014年4月8日 弊社において既知の脆弱性であると判断、よって脆弱性報告制度の対象外
報告内容:
ショッパーズアイの振り込み履歴のページにて
https://www.shoppers-eye.jp/mypage/history?pp=50&year=2014
というURLのyearパラメータをいじって過去の年にすると、ページ上のプルダウンでの選択できる年が増えるが、これに下限が設定されていないため、例えば
https://www.shoppers-eye.jp/mypage/history?pp=50&year=-9999
などのように指定すると、-9999年~2014年までのプルダウンが生成される仕様だった。
ここで、巨大なマイナス値
https://www.shoppers-eye.jp/mypage/history?pp=50&year=-999999999999999999999999999999999999999999999999999
を指定したところ、長くレスポンスを待たされた後、「proxy error」の画面になったので、おそらくサーバ側処理で大量のプルダウンリストが生成されて落ちてしまったと思われたため、DOS攻撃を容易にする仕様として報告したが、やはり「既知の脆弱性と判断」よって「報告制度の対象外」だった。
-->