Torisugariの日記: プライバシーと安全性 その2
Japanizeの新バージョンがリリースされているので、今度は安全性について、つまり、旧版のセキュリティ上の問題点にスポットライトを当ててみたいと思います。
と、その前に、私は前回の日記のコメントに
開発が進めば、開発者と利用者の双方にとって不本意な状況が改善される見込みが十分あるわけですから
と書きましたが、この新バージョンでは、私が前回の日記で指摘したプライバシー上の問題点が早くも克服されています。これは、いろいろな意味で、非常に喜ばしいことだと思いますし、この点について高く評価すべきだと思います。
では、本題です。まず、Japanizeで使われている翻訳データがJavaScriptである、というところがポイントです。といっても、どういうものかピンと来ないと思うので、実際のデータを見て下さい。
例えば、www.google.comの場合だと、該当データは
http://japanize.31tools.com/data/www.google.com/current.txt
です。
中身は
{
"hoge" : "ほげ",
"piyo" : "ぴよ"
}
という感じのテキストファイルです。
勘のいい人はここで気付くと思いますが、Japanizeはこのテキストをオブジェクトに変換する際に、evalを使っていました。つまり、外部スクリプトにchrome権限を与えていたわけです。「chromeとは?」という話は長くなるので割愛しますが、この権限の下ではXPConnectにフルアクセスできるので、前述のスクリプトがその特権を活用するような内容だった場合、恐ろしい事態に発展します(どういう由来があるのか知りませんが、よく「ハードディスクを全消去できる」などと表現されています)。
{
"hoge" : "ほげ",
"piyo" : "ぴよ"
}
;
Components.classes...
逆に言うと、
http://japanize.31tools.com/data/www.google.com/current.txt
の内容がまともな限り安全ですから、これは単独で利用できるようなセキュリティーホールではありません。
ただし、
サーバーがクラックされる
- サニタイズに失敗して危険なコードが挿入される (そもそも、翻訳データ自体が外部入力ですから)
- 通信の途中で変になってしまう (httpsではありません)
など、応用の幅広さを考えると脆弱性としては、かなり危険な部類です。むしろ、こっちの方が深刻かもしれませんが、倫理的な問題点もあります。
では、このように危険なソフトウェアにならないようにするには、どういった点に気をつければよいのでしょうか?
まず、一つは、当然ですが、chrome内ではevalを使わないことです。Mozillaは、そのような用途のために、権限を限定した環境(サンドボックス)を用意しているので、そちらを使えば安心です。
もう一つは、データ形式です。Greasemonkeyのように、スクリプトを読むこと自体が主目的の場合、「サンドボックス内でのeval」は理に叶っています。しかしながら、その他の場合では、通信データにJavaScriptを採用するのはあまり賢明な選択ではない、と私は思うのです。私はスクリプト大好き人間なので、こういう事を言うのは心苦しいのですが、ソフトウェアに「外部のスクリプトを解釈する機能」を付与すると、必然的にXSSに気を使うことを余儀なくされ、堅牢性には常に疑問符が付きまとうことになります。これは、何もMozilla系の拡張に限った話ではなく、データ伝達としてのスクリプトは、そういった点で非常に高価なのです。とりわけ、初心者のうちは手を出すべきではないでしょう。
最後になりましたが、該当バージョンを使っている方は速やかに最新版へのアップデートをお勧めします。
プライバシーと安全性 その2 More ログイン