謹啓
平素は格別のご高配を賜り厚く御礼申し上げます。2019年11月13日にレスポンスデータ内に設定情報が意図せず含まれてしまうという問題が発覚しましたので、下記の通りご報告致します。
謹白
記
KARTEからエンドユーザーに対し、接客サービスが配信された際、エンドユーザーのブラウザに対して送信されている情報の中に、KARTE管理画面内の「プラグイン設定」で設定された情報が含まれていました。
2019年3月18日 〜 2019年11月13日
2019年3月18日
本障害の原因となる反映が行われる
2019年11月13日15時ごろ
プレイドのエンジニアが作業中に、トラックサーバーからのレスポンスデータ内に、意図しないデータが含まれていることを発見
2019年11月13日16時42分
本不具合に対する修正処理を反映
2019年11月21日13時38分
フィルター機能の修正を反映(9.(1)にて詳細は記載)
KARTEで接客サービスが配信された際に、管理画面内の「プラグイン設定」で各プラグインごとに設定を行う詳細項目の内容が、エンドユーザーのブラウザに対して送信されているレスポンスデータ内にJSON形式で含まれていました。
なお、該当データは、レスポンスデータ内に含まれているのみで、画面上には一切表示されていません。データを確認するには、ブラウザに付属のDeveloperTools等を用いて、レスポンスデータ内の詳細な情報を閲覧する必要がありました。
例えばGoogle Chromeにおいては、下記のような操作によって該当データが閲覧できる場合がありました。
「プラグイン設定」内に保存した情報を、サイト上のエンドユーザーが一定の操作の上で、閲覧することができる状態にありました。閲覧が可能であったデータおよび、該当データを用いて可能となる操作については、別紙に記載します。
なお、本不具合の公表時点において、本不具合を用いた連携サービスに対する被害は一切報告されていません。
(1) 実装時の命名上の問題
本不具合の対象となった、プラグイン設定内の情報は variables という名称のオブジェクト内に含まれているものでした。この variables というオブジェクト名が、一般的にはセキュアな情報が含まれていると認識しづらいものでした。
(2) アクション配信データ作成時の仕様に対する認識漏れ
アクション配信データ作成時に、上記(1)の variables というオブジェクトを代入する仕様となっていました。これは、プラグイン設定内の情報を、接客配信に用いることがあるためですが、実際に用いるプラグインの情報のみならず、設定している全てのプラグイン情報が一括して渡されていました。
(3) フィルター機能に対する実装者の認識漏れ
エンドユーザーに対するアクション配信データは、KARTEトラックサーバーより送信されますが、送信直前にフィルタ機能により、不要なデータの除外処理を行っています。このフィルタ処理についてはブラックリスト形式によって行われているため、新たな機能・データの追加時には、リスト内容を追加する必要がありました。
(4) 上記(1) 〜 (3) のソースコード上の距離
(1) 〜 (3) の処理はソースコード上では別々の箇所に記述されていたため、本不具合を発生させる処理になっていることを十分に認識できる状態にありませんでした。
レスポンスデータ内に、プラグインの設定情報が含まれないように修正しました。
KARTEとの連携に用いている認証情報のリフレッシュをお願い致します。
対象となる情報は別紙に記載の通りです。
(1) フィルター機能の見直し
フィルター機能の処理を180度見直し、ブラックリスト形式から、ホワイトリスト形式へと変更しました。これにより、新たな機能・変数が追加された場合でも、フィルタ機能によりブロックが可能になります。
(2) テストケースの追加
トラックサーバーからのレスポンスデータ内に、意図しないデータが含まれないか、を検証するテストケースを追加します。
(3) ソースコードのリファクタリング
オブジェクト名から内部に格納されている情報が推測しづらいこと、処理間のソースコード上の距離が離れており、一連の処理が認識しづらいこと、といった問題を解消するために、ソースコードのリファクタリングを行い、変数名や記述順の見直しを行います。
(4) 第三者機関によるセキュリティ検査の実施
第三者機関によるセキュリティ検査を実施し、本件と同様の不具合が存在しないかを確認します。また、本検査は今後も定期的に実施する予定です。
このたびはご迷惑をおかけして、誠に申し訳ございませんでした。
以上
2019年11月21日
株式会社プレイド
プラグイン名 | Salesforce |
---|---|
表示されていた重要な項目 | クライアントID クライアントシークレット |
想定されうる事項 | 接続アプリケーションに対するIP制限を実施していない場合、上記認証情報に対して割当てられたロールで可能な操作は、全てAPI経由で実行が可能です。 |
プラグイン名 | Salesforce Marketing Cloud |
---|---|
表示されていた重要な項目 | クライアントID クライアントシークレット JWT署名シークレット |
想定されうる事項 | 上記認証情報に対して割当てられたロールで可能な操作は、全てAPI経由で実行が可能です。 しかしながら、データの取得やイベントの発火には、別途Salesforce Marketing Cloud管理画面から発行されるキーが必要な場合が多く、実データに影響を及ぼす操作は困難だと推測されます。 |
プラグイン名 | SFTP連携(旧データテーブルの連携機能で、KARTE Datahubとは無関係です) |
---|---|
表示されていた重要な項目 | ログインID 秘密鍵 パスフレーズ |
想定されうる事項 | SFTPサーバーにIP制限などを行っていない場合、接続が可能です。 |
プラグイン名 | Marketo |
---|---|
表示されていた重要な項目 | Client Id Client Secret Munchkin API 秘密キー Access Token |
想定されうる事項 | 接続アプリケーションに対するIP制限が実施されていない場合、上記認証情報に対して割当られたロールで可能な操作は、全てAPI経由で実行が可能です。 ただし、個人情報を抽出するためには対象のemailもしくはlead_idを指定する必要があります。 また、管理画面上で可能なキャンペーン作成・配信なども可能です。 |
プラグイン名 | KARTE for App |
---|---|
表示されていた重要な項目 | [プッシュ通知2] FCM サーバーキー [プッシュ通知3] FirebaseプロジェクトID |
想定されうる事項 | アプリにプッシュ通知を配信することが可能です。ただし配信するターゲットに、デバイスの登録トークン、デバイス グループの通知キー、トピックを指定する必要があります。 |
プラグイン名 | Google カレンダー |
---|---|
表示されていた重要な項目 | アクセストークン(内部利用値) |
想定されうる事項 | カレンダー情報・スケジュールを取得することが可能です。 |
プラグイン名 | Sendgrid |
---|---|
表示されていた重要な項目 | API key |
想定されうる事項 | Sendgrid APIを利用したメールの送信、バウンスリスト(対象メールアドレスを含む)の取得、IPアドレスリストの編集をすることが可能です。 |
プラグイン名 | MakeShop |
---|---|
表示されていた重要な項目 | ショップID 認証コード |
想定されうる事項 | 「会員データ連携設定」での設定範囲に応じて、会員データ情報を取得・登録・変更・削除をすることが可能です。 |
プラグイン名 | KARTE Talk |
---|---|
表示されていた重要な項目 | Slack Webhook URL(設定していた場合) |
想定されうる事項 | URLを利用し、メッセージを送信することが可能です。 また、ChannelはURLのクエリパラメータで指定可能なため、Channel名が判別されている場合は、URL記載されているChannel以外にも送信可能です。 |
プラグイン名 | LINE |
---|---|
表示されていた重要な項目 | Messaging APIチャネルのチャネルのアクセストークン チャンネルのリフレッシュトークン Messaging APIチャネルのChannel ID Messaging APIチャネルのChannel SecretLINEログインチャネルのChannel ID LINEログインチャネルのChannel Secret |
想定されうる事項 | UserIDが判明していた場合、Messaging APIを利用し、メッセージを送ることができますが、通常UserIDはwebhookイベント経由で取得するため、第三者が取得できることはありません。 |
プラグイン名 | Slack |
---|---|
表示されていた重要な項目 | access token(内部利用値) |
想定されうる事項 | Botとして当該ワークスペース内にメッセージを送信することが可能です。 |