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

ショップチャンネル、特定の一人の個人情報が特定の一人にだけ漏曳するシステム障害 27

ストーリー by nabeshin
本当に一人なのか確認中? 部門より

backslashdot 曰く、

テレビショッピングチャンネルの大手であるショップチャンネルのWebサイトでのサービスである 「ネットでSHOP」、「ケータイでSHOP」が システムの不具合で停止しているとのことである。 ショップチャンネルのWebには現在も改修作業中である旨のメッセージがでている。 これだけだと珍しい事象ではないわけだが、その不具合というのは、 特定の1人の顧客の氏名、住所、電話番号などの個人情報が、別の特定の1人の顧客から閲覧できるという障害だったということだ。 原因の究明を進めた結果、1人の顧客にしか障害が発生しないことが分かったため、サービスの停止と原因を公表したとのことだが、 特定の1人のユーザにしか起きない事象というのは実に興味深い。どのようなコードであれば、このような事象が起きるのだろうか。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 似たような不都合が、別のサイトでも発生していました。
    カロリヲというダイエットサイトなのですが、
    メールアドレスが他の1,2人からみれてしまう [calorio.jp]不都合があったようです。

    サイトは今も閉鎖中です。
    こちらの原因は


    (1)ニックネーム、メールアドレス、パスワードを入力し仮登録を行っていただく。
    (2)カロリヲから、(1)で入力していただいたメールアドレスに、お客様ごとに異なる本登録用URLの記載されたメールを配信。
    (3)メールに記載されたURLより本登録用ページへアクセスしていただき、体重や自己紹介などを入力し、本登録をしていただく。

    上記手順(2)において、システム障害により同一時刻に仮登録を行ったお客様が複数いらっしゃった場合、それらのお客様へ同一のURLを送信したことによるものと判明しました。


    なので、仮登録のURLの一部をランダム生成しなかったことによるようです。
    • ランダム生成したらそれこそ衝突しますよ。
      親コメント
      • >>なので、仮登録のURLの一部をランダム生成しなかったことによるようです。
        >ランダム生成したらそれこそ衝突しますよ。

        時間+ランダムなら…と思わなくは無いですが、ただ単に
        「ユニーク」やら「重複しない」という言葉が出てこなかったのかと。
        親コメント
        • by Anonymous Coward
          そこまでヒットするとは思わなかった?
          • >そこまでヒットするとは思わなかった?

            「時間+ランダムなら…と思わなくは無いですが、ただ単に」
            の補足ですが…。

            昔、自作プロクシのリクエストログを個別のファイルで出したくなった時の話ですが…。
            ”日時分秒ミリ秒+ミリ秒シードの4桁乱数”でファイル名を吐く部品を作ってみたところ
            一秒に1000ファイル以上吐いて、ファイル名は重複しませんでした。

            ユニークな名前にする事だけ考えてランダムにしていましたが、ログなんだからランダムに
            する意味がないじゃんと…、桁増やして連番に変えたら秒間4000ファイルに…。

            無駄なボトルネックを作っていましたよorz 馬鹿だね俺は。

            ランダムで重複しなかったのは、ある意味たまたまかと…。
            親コメント
            • 誤読していたらゴメンナサイ。

              ”日時分秒ミリ秒+ミリ秒シードの4桁乱数”でファイル名を吐く部品を作ってみたところ

              「その時点でのミリ秒の値」をシードにした乱数ってことでしょうか? ストレートに解釈すると、同じミリ秒では毎回同じ乱数が出そうな気が。
              ファイル名のフォーマットを変えたら秒間4000ファイルに増えたのは、実は「乱数のときにはファイル名が重複していたから」なのでは…。
              (上書きされるので、重複していない1000個のファイルができたように見える)

              それにしても、毎秒4000ファイル作成ってすごいですね。どれだけのリクエストに耐えるproxyだったのでしょう。
              親コメント
              • >誤読していたらゴメンナサイ。
                >それにしても、毎秒4000ファイル作成ってすごいですね。どれだけのリクエストに耐えるproxyだったのでしょう。

                誤読ではなく、私の言葉不足です(汗)
                その上、正確には”にているだけで参考にならない話”なのですよ。

                ファイル数は”部品のテスト”でのファイル数ですよ。
                プロクシにつっこんだら、500いきませんでしたorz(ネットの速度が…。)

                >「その時点でのミリ秒の値」をシードにした乱数ってことでしょうか? 
                >ストレートに解釈すると、同じミリ秒では毎回同じ乱数が出そうな気が。

                「日時分秒ミリ秒+”ミリ秒を元にしたランダム”」なのです。実行時に同じ
                「日時分秒ミリ秒」だった時に、「ミリ秒を元にしたランダム」を付加した意味が出てくる様にと。
                ファイル生成が早いと「日時分秒ミリ秒」だけでは”ファイル名が重複する”(した)ので、
                ユニークな名前とする為、実行時のミリ秒を元にランダム値を付加したわけです。
                ランダムの桁数は”4桁で十分だろう”と適当に(汗)

                できたファイルの一覧を見ていて”なんとか生成順にならないかのぉ”と思ったときに
                初めて「付加値をランダムにする必要なんてないじゃん」とorz

                >ファイル名のフォーマットを変えたら秒間4000ファイルに増えたのは、
                >実は「乱数のときにはファイル名が重複していたから」なのでは…。
                >(上書きされるので、重複していない1000個のファイルができたように見える)

                ファイル名が重複すると意味をなさなくなるので、生成に失敗したら即落ちるようにしていました。
                が、バグの可能性が否定できません(汗)
                実際、同じ「日時分秒ミリ秒」の間だけしか重複する可能性がないので、たまたま重複しなかったのかと。
                #今更ながら、間抜けさに気づいた当時の俺に拍手です(汗)

                今から検証しようにも、今時々使っている”直したソース”しかないorz
                親コメント
      • >ランダム生成したらそれこそ衝突しますよ。

        uuid のような徹底した乱数を想定していました。
        データベースが一つなら、ID + 時刻 + 乱数 あたりをハッシュにかければ
        十分でしょうか。

        uuid ぐらい長いと、まず衝突しないだろうということで
        最近はユニークさが要求されるキーとかに容易に使っちゃってますけど、
        これってまずいのでしょうか?
        親コメント
    • by Anonymous Coward
      昔、自分専用のCGIスクリプトばかり作ってた頃は、
      横着して時刻をそのまま使ってたけど、
      ユーザが二人以上になったら同時アクセスは起こり得るわけで、
      子供のお遊び以外でその設計は有り得ないと思うんだ...。
  • by Anonymous Coward on 2008年01月25日 6時51分 (#1286179)
    たまに他のユーザの個人情報が表示されることがありますよ。
    再度ログインしたりすると元に戻るようですが。
  • by Anonymous Coward on 2008年01月24日 13時48分 (#1285754)
    文字コード変換の過程で化けちゃったとかで、同一キーになっちゃったとかかなぁ。
    あるいは、ショボいハッシュ使ってて衝突しちゃったとか。
    • by sumiiiii (6360) on 2008年01月24日 14時21分 (#1285783) ホームページ
      MySQLを使ってて、
      IDカラムにbinaryをセットしてなくて、
      登録時はアプリケーション側で大文字小文字の区別をしつつ同一IDがないかを確認して登録して、

      認証するときに where id='hoge' and password = 'hogehoge'; な行が*1行以上あるか*で確認して、

      ユーザー情報を表示するときには where id='hoge' で取得できた1行目のデータを表示、

      なんて実装になっていれば、ID:hogeの人がID:Hogeの人のデータを見れてしまう可能性はありますね。
      参考:デフォルトでは、MySQL 検索では大文字と小文字は区別されません [mysql.com]
      親コメント
      • by Anonymous Coward
        それだと、hOgeもhoGeも見れるから、一人という事は無いかと。
    • by TarZ (28055) on 2008年01月24日 17時00分 (#1285941) 日記
      今回の件が、ハッシュの衝突が原因なのかどうかは判りませんが、仮にそうだとしたら興味深い事例ですね。

      100万人の会員がいたとして、半々くらいの確率で「その中の2人がコリジョンを起こす」のだとすると、ハッシュは40ビットあたりですかね。
      逆にハッシュが32ビットだったとしたら、会員数は6万人程度かな。

      例えば、DB記録の都合上IDを32ビット数値で扱いたくて、MD5の一部から32ビットだけ抽出したとか。

      「32ビットの空間なら、50%の確率で衝突が起きるのはユーザーが21億人になったとき。余裕、余裕」
      親コメント
    • by Anonymous Coward
      携帯だったら、携帯のUIDを自動ログイン用にハッシュで保管していて、それがコリジョンした可能性はあるかなぁ
  • by Anonymous Coward on 2008年01月24日 22時36分 (#1286087)
    うちにもMicrosoftから毎年他人の受賞メールが1通届きます。
    去年は連絡もしたのに。
    どうしたらいいんですかね。
  • by kokeko (31517) on 2008年01月25日 9時31分 (#1286195) 日記
    最後の一人または最初の一人だけなんか漏れてる・・・とか?
    --
    #ACは価値ある発言してください
  • by Anonymous Coward on 2008年01月24日 13時38分 (#1285745)
    そら、単にある顧客のアカウントがハッキングされたってだけじゃね?
  • by Anonymous Coward on 2008年01月24日 13時48分 (#1285753)
    IF 別の特定の1人の顧客
            見せない
    END-IF

    コボラー風でやってみた
  • で、ハッシュが衝突した二人を混同したと。
  • by ayasama (17717) on 2008年01月24日 14時02分 (#1285769) 日記
    0から処理を始めるルーチンと、1から処理を始めるルーチンが混在していた。
    そのため、顧客管理番号が1ずつズレて処理されてしまった。

    で「特定の1人の情報が、別の1人に漏洩」が顧客全員で起こったとか?
  • by Anonymous Coward on 2008年01月24日 15時41分 (#1285860)
    ってことだよね。
  • by Anonymous Coward on 2008年01月24日 16時04分 (#1285881)
    実は顧客が一人しかいなかった
    なので本当は全員が自由に読めるシステムだけど公表は「特定の一人」
  • by Anonymous Coward on 2008年01月25日 2時19分 (#1286160)
    認証データのユーザーIDがプライマリキーになってない。
  • by Anonymous Coward on 2008年01月25日 11時32分 (#1286236)
    IDかなにかの末尾1ビットが落ちれば、必ず2人が同じにならない?
  • by Anonymous Coward on 2008年01月25日 11時56分 (#1286257)
    排他処理に漏れがあって、最初に処理していたユーザの情報(内部で使ってるユーザIDなど)が後から処理が走ったユーザの情報で書き換わったとかなら嫌な感じですね。
typodupeerror

「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常

読み込み中...