2014-05-13 11 views
12

यह सवाल अब a bug report I made on parse's help forumParse.com एपीआई सुरक्षा चिंताओं

का एक दर्पण है, मुझे पता है कि पार्स की साइट पर एक एक सवाल लेकिन एक रिपोर्ट नहीं है, और मैं यहाँ सिर्फ का एक दर्पण को छोड़ने के लिए नहीं करना चाहते हैं रिपोर्ट, लेकिन सिर्फ यह जांचें कि मेरी चिंताओं की अच्छी तरह से स्थापना की गई है, जिन लोगों के पास शायद मेरे साथ अधिक अनुभव है।

समस्या यह है कि ऐसा लगता है कि पार्स सही तरीके से एचएमएसी हस्ताक्षर उत्पन्न नहीं कर रहा है।

  • पहला परीक्षण: मैंने प्रॉक्सी (चार्ल्स प्रॉक्सी) लिया, अद्यतन अनुरोध पर ब्रेकपॉइंट स्थापित किया और हस्ताक्षर को छूने वाले क्षेत्र को बदल दिया। अनुरोध निष्पादित करें। सर्वर अनुरोध स्वीकार करता है और फ़ील्ड इसके अनुसार अपडेट होते हैं (यहां तक ​​कि पाठ्यक्रम के ब्रेकपॉइंट में भी फ़ील्ड संशोधित)।
  • दूसरा परीक्षण: अनुरोध को संशोधित करने के बजाय मैंने यह सुनिश्चित करने के लिए हस्ताक्षर बदल दिया कि सर्वर वास्तव में हस्ताक्षर मूल्य का परीक्षण कर रहा है, अनुरोध अपेक्षित के रूप में अस्वीकार कर दिया गया है।
  • तीसरा परीक्षण: केवल मौजूदा फ़ील्ड के मान को संशोधित करने के बजाय, अनुरोध में एक नया नया फ़ील्ड जोड़ें और निष्पादित करें। सर्वर अनुरोध स्वीकार करता है, फ़ील्ड को अपडेट करता है, यदि फ़ील्ड जोड़ा गया नहीं है तो यह इसे अद्यतन पंक्ति में जोड़ता है, अन्यथा यह इसे अपडेट करता है।

अब, मेरी चिंताओं को अच्छी तरह से स्थापित किया गया है? क्या मैंने हस्ताक्षर पीढ़ी के संबंध में किसी भी हिस्से में ओथ आरएफसी को गलत समझा? यह कैसे संभव है कि पार्स के कर्मचारी/उपयोगकर्ता कभी भी इतनी बड़ी बग नहीं देखते?

कृपया, मुझे पता है कि यह प्रश्न व्यापक चर्चा उत्पन्न कर सकता है, लेकिन इस प्रश्न के महत्व के बाद से (और न केवल मेरे लिए, बल्कि सभी पार्स के उपयोगकर्ताओं के लिए) किसी को वैध प्रतिक्रिया छोड़ने के लिए सूचित किया गया है।

संपादित:

