Hatena::ブログ(Diary)

La Faïence

2008-03-14

botにシェルを自由に操作できる脆弱性(緊急)

経緯がわからない人へ

f:id:famnet:20080314170742p:image

  1. 結構前から、SkypeチャットでURLを貼られたらそのページのタイトルを取ってきたり、Wikipediaから意味を取ってきたり、Googleで探してくれたり、というbotを作って公開している。 →詳細
  2. だが、その仕組みはVBSでSkypeのCOMを叩いて、URLを検知したりすると、シェル経由でPerlスクリプトにURLを渡し、そのPerlスクリプトがメインの処理を行うものとなっていた。
  3. そのため、加工したURLなどをbotに食べさせる、たとえば、URLの後に&を付けるなどしてSkypeチャットで発言すると、&以降がシェルによって解釈され、任意のことができてしまうという恐ろしいことが起こっていた。
  4. そのため、先日、発言されたURLをダブルクォーテーションによって囲うことによって、対策を講じた。 →詳細
  5. しかし・・・

セキュリティの穴の場所は同じ

4の対策(ダブルクォーテーションでチャットからの発言をエスケープすること)によって、外部からの“汚れたデータ”はシェルに解釈されず安全に、Perlスクリプト本体に渡るものと考えていた。

だが、実際には悪意のあるユーザが

http://www.google.com"&call notepad

このようにbotがいるSkypeチャットで発言するだけでbotをホスティングしているマシン上でメモ帳が立ち上がるという恐ろしいことが起きる。*1

これは前回と同じような場所で起きている脆弱性で、現在の仕組み*2をとること自体危険だと考えた。

教訓:いかなる場合でも不特定多数の人から渡されたデータをシェルに渡してはならない

というお話。

危ないのでしばらくbotはいなくなります。でも、IRCにいるbotは同じPerlスクリプトで動いているけど、シェルを経由していないのでこの脆弱性とは全く関係ありません。

*1:もちろん&以降を自由に変えることによってなんでもできちゃう☆

*2:VBSでフックしてPerlスクリプトに渡す仕組み