まだ重たいCMSをお使いですか?
毎秒1000リクエスト を捌く超高速CMS「adiary

2006/09/11(月)CSSXSSの問題

CSSXSSとは?

IEがCSSではない{を含む*1テキストをCSSと見なしてインポートしてしまい、あろうことかそのテキストがJavaScriptから操作可能なために発生するセキュリティーホールです。IE5、IE6などに存在します。

検証用コード。

<html><head>
<title>CSSXSS</title>
<style type="text/css">
@import url("./cssxss.txt");
</style>
</head><body>
<h1>CSSXSS</h1>
<textarea rows="20" cols="80" id="cssxss"></textarea>
<script type="text/javascript">
var text = document.getElementById( "cssxss" );
text.innerText = document.styleSheets(0).imports(0).cssText;
document.write("test")
</script>
</body></html>

この例では、cssxss.txt が「{」を含む場合、その中身を<textarea>に表示します。

悪意のあるサイトにアクセスした第3者に対し、既知のURL(例えばmixiなど)へユーザー自身にアクセスさせその結果をJavaScripを用いることで攻撃サイトに送信するなどという使い方をします。BASIC認証、Cookie認証その他あらゆる認証により守られたページも、ユーザー自身にアクセスさせることで突破できてしまうという驚異のセキュリティーホールです。

有効な対策

有効な対策は2つ。1つは、CSSXSSの攻撃をされたくないあらゆるページにおいて{」を「&#123;」にエンコードして出力することです。

もう1つはIE系ブラウザ((IEエンジンを使用するブラウザ))のアクセスを拒否することです。個人的には後者を選びたいのですけど(笑)

*1 : この文字だけであることIE6で確認しました。Shift JISの場合は2バイト目に { を含んでも同じ

2006/08/23(水)CSSXSS

CSSの中でjavascript実行しちゃったりする問題

CSSXSSというのがあるんですが、もちろんIE専用。要するに「罠サイトからスタイルシートに見せかけることで好きなサイトのデータを(クライアントに)取得させ、それをJavaScriptで処理することで罠サイト側に情報漏洩出来る」セキュリティホールです。さすがIEやることが違う!

というわけなんですが、CSSXSSさせない(加害者にならない)対策は取れても、CSSXSSされない(被害者にならない)対策は取りようがない。漏洩したことろでセッションは盗めないのですが(でも機密とかダダ漏れ)、CSSXSS+CSRFされるともはや手の打ちようがない。

世の中のIE使ってる人、危険極まりないですよこれは(汗