世界を動かす技術を、日本語で。

脆弱性を見つけた。彼らは弁護士を見つけた。

概要

  • ダイビングインストラクター兼プラットフォームエンジニアが、Cocos Islandで大手ダイビング保険会社の会員ポータルに重大な脆弱性を発見
  • ユーザーIDが連番かつデフォルトパスワードが強制変更されず、多くの個人情報が容易にアクセス可能な状態
  • 責任ある開示としてCSIRT Maltaと組織双方に報告、30日間のエンバーゴ期間を設けた
  • 組織の対応は法務的圧力と秘密保持要求が中心で、透明性やユーザー通知の確認が取れず
  • 問題解決後も開示プロセスに関する沈黙を強要されるも、透明性維持のため拒否した経緯

ダイビング中に発見した重大な脆弱性

  • Cocos Island 周辺で14日間のダイビングツアー中に脆弱性を発見
  • 大手ダイビング保険会社の 会員ポータル での事象
  • インストラクター として生徒を登録する際のプロセスに問題
    • 生徒の個人情報(氏名、生年月日、住所、電話番号、メールアドレス等)を入力
    • システムが自動でアカウントを作成し、ユーザーID(連番)とデフォルトパスワードをメール送信
  • 生徒が実際に受け取ったメールの ユーザーIDが連番 であることを確認
  • 認証方式の致命的欠陥
    • ユーザーIDは単なる連番
    • デフォルトパスワードは全員共通、初回ログイン時の変更強制なし
    • 多くのユーザーがパスワード未変更
    • レートリミット、アカウントロック、MFA等の安全策なし

脆弱性の証明

  • Selenium を使い、実際のブラウザ操作を自動化し検証
  • 極めて短いスクリプトで多数アカウントの不正ログインが可能
  • 取得できたデータ例(実際の出力はマスク済み)
    • 氏名、メール、生年月日、住所、電話番号、国籍等
    • 複数の未成年ユーザーの情報も含む
  • 確認後は直ちに全データを削除 し、必要最小限の検証のみ実施

責任ある開示と組織の対応

  • CSIRT Malta (MaltaCIP)へ最初に報告、同時に組織にもメールで通知
    • Maltaの NCVDP (国家脆弱性開示ポリシー)に則った手順
  • 組織へは30日間のエンバーゴ(公開猶予)を設定し、協力姿勢を伝達
  • 組織からの最初の返信は 法務代理人(DPOの弁護士) から
    • パスワードリセットや2FA導入を検討中と通知
    • 「先に当局へ通知したことで不利益が生じた」と不満表明
    • 「公表すると損害賠償や刑事責任を追及する可能性」を示唆
    • 秘密保持契約(NDA) への署名とパスポートID提出を要求
    • 当日中に署名を求める強硬な姿勢

法的圧力と透明性への抵抗

  • 秘密保持契約 で「開示プロセス自体についても沈黙」を強要
  • 研究者と組織間の 信頼と透明性 が責任ある開示の前提
  • 組織側が既に信頼を損なっているため、 全面的なNDAには応じず
  • データ削除のみを宣誓する修正版宣誓書 を提案
  • MaltaのNCVDPに基づきCSIRT Maltaへの報告は正当と主張
  • セキュリティ業界では 問題解決後の分析公開が標準的慣行 であることを説明
  • 組織はさらに Malta刑法第337E条(コンピュータ不正使用) を持ち出し、法的脅しを強化

責任ある開示の意義と今後

  • 被害ユーザーへの通知が行われたか不明 なまま
  • 組織の対応は 名誉回復や隠蔽を優先 し、ユーザー保護や透明性が軽視されがち
  • 責任ある開示には 研究者・報告者の権利と安全 も不可欠
  • 本件は 技術的欠陥 だけでなく、 ガバナンスや法的対応の課題 も浮き彫りに
  • 透明性とユーザーの権利保護 のため、今後も適切な情報公開を継続予定

Hackerたちの意見

