またjavascriptのセキュリティ

XPCNativeWrapperがなぜ必要なのかがわからない。
Security check basics - MDCを読むと、特権のない側で作られたfunctionは特権がつかないように読める。そうだとすればsetter/getterにどんな細工をしようと、その関数を特権なしのコードで生成していたら特権はつかない。

残る理由は特権コードで引数に特権がなければできないことをする関数オブジェクトを特権なしのほうに渡す危険があるから。でも実際のところ特権のある側からない側にそういうコードを渡すことはほとんどない。
でもそういうことがしたいときもあるだろうからそのときのためにあるのかも。

とりあえずaddEventListnerみたいなのを直接呼ぶのは危ない。当然引数に関数を渡すから。
それを受け取ってwithとかとセットにすると割と危険そう。

Greasemonkeyのドキュメントで document.locationにきをつけろ! みたいなことが書かれているけど、実際は現状document.locationは相当小細工が掛けてあって、なぜかsettter/getterが定義できない。さらにlocation.hrefも小細工が入ってる。native code実装なのかな。

だからわりとふつうのことしかしないextensionだったらXPCNativeWrapper知りませんでしたっていう危ないコードでも綱渡りしてるのにはかわんないものの自分のレベルではexploit書けなかった。

まとめ

  • documentは安全
  • addEventListenerは危険そう

というわけでよろしくおねがいします。