| [ | トップ | ] |
2002年3月18日に,Analog にクロスサイトスクリプティングの脆弱性が発見されました.クロスサイトスクリプティングにより、悪意のあるサイトへの誘導や Cookie の漏洩などが行われる可能性があります。
以下の条件すべてに該当する方は早急に対処を行なって下さい.
この脆弱性は,高橋勇仁 様からの報告により発見されました.ご報告に感謝致します.
この脆弱性に該当する場合は,以下のいずれかの対処を行なって下さい.
ただし,以下に示す対処を行なうと,JISコードでの出力がサポートされなくなりますので,注意して下さい.
JISコードでの出力が必要な場合は,一度 EUC-JP など他の文字コードで出力を行なった上,別途文字コードを変換するなどの対処を行う必要があります.
$gunzip -c analog-5.21.tar.gz | tar xf - $cd analog-5.21/src $patch < <パッチをダウンロードしたディレクトリ>/analog-521_css.patch
$gunzip -c analog-4.16.tar.gz | tar xf - $cd analog-4.16 $patch < <パッチをダウンロードしたディレクトリ>/analog-416_css.patch
なお,どうしてもJISコードでの出力が必要な場合や,バイナリの置換えができない場合などは,「リクエスト不成功レポート」を生成しないようにすることで,暫定的に対処することも可能です.
以下,暫定的な対処法について説明します。
analog.cfg 中に以下の記述を行い、「リクエスト不成功レポート」の出力を 抑制します。
FAILURE OFFあるいは、コマンドライン上で analog を動かしておられる方は、以下の記述 がありましたら、このオプションを cron 等のシェルスクリプトから省くようにしてください。
$ analog +I上記の「+I」は、「リクエスト不成功レポート」を出力せよというコマンドラ イン上からの命令です。
コマンドライン上で「リクエスト不成功レポート」の出力を抑制するには、
$ analog -Iとすれば良い。
以下,技術的な詳細について説明します.
問題は、マルチバイト言語の出力制御に存在します。output2.c 内にある htmlfprintf()関数では、出力がHTML形式でないかマルチバイト言語の場合はエスケープ処理を行わないというロジックが存在します(analog 5.21のoutput2.cでは249行目)。このため、ブラウザが解釈すると危険な文字がそのまま出力されてしまいます。
analog 5.21 の output2.c
249 if (od->outstyle != HTML || multibyte)
~~~~~~~~~
250 fputs(s, outf);
251 else {
252 for (c = s; *c != '\0'; c++) {
253 if (*c == '<') {
(以下エスケープ処理)
従って,マルチバイト言語かどうかを if 文の判定条件に含めないことで,現象を回避することが可能です.ただし,この対処を行なった場合,エスケープされるべき文字を文字コードの一部として利用してしまっているJISなどのエンコーディング形式を利用することができなくなってしまいます.