Windows 7 用 Internet Explorer 9 の累積的なセキュリティ更新プログラム (KB2846071)
このパッチを適用すると、標準システムが動作しなくなる。
具体的にはログイン認証後、各個別のメニューで画面が遷移しなくなり、タイムアウトが発生してエラー画面が表示される。
これがマイクロソフトの意図したものなのか、プログラムのバクなのかは分からないが、原因はあらかた判明している。
専門的な話になるので興味がない方は読み飛ばしていただきたい。
javascriptというWebアプリに使われるプログラムで、意図せぬ画面遷移を制御するときに、onbeforeunloadイベントハンドラ内でevent.clientYというマウスポインタのY座標を取得する要素が用いられる。
意図せぬ画面遷移とは、例えば、右上の「×」マークで画面を閉じられるとか、ブラウザの戻るボタンを押されるとかの類だ。
「×」マークも「戻る」ボタンも画面外の上部にあるから、このときマウスカーソルのY座標はマイナスの数値になる。
つまり、画面が遷移するというイベントが発生した時にY座標がマイナスなら、画面内に配置されたフォームではなく、「戻る」「×」といったブラウザ画面上部の機能ボタンを押したと推測できるわけで、画面遷移を抑止したうえで警告メッセージを出すなど、対策が行えるわけだ。
ところがKB2846071を適用すると、このevent.clientY要素が、正しい値ではなく常にマイナスの値を返すようになる。
つまり、画面内のボタンを正しく押していても、「戻る」「×」といったボタンを押したとプログラムが誤認してしまうわけである。
ご存じのとおり、標準システムはかなり厳しめの画面やキーの制御を行っている。
もちろん、event.clientYも使っている。
詳細は割愛するが、正常なボタンが押下された場合でも例外的なボタンが押されたものと誤認し、その対策を行う部分にて処理がループする。
あとはタイムアウト後にエラー画面が表示され、職員が驚いて広域連合に電話がかかってくる、という仕組みである。
現在のところ対策方法は無い。
冒頭で記載した更新プログラムをアンインストールするか、システムの復元でパッチ適用の直前まで戻すしかないのである。
国保中央会に問い合わせても無駄だろう。
もともと検証済みのパッチしか適用するなというスタンスなのだ。
とはいえ、昨今ではセキュリティ対策のためWSUSサーバーが導入され、強制的にパッチが振ってくるという市町村も多いだろう。
WSUSにも色々なやり方があり、アンインストールを検出したら再度パッチが送り込まれるという事もあるので、解決するには各市町村の電算担当課との調整も必要になるかもしれない。
それにしても、この挙動変更、かなり多くのWebアプリケーションが影響を受けると思うのだが、大丈夫なのだろうか…
マイクロソフトのフォーラムによれば「スパイウェア対策のための変更」という内容の投稿もあるが、ちょっと信じがたい。
バグならば、早く修正プログラムを提供してもらいたいものである。