2017年2月22日 星期三

協助修復噗浪舊版 API 資料洩漏

個人比較常使用(說上癮似乎也可以)的社群平台是噗浪( Plurk ),基本上也快六年了,雖然算不上噗浪老屁股但也算中流砥柱了(這說法好像怪怪的

這邊不贅述為何我覺得噗浪比臉書還要好,純粹是講一下跟資安有關的東西,當時就想寫這篇的,但富堅了快四個月(羞

噗浪在大約四年前的時候推出了「偷偷說」這個功能,當然早期的功能跟完整性沒有現在這麼完善,但經過了四個年頭也趨於完整了,如果一切都照劇本來說的話啦

早期的偷偷說只有發文者可以隱藏自己的身分,暱稱用一個 ಠ_ಠ 顯示、且帳號為 anonymous 的匿名帳號去隱藏身分,回文者甚至發文者在後續回文都會露出本尊帳號,於是產生出一種自動化的過濾器去將所有可以看到該偷偷說並且回應的使用者帳號去作分析,以各帳號的好友清單作交叉比對,過濾、篩選出可能的偷偷說發文者

後來改成發文者暱稱一律顯示 ಠ_ಠ,而回文者以亂數的暱稱顯示,如果點擊亂數的隨機暱稱或發文者也是返回到 anonymous,所以理論上使用好友清單比對的方法是失效的,頂多各個回文者自爆自己是誰然後手動比對,當然也有哪種故意養好友數很少的分身帳號去確認是不是特定使用者發偷偷說的方法,但說真的誰沒事這麼無聊,除非是那種在小圈圈裡講別人壞話還怕被知道的

當然之後也出過一個很好笑的臭蟲,是利用回報違規系統的問題,在那個臭蟲修復前只要對該偷偷說按下回報濫用就可以看到發噗者,當然後來也修復了

理論上在這些臭蟲與當初沒考慮到的環節修復、修正後,偷偷說在正常使用且不違背噗浪使用準則的情況下是很安全且有隱私的,但之後還是發現了一個頗嚴重的臭蟲

根據噗浪官方的說法,噗浪的內部資料庫、伺服器等後端在跟第三方應用(如 PlurkCustoms 等瀏覽器外掛)、行動程式( App )與機器人(例如機器狼或是淺草籤這種)的聯繫上是使用我們所熟之的應用程式介面( API ),而目前的 API 是第二版( 2.0 ),而第一版的情況不明


2017_02_22_165053
噗浪所使用的第二版應用程式介面( API 2.0 )

某天在一個偶發事件中,發現一個有點年紀(講難聽就是很久沒有更新)的 Android App 可以在某些情況下,甚至不用經由刻意操作就看到偷偷說的發文者,由於用偷偷說發了不少產業辛密跟八卦,甚至曾經有過破千轉的偷偷說,所以馬上就有警覺心開始研究這個問題

首先,我沒有跑 Android 的裝置,所以怎麼辦?當然是馬上開虛擬機來研究一下,而用虛擬機的優點是你可以直接開其他分析軟體來分析封包,看看除了能看到發文者之外,還能夠看到什麼其他的東西,另外一提,噗浪的 API 傳送的格式是 JSON 的樣子

後來分析了一下是 API 1.0 在偷偷說的部分處理的不是很好,應該說發文者的本尊帳號資訊( UID )還是會傳送所以特定的 App 可以用錯誤的方式去顯示出發文者

再來就是簡單的寫問題回報給噗浪官方,但我畢竟不是相關科系或專業,程式語言部分也止於 HTML、CSS 與 PHP 等網頁端的部分,所以寫的稍微含蓄一點就是了,畢竟這個不是我的專業,但我知道如果 App 能夠用誤操作顯示不改顯示的訊息應該是 API 的問題

在二十三號晚上確定問題之後用噗浪網頁上的聯絡功能寫了封信,三天內就收到了回訊


2016_10_26_155818
先是看到噗幣的贈送通知,來自噗浪技術部
2016_10_26_160157
接著是詳細的回信,確定是噗浪 API 1.0 的洩漏問題
2017_02_22_135424
於是我的噗浪就出現駭客徽章了(灑花

其實想說的是,即使不是專業資安或程式設計師,只要有發現異常的能力,也可以找出資安風險與漏洞