数百サイトがFirebaseのセキュリティルール設定を誤って合計1億2500万件の機密情報が公開されてしまっていた

数百サイトがFirebaseのセキュリティルール設定を誤って合計1億2500万件の機密情報が公開されてしまっていた - 画像


Firebaseのセキュリティルールの設定を誤っていることが原因で数百のサイトが平文パスワードや機密情報を含む合計1億2500万件のレコードを公開してしまっているとセキュリティエンジニアの「Logykk」「mrbruh」「xyzeva」という3人がブログに投稿しました。
900 Sites, 125 million accounts, 1 vulnerability - env.fail
https://env.fail/posts/firewreck-1/

数百サイトがFirebaseのセキュリティルール設定を誤って合計1億2500万件の機密情報が公開されてしまっていた - 画像


セキュリティエンジニアの3人はChattr.aiというサービスでFirebaseの設定が間違っていることを発見しました。Chatter.aiではウェブサイト上の正規ルートで登録するとアカウントの権利が適切に制限されるものの、FirebaseのAPIを直接使用してアカウントを作成するとFirebase上のデータベース全てに対する権限が取得できてしまっていました。
3人は「他のサイトでも同様の設定ミスが発生しているのではないか?」と疑い、インターネット全体をスキャンすることにしたとのこと。まずmrbruh氏がPythonでスキャンスクリプトを作成してみたものの、徐々にメモリの消費量が増加していき、1時間ほどスキャンしたところでメモリが足りなくなる問題が発生。続いてLogykk氏がGoでスキャナーを作成し、2~3週間かけてスキャンを行いました。
Firebaseの設定ミスが発生する可能性がある構成のサイトは合計55万サイトだったとのこと。xyzeva氏が「Catalyst」という二次スキャン用のツールを作成し、一般的なFirebaseデータベースへの読み取りアクセスをチェックしていきました。
読み取りアクセスが可能だった場合には100レコードのサンプルを収集し、含まれる情報の種類を確認するとともにデータベースの合計サイズとレコード1件あたりのサイズを比較して何件のデータが公開されたのかを推計。結果を下記の通りプライベートなデータベースに保存しました。

数百サイトがFirebaseのセキュリティルール設定を誤って合計1億2500万件の機密情報が公開されてしまっていた - 画像


推計結果は下記の通り。
全レコード数:1億2460万5664件
氏名:8422万1169件
メールアドレス:1億626万6766件
電話番号:3355万9863件
パスワード:2018万5831件
銀行口座などの請求情報:2748万7924件
3人は設定を間違っているサイトに連絡を行いました。13日間で842通のメールを送信し、24%のサイトで設定が修正され、1%のサイトから返信があったとのこと。また、2件のサイトがバグ報奨金を提供しました。
なお、1000万件のパスワードを平文で保存していたほか、800万件の銀行口座情報を公開してしまっていたオンラインギャンブルサイトのカスタマーサポートにFirebaseの設定ミスを報告したところ、「彼女は居る?」「私が彼女になりたい」「めっちゃ賢いね」などこびてきたとのことです。

数百サイトがFirebaseのセキュリティルール設定を誤って合計1億2500万件の機密情報が公開されてしまっていた - 画像


エンジニアが集うニュースサイト「Hacker News」のスレッドでは、Firebaseの中の人がセキュリティルールのミスが多発する理由として、「セキュリティルールはまだ新しい概念で、新たにチームに参加してデータを追加した人がセキュリティルールを見直さないこと」「バックエンドがランダムな社内実装であることで発生する隠匿性がないため一括スキャンされてしまうこと」「セキュリティルールそのものの難しさ」を挙げました。

ジャンルで探す