その代わりに、データ削除を確認する修正された宣言にサインすることを提案した。誰かの個人データを保持するつもりは全くなかったけど、開示プロセスについて黙っていることには同意しなかった。そもそも、なんでサインする必要があるの? 会社は明らかに協力する気なんてなくて、支配したいだけだった。

これって、ダイバーズアラートネットワーク(DAN)ヨーロッパと、その保険子会社であるIDA保険会社のこと?

別のコメント者がこれをほぼ推測してたね。

著者がその組織の名前を出すのを恐れているようなので、法的脅威がうまくいったみたいだね。

投稿の法的な流れを追っていくと、すぐに絞られていく。著者は、大手の国際的なダイビング保険会社、インストラクター主導の学生登録ワークフロー、GDPRの適用、マルタの国家的な脆弱性開示ポリシーに基づくCSIRTマルタの明示的な関与を説明している。その組み合わせは非常に特定的だ。世界的に関連のあるダイビング保険会社は数社しかない。DANアメリカはアメリカに拠点があるし、DiveAssureはマルタの会社ではない。AquaMedはドイツの会社。実際にマルタに本社を置き、登録されている大手のダイビング保険会社はDANヨーロッパだけだ。組織がマルタに登録され、マルタの監督プロセスに従っているとされていることを考えると、構造と法的管轄だけでDANヨーロッパが最も可能性のある候補になる。

もしかしたら、ダイビングコミュニティでは「ダイバー向けのマルタの保険会社」って「青いチェックマークのある鳥をテーマにしたSNS」くらい分かりやすいのかもね。

かもしれないね。もしくは、彼らが知ってることをブラックハットに売るために利用したのかも。

ポータルは増加する数値のユーザーIDを使用していた > すべてのアカウントには静的なデフォルトパスワードが設定されていた。へへへ。俺はそれよりもずっと軽いミスで何度も面接に落ちたのに、もっとひどいミスをしている人が仕事を得ているなんて。実際に人のデータを扱っているシステムがたくさんあるのにね。

パスワードシステムで同じ問題を見つけたことがあるよ。しかもパスワードがデータベースに平文で保存されてる状態で…すべてのパスワードをクリアして、長いハッシュを保持できるようにデータベースのフィールドを拡張した(パスワードフィールドは12文字くらいだった)。それから「パスワードをリカバーする」機能を設定して、終業前に全ユーザーにメールを送った。これを読んでる人への私の提案は、パスワードハッシュのメカニズムにバージョンを付けて、将来的に必要に応じてハッシュ方法をアップグレードできるようにすることだよ。私は通常「v{version}.{salt}.{hash}」を使っていて、saltと結果のハッシュはsaltと結果のbase64文字列にしてる。同じことのために複数のデータベースフィールドを使うこともできるけど、あまりやりたくないな… JSONや他のラッパーを使うこともできるけど、ドットで区切ったbase64で十分だと思ってる。ハッシュが後でアップグレードされたこともあったし、バージョンが変わったらログイン時に新しいエンコーディングでパスワードを(再)ハッシュすることもあった… 一定の期間が過ぎたら、ユーザーに通知して古いパスワードを消去してリカバリープロセスを要求するようにしてる。余談だけど、ログイン/認証システムの中程度の良い実装に関するガイドがもっとあればいいなと思ってる。SSOなどのアプリケーションが複雑なだけの泥沼になってしまうことが多いから。以前の雇用主のために作ったいいシステムがあって、結構広く展開されてるんだけど…オープンソースにする許可を得ようとしたけど、「セキュリティの懸念」で賛同を得られなかったんだ(皮肉だね)。いつかまた別のものを作るかもしれない。

数年前、ある会社で別の会社を買収したんだ。私たちのQAチームがそのサイトを一通りチェックするように頼まれたんだけど、彼らが見つけたことは今でも友人や元同僚の間で笑いのネタになってる。* アカウントIDは数字で、増加していく * ログイン後のURLに含まれている、例えば ?account=123456 * ログイン後のリクエストに認証がない だから、ちょっと興味がある人なら、account_id=123457に増やして別のアカウントにアクセスできちゃう。次は123458を試して、面白いものがないかスペースを列挙してみる… :face-palm: :cold-sweat:

