1.脆弱性の検出
脆弱性はnewsfeed.get API メソッドにありました 。 最も一般的なリクエストを実行すると、オブジェクトは、特に4〜5人のユーザー(プロファイル)の配列を返しました。 ドキュメントから判断すると、彼らはニュースフィードのユーザーであるはずです。 しかし、フィードでこれらの人々を見つけることができず、多くの場合、自分のアカウントのみが配列で見つかりました。
私はこれに興味があり、自分のグループのエントリーを使ってニュースフィードでこの方法をテストし始めました。 夜をテストに費やして、パターンを見つけました。グループにエントリを作成した管理者がアレイに戻り、1つの投稿ではなく最後の4つのグループにこのエントリをグループに提案した人々が、順序なしにごちゃ混ぜになりました。
つまり、newsfeed.getにニュースフィードの最後の投稿を取得するように要求すると、プロファイルアレイで、作成した管理者と、このエントリと前の3つを提案したユーザーが返されました。
これはすでにかなり深刻な脆弱性でしたが、特定の投稿を特定の人に関連付けたいと思いました。
私が最初にしたことは、分析された各コミュニティを個別のニュースリストに入れることでした。そのため、異なるコミュニティのユーザーが同じアレイにいる場合の問題を解決できました。 2番目のステップは、countパラメーターを1に減らすことでした。そのため、グループ内の各投稿のプロファイルの配列を取得しました。 これらのアクションの後、問題の分析がはるかに簡単になりました。
まず、特定のコミュニティでニュースリストを作成するスクリプトを書きました。 その後、彼はこのコミュニティの各投稿について、プロファイルを含む配列を収集しました。 ここでAPIの制限にぶつかりました。過去12日間の投稿しかありませんでしたが、それでも作業できます。
投稿の最大数の配列を収集した後、スクリプトはそれらを分析し始めました。 そもそも、正確に4つの配列で見つかったユーザーIDがありました。 これらのアレイに関連付けられている4つのポストのうち、最も早いものが見つかりました。 この投稿は、idが見つかったユーザーによってコミュニティに提案されました。 次に、これらのユーザーを配列から除外し、管理者のリストを作成しました。
ご希望であれば、 Githubで脆弱性の悪用コードを確認できます。
2.脆弱性を報告する
意識のあるユーザーとして、その後、脆弱性を報告しに行きました。 オープンバグトラッカーはこの種の脆弱性に最適な場所ではないことがわかったため、すぐに開発者に直接連絡しました。 最初の開発者は単に私のメッセージに答えなかった、2番目の開発者は4日後に答え、感謝し、それを修正する方法を考えると約束した。
VKontakteには公式のバグバウンティプログラムがないことは知っていましたが、内部通貨(投票)の脆弱性に対するインセンティブが頻繁にあることも知っていましたが、脆弱性が修正されるまでこれらの問題を延期することにしました。 その後、私は時々脆弱性を監視し始めました。 これは2015年4月まで続きました。脆弱性と報酬に関する次の記事を読んだ後、脆弱性を再度確認しましたが、修正されませんでした。
脆弱性についてテクニカルサポートに連絡することにしました。2週間待った後、開発者にコードが引き渡されることを知らせ、ニュースが届くとすぐに通知します。
来るかもしれない、私は再び脆弱性をチェックすることにし、それは最終的に修正されました。 8か月かかりました。 約束にもかかわらず、誰も私に連絡しなかったので、私はそれを自分で書き、同時にソーシャルネットワークが報酬を支払う基準を見つけることにしました。 私は、技術サポートからの回答と、別の回答を待つ回答自体を待つ次の週を待っていました。
脆弱性に対する報酬プログラムの開始から数時間後の5月29日にのみ連絡を受けました。「脆弱性はすでに修正されているため、新しいプログラムに該当せず、提供するものもありません」とのことです。
まとめ
- VKontakteのプライバシーに関する別の脆弱性
- 修正するのに8か月と3つの申し立てが必要でした
- 報奨金に関する質問は、バグ報奨金プログラムの開始まで無視されました。その後、私はその名目で支払いを拒否されました
- 技術サポートは、どのアクションも無視して長引くことを推奨しました
UPD :インセンティブプログラムの開始後、状況はそれほど変わっていないようです。