2009-03-10 15 views
5

हम कोड की इस पंक्ति के लिए एक Coverity बग हैsnprintf प्रारूप स्ट्रिंग सुरक्षा भेद्यता मुद्दा

non_const_printf_format_string: "format string is not a string literal, 
potential security vulnerability if user controlled" 

मैं एक स्थिरांक को testStrings बदल गया है, लेकिन यह है कि ऐसा नहीं किया कुछ भी करें:

static const char *testStrings[] = {"1", ... etc}; 

इस त्रुटि के बारे में कोई विचार वास्तव में क्या कह रहा है?

उत्तर

10

आपका कोड ठीक है।

समस्या यह है कि यदि आप एक स्ट्रिंग पास करते हैं जो उपयोगकर्ता को printf प्रारूप स्ट्रिंग के रूप में नियंत्रित किया जाता है, तो सुरक्षा कीड़े उत्पन्न हो सकती हैं।

उदाहरण के लिए, printf(userName);

कहाँ userName उपयोगकर्ता द्वारा आपूर्ति की जाती है, यदि कोई उपयोगकर्ता "% s" पारित कर सकते हैं, और ढेर पर एक यादृच्छिक पते पर डेटा तक पहुँचने शुरू करने के लिए अपने कार्य मिलता है, जो एक में परिणाम सकता है दुर्घटना। printf स्टैक से अतिरिक्त पैरामीटर पॉप करने का प्रयास करेगा, जिसके परिणामस्वरूप एक ढेर भ्रष्टाचार होगा। इस तरह के सेवा हमले से इनकार करना शायद सबसे अच्छा मामला है, स्टैक पर मूल्यों को डंप करने के लिए प्रिंटफ प्राप्त करके सूचना का खुलासा किया जा सकता है और स्टैक पर रिटर्न पते को संशोधित करने के लिए प्रिंटफ स्टाइल फ़ंक्शंस प्राप्त करने के तरीके भी हैं।

चूंकि आपके तार उपयोगकर्ता नियंत्रित नहीं हैं, इसलिए इस संदेश को अनदेखा करना सुरक्षित है। सामान्य फिक्स printf("%s", userName); के साथ दिए गए प्रिंटफ उदाहरण को प्रतिस्थापित करना है, जो आपके मामले में मदद नहीं करेगा क्योंकि कॉन्स स्ट्रिंग में प्रारूप स्ट्रिंग्स दिखाई देती हैं।

विकिपीडिया में प्रारूप स्ट्रिंग भेद्यता पर अधिक है: http://en.wikipedia.org/wiki/Format_string_vulnerabilities

2

आइडिया यह है कि testStrings[testID] का मान किसी भी तरह से अतिरिक्त प्रारूप विनिर्देशों को शामिल करने के लिए बदला जा सकता है।

क्योंकि snprintf() की जांच करने की कोई संभावना नहीं है कि पैरामीटर की संख्या प्रारूप विनिर्देशकों की संख्या से मेल खाती है, तो यह अगले प्रारूप के लिए मूल्य के रूप में उपयोग करने के लिए स्टैक से अगले पते को ले जाएगा और अजीब चीजें तब हो सकती हैं।

इसे format string attack के रूप में जाना जाता है।

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