當前位置:
首頁 > 新聞 > Facebook Ads廣告業務API介面的源代碼泄露漏洞

Facebook Ads廣告業務API介面的源代碼泄露漏洞

此前,我對「Windows NT」 和 「Windows Phone」模型有所研究,後來,我看到好多人參與了Facebook的漏洞賞金項目並收穫了獎勵,所以,我想那我也來試試吧,看看能不能入圍Facebook的白帽致謝榜,想當年我也兩次入圍微軟操作系統漏洞安全名人堂呢。

而此時,我連什麼是OWASP Top 10都一無所知,不管了,那就先試著研究一下Web滲透測試吧。之後,我認真琢磨了HTTP請求機制,閱讀了大量Web漏洞分析文章,總算找到點了門道。


發現漏洞


一個多月後,我就發現了存在Facebook Ads廣告業務系統API中的一個漏洞。存在漏洞的API是一個圖片處理介面,它用於Facebook商戶賬戶上傳廣告圖片,上傳的圖片會儲存在一個名為「/adimages」的目錄下,並用base64格式編碼。所以,我的測試構想是,在這裡的機制中,可以向上傳圖片中注入惡意Payload,經API轉換為 Base64 格式後,再被Facebook傳入伺服器中。


以下為上傳圖片的POST請求:


POST /v2.10/act_123456789/adimages HTTP/1.1


Host: graph.facebook.com


Bytes=VGhpcyBpcyBtYWxpY2lvdXMgcGF5bG9hZC4=


由於Facebook伺服器端不能有效地處理惡意Payload圖片,最終其「Image Resizing Tool」圖片處理工具返回了一個報錯,在某個JSON響應內容的異常消息中,就包括了一些PHP庫函數代碼,這些代碼來自不同的Facebook庫文件,可以肯定的是,這應該屬於Facebook源代碼的一部份。

HTTP/1.1 200 OK    {「error」:{「message」:」Invalid parameter」,」type」:」FacebookApiException」,」code」:100,」error_data」:」exception 『Exception』 with message 『gen_image_rescale_multi_thrift call to shrinkImageMulti failed with fbalgo exception: 43 (43: : IDAT: invalid distance        too far back)』 in /var/www/flib/resource/filesystem/upload/upload.php:1393
Stack trace:
#0 /var/www/flib/resource/filesystem/upload/upload.php(1662): gen_image_rescale_multi_thrift()
#1 /var/www/flib/ads/admanager/adupload/adupload.php(252):        gen_image_rescale_multi()
#2 /var/www/flib/ads/admanager/adupload/AdImageUtils.php(195): _gen_adupload_image_resize()
#3 /var/www/flib/ads/entities/creatives/photos/AdproCreativePhotoDownload.php(53): AdImageUtils::genResizeLocalFile()
#4        /var/www/flib/platform/graph/resources/adaccount/adimages/mutators/GraphAdAccountAdImagesPost.php(134): AdproCreativePhotoDownload::addLocalFileToCreativeLibrary()
#5 /var/www/flib/core/data_structures/utils/Arrays.php(440):        Closure$GraphAdAccountAdImagesPost::genImplementation#3()
#6 /var/www/flib/platform/graph/resources/adaccount/adimages/mutators/GraphAdAccountAdImagesPost.php(136): Arrays::genMapWithKey()
#7 /var/www/flib/ads/api/graph_base/GraphAdsWriteWithRedirectBase.php(22):        GraphAdAccountAdImagesPost->genImplementation()
#8 /var/www/flib/ads/api/graph_base/GraphAdsWriteWithRedirectBase.php(11): GraphAdsWriteWithRedirectBase->genDoCall()
#9 /var/www/flib/core/asio/gen_utils.php(24): GraphAdsWriteWithRedirectBase->genCall()
#10        /var/www/flib/platform/api/base/ApiBaseWithTypedApiData.php(204): genw()
#11 /var/www/flib/platform/api/base/ApiBase.php(85): ApiBaseWithTypedApiData->genCallWithApiDataBase()
#12 /var/www/flib/platform/graph/core/runner/GraphApiRunnerBase.php(373):        ApiBase->genMakeCall()
#13 /var/www/flib/platform/graph/core/GraphRequestProcessorBase.php(629): GraphApiRunnerBase->genCall()
#14 /var/www/flib/platform/graph/core/GraphRequestProcessorBase.php(45): GraphRequestProcessorBase->genExecuteSingleGraphRequestCore()
#15        /var/www/api/graph/server.php(168): GraphRequestProcessorBase->genExecuteSingleGraphRequest()
#16 /var/www/api/graph/server.php(174): gen_api_graph_server()
#17 /var/www/flib/core/asio/Asio.php(35): gen_api_graph_server_wrapper()
#18        (): Closure$Asio::enterAsyncEntryPoint()
#19 /var/www/flib/core/asio/Asio.php(37): HH\Asio\join()
#20 /var/www/api/graph/server.php(180): Asio::enterAsyncEntryPoint()
#21 {main}」,」error_subcode」:1487242,」is_transient」:false,」error_user_title」:」Image        Resize Failed」,」error_user_msg」:」Image Resize Failed:unknown reason」,」fbtrace_id」:」EN/o9hmqwZz」},」__fb_trace_id__」:」EN/o9hmqwZz」}

在上報漏洞之前,我也做了一些諸如 ImageTragick 漏洞的PHP注入測試,沒什麼新的發現,所以我還是選擇了及時上報給了Facebook。最終,Facebook從內部修復了代碼運行機制,消除了異常處理的響應內容,堵塞了漏洞。


PoC視頻


*參考來源:

amolbaikar

,clouds編譯,轉載請註明來自FreeBuf.COM

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

揭秘某遊戲公司遭DDoS勒索始末
BOTCHAIN:第一個基於比特幣協議的功能齊全的殭屍網路

TAG:FreeBuf |