ooooooo_qの日記

脆弱性の話とか

www.kantei.go.jpのXSS

一年ほど前に報告。

脆弱性

典型的なDOM Based XSSで、ソーシャルへのシェアボタンで、自分自身のurl(location.hash)を見ていたために発火

参考:複数のニュースサイトで外部サイトにシェアするボタンの実装方法に問題がある件 - 金利0無利息キャッシング – キャッシングできます - subtech

報告

IPA経由で報告。

f:id:ooooooo_q:20141231192952p:plain

IPAからのメールのキャプチャ。

(報告のフォーマットでは、そのサイトの連絡先も一緒に書かなければいけないため、連絡窓口を探すのに時間かかった覚えが)

対応

IPAから、対象サイトに連絡が行ったその日には、ボタンがなくなっていることを確認しました。IPA経由で連絡した中で、最速の対応でした。

いくつか報告した中では、公共性の高いサイトは機能ごと削除する対応の事が多いようです。そこまで修正が困難とは思わないのですが、他と関連しないような機能であれば削除したほうが確実というのもあり難しいところです。修正したと連絡が来て、確認してみたら直ってないケースもままあるので……。

参考:ソフトウェア等の脆弱性関連情報に関する届出状況[2014年第3四半期(7月~9月)]:IPA 独立行政法人 情報処理推進機構

危険性

見た限りではwww.kantei.go.jpにはログインする場所などはなく、ECサイトなどと違ってお金が絡む画面ももちろんないようでした。

この場合、考えられる危険性としては以下の様なものが有ります。

  • 細工したURLを閲覧させることで、公式発表を偽装する
  • 問い合わせフォームにXSSを使って、強制投稿させる
  • マルウェアなど、危険なファイルをダウンロードさせる、またはリダイレクトさせる
  • 管理者画面が同一ドメイン上に存在している場合、管理者へ向けて攻撃

とはいえ、実際にどの程度XSSが攻撃に活用される可能性があるのか、どの程度危険かはよくわかりません。 go.jpは他のドメインよりも信頼度の高いドメインであるため、それを利用されると攻撃の成功確率が高まってしまうのではと、自分は考えています。

CVEなど脆弱性単体での評価方法はあるのですが、実際の運営されているサイトに沿った評価形式もほしいところです。サイトごと(ドメインごと)に事情が様々なため難しいとは思いますが。

タイムライン

  • 2013/12/16 IPAへ報告
  • 2013/12/24 IPAからサイト運営者へ脆弱性の通知
  • 2013/12/25 IPAから修正が完了した旨のメール

はてなブログにあったセルフXSS 脆弱性"&'<<>\ Advent Calendar 2014 (19日目)

この記事は脆弱性"&'<<>\ Advent Calendar 2014の19日目の記事です。

前の記事はid:matsukawarさんのASPXのサイトのValidation機能からみるサイト攻撃ルート - matsukawarの日記です。

はてなブログの編集モードの一つに見たままモードというのが有り、そこにセルフXSSがあったので1年ほど前に報告しました。

はてなブログではyoutubeなどの別サイトの要素を読み込む場合iframeが使用されています。 そして、iframeのsrcはjavascript:で始まるuriを書くとXSSが起こります。当時その対策として先頭がjavascript:だったら置換する処理が書かれていたのですがそれが不十分でした。 html中に含まれる空白などはDOMが生成される際に無視されるためjava(空白)scirpt:などが入力されるとセルフXSSとなりました。

f:id:ooooooo_q:20141206144632p:plain

”HTML編集”のタブで入力して、

f:id:ooooooo_q:20141206144636p:plain

”見たまま編集”のタブへ移動するとアラートが動作しました。

管理者画面上でのXSSでありますが、セルフXSS、つまりユーザが自分で入力する必要がある場所なので危険性としては通常のXSSよりも低いものです。 はてなブログにはリクエストパラメータにbody=をつけることでURLの文字列を自動的に入れることもできるので、そちらも試してみたのですが途中でエスケープされるようでDom Based XSSとしては実行できないようでした。

HTML中で無視される文字列は色々パターンがある(XSS Filter Evasion Cheat Sheet - OWASP)ので、対策としては先頭をhttp://https://に限定するのが最も簡単だと思います。

相対パスを取りたいときは、JavaScriptでリンク先URLがhttp/httpsか確認する方法 - 葉っぱ日記の記事のように一度aリンクを生成するのが良いようです。 はてなブログでは、一度適当なDOMを生成して、それにsrcを設定した後に危険であれば置換して、その後URLを取り出しているようです。

明日はにしむねあさんです。

追記:

更に追記:

malaさんの報告が去年の9月で、自分が報告したのが今年の2月だったのでduplicateだった様子。

最近の活動

3月から5月分

3月

  • 溜め込んでいたXSSいくつか報告
  • 直ったり治らなかったり
  • cookie経由でXSSが起こるパターンに幾つか遭遇

4月

5月

  • とくになにも

4月辺りからXPの期限切れとか心臓出血とか世間では色々あった中で、忙しい体調悪いゲームばっかやってるで大したことやってない期間でした。 今月はwriteup書こう。

最近の活動

昨年12月から2月ぐらい

12月

  • json dayでXSSの話をしたかったけどあまりできなかった
  • 2,3日に一度はXSSを見るようになった
  • XSS幾つか報告した

1月

2月

  • 寒いのと忙しいのであまり動けず
  • webmailサービスのXSS報告した

12月から1月の上旬ぐらいまでが一番色々調べてていたのだけど、まだまとめてなかったり書けないことがあったりする状態。

去年の時点では、今年の春ぐらいからは脆弱性関連そんな触らなくなって可視化の方にシフトしていく気だったのだけれども無理そう。