誠意を持って行動しているのに、相手がそうでない場合、生産的な議論や交渉はできないし、ただ自分の時間を無駄にしているだけだよ。ここでの唯一の賢明なアプローチは、最初のメールや脅迫の後にすぐにすべてのやり取りをやめることだった。マルタという国は、君が彼らや彼らのオンラインセキュリティを守らなくても、十分にやっていけるよ。

同意するけど、セキュリティ研究者や私たちのコミュニティも、脆弱性がほとんどの非技術者にとっては異質なものであることを認識する必要があるよ。非技術的な組織に対して冷たく脆弱性の報告をすると、正直言って彼らは怖がる。まるで、会ったこともない人が「裏のバルコニーのドアはダミーキーで開けられるよ」と言ってきて、実際に試したから知ってるみたいな感じ。そういう組織はどうしたらいいか分からない。誰かが財務情報を盗んだかもしれないと考えて、怖がってるんだ。内部での争いや、いろんな憶測が飛び交うことが多いけど、コミュニケーションが戻ってくるまでには時間がかかる。セキュリティに前向きな組織がやってることとは全然違うから、「善意」が悪意として受け取られることが多いんだ。

シニカルだね。最悪な部分?この状況でできる最善のこと。こんな組織とこれ以上やり取りを続けるなんて想像もつかないよ。

専門知識のない人間の考えを3つ。1) 法的な開示が難しすぎると、犯罪者を通じてしか情報が得られなくなるよ。2) 他の業界がこんな風に動いてたら、ビルの設計ミスを見つけた建築家を訴えることもできるよね。違いは、悪い基盤の知識が建物の崩壊を直接引き起こすわけじゃないけど、サイバー脆弱性の知識はリスクそのものだから。3) 通りすがりの人によるランダムな監査はあまりにも無計画すぎる。もしウェブサイトが私の本名や個人情報を要求できるなら、その情報が安全であることも要求できるべきだよ。どの業界が対象になるかは分からないけど、保険会社はサイバー監査を必ず受けるべきだし、同じ法律でホワイトハットを弁護士から守り、全ユーザーからの集団訴訟を認めるべきだと思う。それがあれば、基本的な脆弱性がなくなって、ソフトウェアエンジニアの方が弁護士よりも経済的になるはず。

コスタリカだったら、個人情報の漏洩についてはPRODHABに連絡するのが適切な方法だよ。それにコスタリカのCSIRT(csirt@micitt.go.cr)にもね。ここでは、個人情報を含むすべてのデータベースはそこで登録されて、データは安全でなければならない。

サービスごとに別のメールアドレスを使ってるよ。15年くらい前に、diversalertnetworkのメールアドレスにスパムが来始めたんだ。DANに連絡して、情報漏洩があったことを伝えたら、パスワードの変更方法を教えるメールが返ってきた。刑事告訴されなかっただけでもラッキーだと思わなきゃね。

サイバーセキュリティを改善する一つの方法は、サイバー犯罪者を獲物を狩る捕食者のように解き放つことだよ。企業は、自分たちのシステムに脆弱性があれば、それが武器として使われるかもしれないという恐怖を感じる必要がある。そうすれば、まだ悪用されていないセキュリティ問題について知らせるメールの重要性を理解するようになるはず。

セキュリティ研究コミュニティは何十年もこのパターンに悩まされてきた。「脆弱性を見つけて、責任を持って報告する」と、法的措置をちらつかされる。これがあまりにも一般的だから、「冷却効果」って名前がついてる。政府や企業はサイバーセキュリティがどれだけ重要か大口を叩くけど、セキュリティ研究者を助けてくれる人たちに対して不当な敵意を持たないようにする法律が見たいな。