Skip to content

Instantly share code, notes, and snippets.

@mala
Last active July 9, 2022 03:08
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save mala/8f264786026d105c7144dcbed8240bc9 to your computer and use it in GitHub Desktop.
Save mala/8f264786026d105c7144dcbed8240bc9 to your computer and use it in GitHub Desktop.
GraphQL採用サービスに追加で脆弱性を報告した話

GraphQL採用サービスに追加で脆弱性を報告した話

前置き

  • 個人の活動であり文責は全てmalaにあります。
  • 網羅的に調べているわけではないので、自分が利用していたり、調査したサービスに他の脆弱性が無いことを保証するものではないです。

概要

  • ainiというサービス https://helloaini.com/ のGraphQLでの情報露出の脆弱性に関する記事を見て、追加で調べたところ、Webサイトやアプリ上から参照できない他のユーザーのフォロー/フォロワー関係をGraphQL経由で取得することが出来ることを発見した。
  • 9月24日(金)の日付変わったころに報告したところ、迅速に修正された。修正されたようなので開示して良いか訪ねたところ、問題ないとの返信をもらった。

malaから問い合わせ

報告内容と、脆弱性が修正された旨をブログ、Twitter等で公表しても構わないでしょうか? 差し支えなければ正確な修正時刻を教えて下さい。 もし、他の箇所にも問題がないか精査中で開示されると困るといった事情があれば、1週間程度を目安に待とうかと思います。

aini運営事務局からの返信

引き続きセキュリティの改善の取り組みを行って参りますが、継続的なものとなりますので、公表タイミングについてご考慮いただく必要はございません。

経緯

所感

  • 時系列の食い違いについては、正確なところがよく分からなかった。aini運営事務局によれば、複数の経路で同一ユーザーから報告を受けたとのことで、脆弱性を把握した時刻はプレスリリース通りとのことだった。
  • 通常のお問合せフォームで脆弱性の報告をすると、うまく担当部署と繋がらなかったりして対応が遅れるようなケースが良くあるのだが、ainiは返信も的確で早く、非常にしっかりしている印象を受けた。
  • 脆弱性の公表についても差し止められるようなことがなく好印象。

タイムライン

  • 2021-09-23 23:31 ユーザー登録する
  • 2021-09-24 00:30 脆弱性報告する
  • 2021-09-24 13:35 ainiから報告受領と修正方針の連絡
  • 2021-09-24 17:18 脆弱性が修正される
  • 2021-09-28 23:06 正確な修正日時と、公表してよいか問い合わせる
  • 2021-09-30 10:28 ainiから公表して良い旨の連絡

aini運営事務局によると、修正が反映された時刻は 2021-09-24 17:18 2021-09-26 17:18 とのこと。 こちらでは、24日(金)17時頃の時点で、他人に対するフォロー/フォロワーの取得リクエスト通らなくなっているのを確認している。 (全般の修正確認の前に、hotfixとして金曜日のうちに対応したのかもしれない)

9/30 追記

  • 修正時刻を最初、09-26 17:18 と連絡を受けたが誤りで 09-24 17:18 が正しいとのこと。(報告当日の金曜日の修正)

報告内容の詳細

GraphQLの脆弱性の修正不備について

メッセージ本文:
こちらの記事を見かけて、気になってainiのユーザー登録をしてみました。
https://zenn.dev/mipsparc/articles/a818970a19ade6

2点問い合わせがあります。

1. GraphQLから、他人のフォロー、フォロワー情報が参照できる

他の利用者のフォロー、フォロワーをGraphQLから参照することが出来ます。

フォローしたことがホストに通知されるとの説明はありましたが、
フォロー、フォロワーが一般公開されるというような説明は見当たらず、Webサイトやアプリ上だと公開されていないように見えます。
ブロックしているユーザーの一覧については、自分の試した範囲だと取れないようでした。

再現手順 (Google Chromeの開発者機能を利用)
- ainiにログイン後 https://helloaini.com/me/following にアクセスし、フォロー、フォロワーを取得しているGraphQLのリクエストを Copy as cURLでコピー
- "operationName":"GetFollowingsAndFollowers","variables":{"id":自分のid,"page":1,"perPage":20} となっている部分を、任意のidに書き換える
- aini運営事務局のid 856 に書き換えて、フォロー、フォロワーが取得できることを確認しました

有効な認証Cookieもしくは、Cookie無しの状態から、他人のフォロー、フォロワーを参照することが可能。
(自分の確認した範囲だと、有効な認証Cookieでも、他人のブロックリストは返さないようでした)

影響範囲
利用者が、一般には公開されないという前提でフォローしている場合には、プライバシー上の問題になりうると考えます。
特定の利用者に対して、第三者から、どういう交友関係があるのかを把握されうる状態になっています。

修正方法についての提案
現時点で不要であれば、他のユーザーのフォロー、フォロワーは参照出来ないようになっているべきだと考えます。
将来的に公開する前提であるならば、明確に説明したり、公開非公開を選択する機能を用意すべきだと考えます。

2. 報告者の記事とainiのリリースで経緯の時刻が異なる件

報告者の記事では 6/18 19:56 に報告となっていますが、
リリース文の経緯説明では 2021年6月18日 17:43 に報告、2021年6月18日 17:54 に社内調査で確認となっています。
こちらはどちらが正しいのでしょうか? あるいは複数人から報告されたのでしょうか。
差し支えなければご回答いただければ幸いです。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment