パスワードを忘れた? アカウント作成
9347 story

Namazu 2.0.13以前にクロスサイトスクリプティング脆弱性 63

ストーリー by Acanthopanax
穴ふさぎ 部門より

Anonymous Coward曰く、"純日本産の全文検索エンジンとして導入実績も数多いNamazuにクロスサイトスクリプティング脆弱性が発見された。2.0.13以前のnamazu.cgiにタブ(%09)から始まる検索文字列を指定すると、検索文字列がサニタイズされなくなる不具合があるとのことで、ユーザーは、すでに公開されている修正版をダウンロードして早急にアップデートした方がいいだろう。"

12月15日付けで、Namazu 2.0.14が公開されている。

[2004-12-16 00:55 JST Acanthopanaxによる追記] コメントでも指摘されているように、/.Jにもこの脆弱性が存在します。/.J側の対処が完了するまでは、ログアウトするといった対策をお願いします。たいへん申し訳ありません。

[2004-12-16 01:23:46 JST tachによる追記] とりあえず対処しました。バージョンは変わっていませんが、問題の文字を置き換えるようにしてnamazuに渡すようにしました。

[2004-12-16 01:47 JST Oliverによる追記] ここ一週間のログをチェックしたところ、当ストーリ掲載以前に脆弱性を利用するアクセスが行われた痕跡は確認できなかった。また、掲載後、応急処置が行われるまでの間には267回の%09を含んだNamazuへのアクセスがあり、その内247回がデモリンクを含むコメントに記載されていた確認用のコードを使ったものだった。残り20回に関しても同種のテスト目的のもので、他ユーザのクッキーを盗むようなアクセスはなかった。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by tnk (13707) on 2004年12月15日 23時30分 (#666583)
    これを掲載した編集者は事の重大さがわかっているのか?
    Slash CodeでCookieがどう使われているかがを考えれば,
    この脆弱性は致命的だ。すでに実証コードも出ている。

    スラッシュドットジャパンの管理者へ
    NamazuのUpdateが完了するまでnamazu.cgiをとめろ!
    今すぐだ! 今すぐ!
    • by tnk (13707) on 2004年12月16日 1時32分 (#666670)
      対応お疲れ様です>サーバー管理者の方

      とりあえず,アクセスログは保存しておいて,
      後日チェックはしておいてください。
      親コメント
    • 穴ふさげ 部門 だな。
      まだ止まってないよ。
    • 実際どれくらい危ないんでしょうか?
      私の認識だと

       ・スラッシュドット内でのなりすまし → 荒らし、日記削除(?)

      くらいの脅威しか思いつかないんですが実際にはたとえば

       ・他のサイトも含めたクッキーを盗み放題 → 使い方によっては危険
       ・任意のブラウザバグコードを埋め込む
         →
      • すらどのnamazuではすらどのcookieしか読めませんけど、少なくともパスワード変えられたらアカウント奪われちゃいます。リンク先がなまずじゃないことを確認しないと危なくてしょうがない。。

        上にもあるけどログアウトしてたらcookieの中身は読まなかったので、ログアウトするしか。

        #といいつつID。
        親コメント
        • パスワード変更の時に、スラドだと新規パスワードしか入れないでいいような仕様になってるみたいだけど、
          ここを旧パスワードもチェックするようにすれば、少なくともパスワードを変えられてしまう事は防げるんじゃないだろうか。
          割と一般的な仕様ではあると思いますが。それでも、メールアドレスなどの個人情報を覗かれるのや、荒らしに使われたり日記削除などされる事に関しては防げないけど、最低限の防御体制ということで。

          あと、もし可能ならばだけれども、自分のIDにログインしたユーザのIPなどの記録が閲覧できるといいですね。自分だけでいいので。
          そうすれば、悪用された可能性の自己チェックができます。
          親コメント
          • by sp (4840) on 2004年12月16日 10時06分 (#666764)
            パスワード変更といえば、
            新規アカウント取得のときmax24文字のパスワードが指示されていて、設定できる
            (20文字以上のパスワード設定なのでログイン不能におちいる)
            というバグというか新規ユーザへの罠は改善されたのでしょうか?

            あと、パスワードに使用できない文字が指示されていない罠とかも。
            (これも、パスワード設定はできるがログイン不可になる)
            親コメント
          • パスワード変更の時に、スラドだと新規パスワードしか入れないでいいような仕様になってるみたいだけど、 ここを旧パスワードもチェックするようにすれば、少なくともパスワードを変えられてしまう事は防げるんじゃないだろうか。

            今回のインシデントをきっかけとした改善点として,この仕様(?)は修正するべきだと思います。パスワード変更時に旧パスワードを要求するようになれば,Cookieをぬきとられても,パスワードを変更されてアカウントをのっとられる危険が大きく減ります。

            アカウントののっとりが発生するととんでもないことになります。のっとられたアカウントがある程度以上ある状況では,アクティブなユーザーに対して「このIDは本来私のものだったのにのっとられた」と管理者に連絡する,という「攻撃」が可能になってしまいます。

            私はPerlがほとんど読めないのでコードをちゃんとチェックしてないのですが,現在のSlash Codeでは「のっとられたアカウント」と「正規のユーザーが使いつづけているアカウント」の区別をつけるのがシステム的に非常に難しいのではないでしょうか。

            このような「攻撃」がおこなわれると,多くのIDを無効化する必要が出てしまうでしょう。結果としてSlashdot Japanというコミュニティ自体に取り返しのつかないダメージを与えることになってしまいます。
            親コメント
      • by Anonymous Coward on 2004年12月16日 0時39分 (#666628)
        tnkです。安全のためにログアウト中です。

        >実際どれくらい危ないんでしょうか?

        /.Jのセッションをのっとられた場合,何より怖いのは
        ユーザー情報にアクセスされて,登録しているメールアドレスを
        みられる,ということだと思います。リアルのアドレスを知られると
        高い確率で身元が割れます。
        親コメント
        • 登録しているメールアドレスをみられる,ということだと思います。リアルのアドレスを知られると高い確率で身元が割れます。

          そんなに重要なメールアドレスを登録しているんですか?
          スラドの登録アドレスごとき、フリーのウェブメールで十分では?

          リスクを背負わせる場所を間違っているような感じがしますが。
        • 身元が割れて困る人は、身元が割れるような
          mail addressを/.なんかに登録しちゃいかんでしょう。
      • ・他のサイトも含めたクッキーを盗み放題
        それはないですね。
        IE経由でウイルスとかトロイとかをローカルに入れられる
        IEでslashdot.jpを信頼済みサイトゾーンに登録していて、信頼済みサイトゾーンのセキュリティレベルを「低」にしているとかでないかぎり、それはないですね。
    • OSDN系列という事で、japan.linux.comの記事全文検索 [linux.com]も同様にヤバいです。
      親コメント
    • by Anonymous Coward on 2004年12月15日 23時33分 (#666586)
      とりあえずログアウトしたほうがいいですね。
      Cookieを盗まれるとアカウントを乗っ取られます。
      スラッシュドットはログアウトすればCookieが消える仕組みだったはず。

      既にやられたと思う人はパスワードの変更をお忘れなく。
      スラッシュドットはCookieの内容はパスワードのMD5ですから、
      変更しないといつまでも乗っ取られますし、
      変更すれば大丈夫です。
      親コメント
    • by Anonymous Coward on 2004年12月15日 23時45分 (#666595)
      ていうかもうやられてます [srad.jp]けど。work aroundも示されてるんだし、せめてストーリー載せる前に対処しとけってorz 今時は0 day attackなんざ珍しくないんだし。

      それはそれとして、バージョンが古いから問題だとは単純には言い切れません。まず/.-JのマシンはDebian Woodyなんですが、backportという形でsecurity fixがリリースされるというのは有名な事実ですね。それからNamazuの場合テンプレートをコピーしてカスタマイズするというのがよく行われるのですが、プログラム自体は更新してもテンプレートはそのままなので、そこに記述されているバージョンも古いというパターンがあると思います。まあこれは放置している方が悪いというか、そもそもテンプレートからバージョン番号は消しといた方がいいとは思いますけど。
      親コメント
  • 何故TAB (スコア:3, 興味深い)

    by Anonymous Coward on 2004年12月15日 22時40分 (#666548)
    文字列の頭1文字が\x09なら扱いを変えるという
    "output.c: html_print()" の設計方針がまったく理解できない。
    \x01や\x02にも特殊な意味を割り当ててるようだし
    web経由でやってくる汚れたデータを扱う場所で
    なぜそのような独自メタ文字を定義するのかな。
    手を抜くという目的のためなら手段を選ばない。誰だって犠牲にする。
    大人って汚いね。

    unhtml_buffer()なんて
    条件によってはループが終るときi==BUFSIZEだけど
    そのあとbuf[i]にカスを突っ込んでるから他所の土地に手を出してることになる

    安全のためにstrncpyを多用してるみたいだけど
    strncpyは溢れたとき自動で末尾に留め具NULを置いてくれないから
    strncpyを呼んだ後に自分で置かなきゃならないのに放置しているところ沢山

    ほんの数十秒眺めただけで気持ちの悪いコードが沢山見えた。
    気持ち悪い原因は埋め込まれている沢山のHTMLタグが原因かもしれないけど。

    探せばもっと出るんじゃない?
    表に出てないだけで実はいくつもの脆弱性が裏では有名になってるのではないかと
    思ってみるテストとか言ってみるテスト。
    本気でセキュリティーを重視したければnamazu.cgiは選択の候補から外すことか。
    • by magicME (10732) on 2004年12月15日 23時27分 (#666578)
      こういうプログラミングの一般常識というか
      こういうことがやりたいときにはこういう実装が一般的、みたいな
      暗黙の了解っていうのはプロのプログラマー(変な表現!)の人たちは
      何処で身につけられるのでしょうか?

      学校、自分の経験から、会社の先輩から、他人のソースを読んで、
      とにかくヒラメキ、そんなのがわからん天才以外プログラミングしてはいかん、etc・・・

      勉強がてらの趣味プログラムしか経験していない私ですが
      その課程で一番プログラミングに必要とされる知識は
      結局そういう実装上の常識?みたいなもんなんじゃないかと痛感しました。
      大きな意味でアルゴリズムだと思うんですが
      教科書に載ってるような純数学的っぽいエッセンスのようなものではなくて
      もっと軽い一般常識とかマナーとかの次元にあるようなルールみたいなものです(表現しづらい)。

      自分の経験だと試行錯誤な経験と人のソースを読む
      ってことで地道に身につけてくしかないかなぁ、道はスゲェながそうだ・・・
      という結論に達したのですが皆さんはどう思われるでしょうか?

      あとプログラマーの人たちの間ではこういう常識のあるなしで
      こりゃすごいプログラマーだとかそいういうのを判断する材料にしてたりするんでしょうか。
      それともとにかく動くプログラムを書く人が一番偉い人?

      なんか曖昧な表現が多くてなおかつ野次馬根性全開な質問ですが
      皆さんのご意見が伺えれば幸いです。
      親コメント
      • by Anonymous Coward on 2004年12月16日 0時50分 (#666634)
        親コメントの指摘は、メモリイメージを頭に浮かべないと(理解出来ない|まともに使えない)、Cの欠点です。
        ソフトウェアエンジニアリングとアルゴリズムだけに注力したいのなら、そのような些末にとらわれない言語を使うべきです。

        # もちろん、Cを使わなければいけないときもありますが。

        いったん「何をするべきか」「何をするべきではないか」が分かってしまえばいいんですけど。

        > 自分の経験だと試行錯誤な経験と人のソースを読む
        > ってことで地道に身につけてくしかないかなぁ、道はスゲェながそうだ・・・
        > という結論に達したのですが皆さんはどう思われるでしょうか?

        ある問題をCで書き表すとき、その方法にはいくつかありますよね。
        私はそれらの選択肢を頭の中でアセンブリ言語に直し、もっとも単純で、できれば高速になるものを選びます。
        高速化はこだわらない方がいいですね。機械的に出来る最適化はコンパイラがやってくれますし、数回しか
        実行されないところを高速化してもしょうがない。
        それよりはソースが単純なものになるように書きましょう。
        そうすれば、あとで(自分を含む)誰かが読んだときに分かりやすいですし、変に凝った書き方をするよりも
        高速かつ安全であることが多いです。この辺りはCに限りませんけどね。
        変なソースを読むよりは、「意識してプログラムを書く」方がお勧めですね。

        あとK&Rをきちんと読みましょう。
        あの本には標準ライブラリ関数を実際に作る話がたくさん出てきます。自分でもやってみましょう。
        処理系で実装は違えど、内部でどんな処理をしているかを知っていれば、取捨選択やコスト計算が出来るようになります。
        あとやってはいけないこともね。ついでに関数ごとの細かい違いも頭に入りますし。
        # fputs() と puts() の出力の違いとか。 :)
        親コメント
        • by ddts (10995) on 2004年12月16日 1時17分 (#666655) 日記
          >親コメントの指摘は、メモリイメージを頭に浮かべないと
          >(理解出来ない|まともに使えない)、Cの欠点です。
          >ソフトウェアエンジニアリングとアルゴリズムだけに注力した
          >いのなら、そのような些末にとらわれない言語を使うべきです。

          C言語はもともとメモリ操作が容易にできることを想定して
          作られているので、それは仕方ないのかなあ、とも思います

          私がむしろ問題だと思うのは、
          >あとやってはいけないこともね。ついでに関数ごとの細かい違いも頭に入りますし。
          ># fputs() と puts() の出力の違いとか。 :)

          こちらでしょうか。コンパイラ実装の容易性を優先して、コーディングの容易性を犠牲
          にしすぎているように思います
          親コメント
      • ルールとかマナーじゃ応用力が足りないんじゃないかと思う。
        # パターンくらいはあるんだけど。代表的なのは文字列の終端。
        # Cは言語もライブラリも境界にルーズだからね。

        必要なのはコンピュータの動作を脳内でエミュレーションする事と、
        とことん悲観的に、意地悪くなることかなぁ...

        >そんなのがわからん天才以外プログラミングしてはいかん

        そんな事はないし、最初から天才な奴もいない。試行錯誤が役に立つ
        場合もあるし、アルゴリズム辞典牽いた方がいい場合もある。一般解
        はないと思う。
        親コメント
    • by gonta (11642) on 2004年12月16日 11時37分 (#666803) 日記
      こういうスキルって、どうやって身につけるんでしょうか?
      サンデープログラマからすると、本に載っている内容を
      少し変更して組み合わせたりするのをよくやります。
      セキュリティーホールによるアップデートの報告のたび、
      「俺がネットワークプログラミングしたら、こんなの連発
      だろうなぁ」と思います。
      --
      -- gonta --
      "May Macintosh be with you"
      親コメント
      • by typer (9666) on 2004年12月16日 13時38分 (#666874) 日記
        私もサンデープログラマというか、たま~にいじって遊ぶくらいなんですけど...
        よく聞くのはすべての場合を考えろってことですかね。
        何かをする場合、出来ないときはどうなるのか、しなくて良いとき、いけないときはどんな時かとか、ある変数を使う場合、正しい値の場合はどんな時か、正しくない値はどうするのか、等々と、それらをチェックしなくて良い理由と範囲を明確にする。そうでなければチェックする、そんな所でしょうか。
        #で、それを見落としたり、勘違いしたりしてバグると。
        親コメント
      • by Ryo.F (3896) on 2004年12月16日 15時02分 (#666904) 日記
        プログラムを組む→オープンソース化→パッチが山のように送られてくる→勉強→[最初から繰り返し]
        恥を忍んで人に見てもらうってのが早道なのかもね、と言う提案でした。
        親コメント
    • by Anonymous Coward
      >文字列の頭1文字が\x09なら扱いを変えるという
      >"output.c: html_print()" の設計方針がまったく理解できない。

      ソース見てないからはっきり言えないが
      Unicodeの一バイト目ならそういう処理もあるんじゃね?
      • by Anonymous Coward
        何の関係もない。ソース読んでから書いたら?
      • by Anonymous Coward
        > Unicodeの一バイト目ならそういう処理もあるんじゃね?

        Unicodeって……たぶんUTF-8のことを指してるんだろうけど、その程度の理解なら普通にコーディングしてください。
        Cの場合の"普通"とは、iconvやワイド文字処理関数を使い、直接触らないということです。
  • by Anonymous Coward on 2004年12月16日 9時23分 (#666742)
    スラドでのNamazuの検索結果って、正直役に立ったことが一度もないです。
    結局、Googleで探したほうがよっぽどマシなわけで…。
    役に立たない検索機能を放置するよか、Namazu自体を取っ払った方がよろしいのでは?

    # とりあえず様子見で、当面はAC。
    • Re:Namazuいらない (スコア:2, 参考になる)

      by takano32 (17535) on 2004年12月16日 9時53分 (#666756) ホームページ 日記
      それは多分,該当記事の「検索対象」にチェックが入っていないからではないですかね.
      適当に検索すると「セクション無所属」だけが検索されるみたいです.
      --
      旅に出ます.(バグを)探さないで下さい.
      親コメント
      • Re:Namazuいらない (スコア:2, すばらしい洞察)

        by tanimachi (4564) on 2004年12月16日 11時29分 (#666800) 日記
        検索対象を全てチェックしても、何もあたらないか、数多くあたって役に立たないか、どちらかしか経験したことがありません。

        Namazuを取り払って、"site:slashdot.jp" つけてGoogleを呼び出すフォームを取り付けたほうが、ユーザとしてうれしい。管理者も楽になってうれしいんじゃないかな。
        親コメント
    • 相変わらず、古い記事しか検索に引っかからないようですね。ex) 「脆弱性」で検索、日付でソート [srad.jp]

      Index の更新は行なわれているのでしょうか?

      --
      むらちより/あい/をこめて。
      親コメント
      • by magi-bot (11763) on 2004年12月16日 13時56分 (#666886)
        どうもNamazuの文節切り分け(?)が弱いみたいですね。
        Namazuの記事は「脆弱性」というキーワードではなく、
        「クロスサイトスクリプティング脆弱性」で分類されているんじゃないでしょうか。
        試しに
        「*脆弱性*」 [srad.jp]で検索すると表示されました。

        これってKakasiとかChasenとかの問題?
        親コメント
    • Re:Namazuいらない (スコア:1, おもしろおかしい)

      by Anonymous Coward on 2004年12月16日 9時36分 (#666750)
      Namazuでの検索にはそれなりのノウハウが必要です。それさえあれば強力な検索が可能。
      人はそれをバッドノウハウと呼びますが、ええ。

      #スラドでのNamazu検索にはさらに一層のノウハウが……あっても使えない気がするのは何故?
      親コメント
    • by Anonymous Coward
      同感。以前投稿した記事が全然引っかからないが、ぐぐると
      見つかるケースを何度も経験した。

      /. の namazu はまったく信頼してないので試さないけど、
      今はもう直っているのかね?
  • by Anonymous Coward on 2004年12月16日 1時37分 (#666676)
    リンク先がnamazu.cgiではないことを確認するといった対策を
    リンク先がnamazu.cgiでなかったとしても、リンク先がnamazu.cgiにリダイレクトしているかもしれないし、リンク先ページに<IMG SRC="javascript:...">でnamazu.cgiを呼び出しているかもしれないので、それを確認するのは対策になりません。
  • 自鯖ではないのでpnamazu [tcp-ip.or.jp]を使わせて頂いてますが、
    こっちは大丈夫なんでしょうか。
    サイトには

    >2001.11.28 までのバージョンは、 cross-site scripting 問題が残っていました。

    と、ありますが今回の件とは無関係?
    • Exploit@/.-J [srad.jp]を参考にやってみました.
      pnamazuのバージョンは2002/11/16のものです.

      query=%09%22%3E%3Cscript%3Ealert('XSS')%3C%2Fscript%3E
      としてみましたが,検索フォームに"{ >alert('xss') }"と出ただけです.
      今回の件に関しては問題ない模様.

      # パッケージに最新のnamazuが降りてくるのを待ったり,namazuだけコンパイルしなおしたりするのは面倒なので,pnamazuにしておこうかな...
      --
      旅に出ます.(バグを)探さないで下さい.
      親コメント
    • えーと、クエリの先頭にタブ文字があるとサニタイズせずに渡してしまうという単純なものですから、Exploitを試してみれば良いのではないでしょうか。
      親コメント
      • by Anonymous Coward
        クエリの先頭にタブ文字があるとサニタイズせずに渡してしまうという
        「サニタイズせずに渡してしまう」というより、「エスケープせずに表示してしまう」というのが原因です。output.c の htmlprint() のコードを読むとわかります。
  • by onikuya (17148) on 2004年12月17日 1時59分 (#667171) 日記
    ナマズの絵がイィ
  • by Anonymous Coward on 2004年12月15日 22時06分 (#666534)
    ここでこのトピックアイコン見るの久しぶりのような気が(^^

    #NamazuユーザーじゃないのでAC
  • by Anonymous Coward on 2004年12月16日 1時43分 (#666678)
    Namazu入れた過去案件の数を思い返して頭が痛くなってきた。 ま、どうせすぐには動けないし、明日に備えて今日は早く寝よう。
  • by Anonymous Coward on 2004年12月16日 8時28分 (#666727)
    最近地震が多いと思ったら、こういうわけか。
typodupeerror

弘法筆を選ばず、アレゲはキーボードを選ぶ -- アレゲ研究家

読み込み中...