मैं पार्स iOS SDK के अंदर खुदाई कर रहा हूँ पता लगाने के लिए क्यों यह वास्तव में हो रहा है। कुछ शोध और उनकी स्थिर पुस्तकालय के कुछ रिवर्स इंजीनियरिंग के बाद मैंने पाया कि वे एक संशोधित (शायद वे 'पीएफ' के साथ उपसर्ग के तरीकों के नामों को संशोधित कर रहे हैं) लाइब्रेरी OAuthCore कहा जाता है। इसे खोजने के बाद मुझे अपने एसडीके के पुराने ओपन सोर्स संस्करण को देखकर पुष्टि मिली है (संशोधित लाइब्रेरी नामों के लिए googling मिला)। अब, लाइब्रेरी आरएफसी के लिए पर्याप्त चिपके हुए, काम के रूप में काम और काम करता है। समस्या यह है कि, जाहिर है, ओएथ पूरे HTTP अनुरोध को कवर नहीं करता है बल्कि इसका हिस्सा भी है। मैं क्या उम्मीद कर रहा था, और आईएमएचओ कैसे होना चाहिए, यह है कि जब आप किसी फ़ील्ड को अपडेट करने का अनुरोध करते हैं (या खरीदारी करते हैं? लॉग इन करते हैं? संवेदनशील डेटा भेजें?) 'गंदे' फ़ील्ड को अनुरोध के पैरामीटर के रूप में भेजा जाना चाहिए, कि उन्हें OAuth प्रोटोकॉल के माध्यम से किए गए हस्ताक्षर/सत्यापन प्रक्रिया में शामिल किया जाएगा। इसके बजाय अद्यतन अनुरोध (विशेष रूप से https://api.parse.com/2/update पर निर्देशित POST अनुरोध के कॉल के माध्यम से किए गए) को POST अनुरोध के बॉडी को वास्तविक अद्यतन का प्रतिनिधित्व करने वाले जेसन स्ट्रिंग में सेट किया गया है। ईमानदार होने के लिए यह सब इससे पहले भी स्पष्ट था, क्योंकि अनुरोध को देखकर मुझे एहसास होना चाहिए था कि जेसन पाठ को x-www-form-urlencoded body (अनुरोध करने के बजाय अनुरोध के कच्चे शरीर के रूप में भेजा जा रहा था) क्वेरी पैरामीटर urlencoded और & - अनुरोध के शरीर में निष्कर्ष निकाला गया)।

हालांकि यह अब "सही" व्यवहार है, मुझे ऐसा लगता है कि ऐसा नहीं है कि यह हजारों लोगों द्वारा उपयोग किए जाने वाले उत्पादन वातावरण में होना चाहिए। मैं अब क्या करूँगा कार्यक्षमता तोड़ने के बिना इसे पैच करने की कोशिश कर रहा हूं, क्या मुझे ऐसा करना चाहिए कि मैं पैच साझा करूंगा।

अभी भी पार्स से सीधे प्रतिक्रिया प्राप्त करने की उम्मीद है।

EDIT 2: पार्स ने मेरे प्रश्न को एक प्रश्न के रूप में बंद कर दिया है लेकिन एक बग रिपोर्ट है। उनके कार्यान्वयन की प्रमुख सुरक्षा त्रुटियों पर कोई टिप्पणी नहीं है।

सूचना दी बग

मैं चारों ओर पार्स iOS SDK के साथ खेल रहा था की प्रतिलिपि नीचे

और मैं एक प्रमुख बग कि गंभीरता से खतरा क्षुधा की सुरक्षा एक बैकेंड के रूप में पार्स का उपयोग करके विकसित पाया।

अब, मुझे खेद है कि अगर मैं बग समस्या रिपोर्टिंग टूल का उपयोग नहीं कर रहा हूं लेकिन मैं का कोई फेसबुक खाता नहीं रखता हूं और मैं तैयार नहीं हूं।

Premise: पार्स एपीआई ओएथ प्रोटोकॉल 1.0a (RFC 5849) के अनुरूप प्रतीत होता है। इस बग को शामिल करने वाले आरएफसी का प्रासंगिक हिस्सा पृष्ठ 18, हस्ताक्षर पर है।

OAuth realm="Example", 
oauth_consumer_key="0685bd9184jfhq22", 
oauth_token="ad180jjd733klru7", 
oauth_signature_method="HMAC-SHA1", 
oauth_signature="wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D", 
oauth_timestamp="137131200", 
oauth_nonce="4572616e48616d6d65724c61686176", 
oauth_version="1.0" 

यह न केवल कि एक अनुरोध के लिए अधिकृत है लेकिन HMAC के बाद भी अनुरोध अखंडता को सुनिश्चित करेगा:

OAuth में, जैसा कि ऊपर उल्लेख आरएफसी के अनुसार, प्रत्येक अनुरोध एक प्रमाणीकरण हैडर बना की तरह होना चाहिए हस्ताक्षर इस पर लागू होगा। तथ्य के मामले में हस्ताक्षर की गणना अनुरोध पैरामीटर द्वारा रचित सामान्यीकृत स्ट्रिंग का उपयोग करके की जानी चाहिए और पर हस्ताक्षर किए गए क्लाइंट को टोकन साझा रहस्य से जोड़ा गया क्लाइंट साझा किया जाना चाहिए (अनुभाग 3.4.2, आरएफसी के पृष्ठ 25 देखें)। इस तरह से एक दुर्भावनापूर्ण उपयोगकर्ता सर्वर तक पहुंचने से पहले अनुरोध को संशोधित करने में सक्षम नहीं होना चाहिए। वास्तव में सर्वर को पूरे अनुरोध से मेल खाने के लिए हस्ताक्षर की जांच करनी चाहिए, अगर ऐसा नहीं होता है तो इसे अस्वीकार कर दें।

अफसोस की बात है कि पर्याप्त पार्स उपरोक्त के अनुरूप पूरी तरह अनुरूप नहीं है। का उपयोग करके एक साधारण प्रॉक्सी मैं उपयोगकर्ता आईडी अनुरोध को बदलने से, अनुरोधों को पूरी तरह से संशोधित करने में सक्षम हूं, अनुरोध में पैरामीटर का मान बदलें, एक फ़ील्ड और एक मूल्य जोड़ें जो अनुरोध में शामिल नहीं था बिलकुल।

अब दोषों की कल्पना करना वास्तव में आसान है कि यह सब का नेतृत्व कर सकता है। विशेष रूप से मैं मोबाइल डेवलपर्स को सोच रहा हूं कि उनके ऐप में इन-ऐप खरीद सक्षम करता है, यह निर्भर करता है कि उस पार्स सुरक्षित है उनके लिए पर्याप्त है कि उनके उपयोगकर्ता "धोखा" नहीं पाएंगे, इस प्रकार आय खोने और शून्य को रद्द करने उनके ऐप के लिए किए गए प्रयास।

अब, जब मैं अन्य SDKs पर उसकी जांच करने में सक्षम था, मैं बहुत यकीन है कि ही बग प्रतिलिपि प्रस्तुत करने योग्य भी, या भी बदतर समस्या कि सर्वर हस्ताक्षर सब पर जाँच नहीं कर रहा है है कर रहा हूँ

इस बग के बारे में एक पारसे कर्मचारी से प्रतिक्रिया की प्रतीक्षा।

सादर, एंटोनियो

+0

क्या आपको इस बग रिपोर्ट का कोई जवाब मिला? – xpereta

+0

नहीं उन्होंने धागे को बंद कर दिया और फेसबुक पर बग रिपोर्ट पर जवाब नहीं दिया। मैंने अब पार्स का उपयोग नहीं करने का फैसला किया क्योंकि वे पर्याप्त सुरक्षा पर विचार नहीं करते हैं, इसके बजाय मैं अब Google के ऐप इंजन का उपयोग कर रहा हूं। –

उत्तर

0

यह प्रभावित जाती है कि आप सुरक्षा के मुद्दों की जांच करने के ढांचे में खोदा है। मैं ओथ में विशेषज्ञ नहीं हूँ। लेकिन मैं सिर्फ ऐप-ऐप खरीद के बारे में आपकी चिंता के बारे में टिप्पणी करना चाहता हूं।ऐप-ऐप खरीद के बारे में चिंता करने में असमर्थ नहीं है क्योंकि इसे ऐप स्टोर द्वारा पूरी तरह से संभाला जाता है। आईओएस 'StoreKit.framework द्वारा किसी भी खरीद को संभाला जाएगा। पार्स के पास इन-एप खरीद के साथ कुछ लेना देना नहीं है। यदि आप यह देखना चाहते हैं कि किसी व्यक्ति ने कुछ खरीदा है, तो आपको केवल StoreKit.framework द्वारा लाए गए कार्यों का उपयोग करने की आवश्यकता है, न कि पार्स।

+2

पार्स खरीद के साथ सहायता और रसीदों की पुष्टि करने के लिए ऑफ़र करता है, इसलिए यह इस बात पर निर्भर करता है कि आप इस टिप्पणी को कितना वैध मानते हैं। – Wain

संबंधित मुद्दे