flawopen.com/Teardowns/cve-2026-87913-aws-security-agent-mcp-s3-bucket-ownership
CVE-2026-87913: AWS MCP S3 डेटा लीक
अनुमानित bucket निजी scan archive को दूसरे खाते में भेज सकता था। 0.2.0 पर अपडेट करें और मालिक सत्यापित करें।[1], [2], [4]
एक ऐसे कूरियर की कल्पना करें जो पते पर इमारत होने की जाँच करता है, मालिक की नहीं। कोई और पहले पता दर्ज करके पार्सल पा सकता है। सुधार में S3 से जाँच और upload, दोनों के समय अपेक्षित मालिक की पुष्टि कराई जाती है।[2], [1]
इस पेज के मुख्य शब्द
MCP सर्वर- AI सहायक को tools देने वाली स्थानीय सेवा; संचालन सर्वर प्रक्रिया की permissions से चलते हैं।[3]
फ्रेमवर्क मैपिंग
- इस गाइड में बताई गई कमजोरी के लिए CWE संदर्भ: CWE-283 CWE-341
- OWASP GenAI 2025 — LLM06:2025 अत्यधिक एजेंसी
मूल कारण विश्लेषण (Root Cause)
AWS Security Agent MCP सर्वर ग्राहक के AWS account ID और क्षेत्र से scan bucket का नाम बनाता है: security-agent-scans-<account-id>-<region>। AWS और maintainer advisory कहती हैं कि प्रभावित संस्करण ने bucket का मौजूद होना जाँचा, ग्राहक खाते का स्वामित्व नहीं। S3 नाम वैश्विक रूप से अद्वितीय और account ID सार्वजनिक हैं। अनुमानित नाम पहले पंजीकृत करने वाला तीसरा पक्ष सर्वर का निजी source archive पा सकता था; उसमें code, credentials और infrastructure state हो सकती है। यह cloud-resource ownership और अनुमानित नाम की कमजोरी है, AI मॉडल का prompt-injection दोष नहीं। संस्करण 0.1.0–0.1.5 प्रभावित हैं; 0.2.0 S3 संचालन में ExpectedBucketOwner जोड़ता है और mismatch पर रुकता है। अपडेट पहले से पंजीकृत नाम को मुक्त नहीं करता: वास्तविक मालिक जाँचें और bucket तीसरे पक्ष का हो तो scan फिर शुरू न करें।
Bucket का नाम उसके मालिकाना हक़ का प्रमाण नहीं
| सीमा | दस्तावेज़ित शर्त | ऑपरेटर की कार्रवाई |
|---|---|---|
| प्रभावित संस्करण | awslabs.security-agent-mcp-server के 0.1.0 से 0.1.5 संस्करण प्रभावित हैं; 0.2.0 में मालिकाना हक़ की जाँच जोड़ी गई। | 0.2.0 या नए संस्करण पर अपडेट करें और चल रहे पैकेज संस्करण की पुष्टि करें। |
| अनुमानित Bucket नाम | स्कैन Bucket का नाम account ID और Region से बनता है; कोई दूसरा AWS account इसे पहले पंजीकृत कर सकता है। | मिलते हुए नाम को पता समझें, मालिकाना हक़ का प्रमाण नहीं। |
| अलग खातों के बीच अपलोड | कमज़ोर सर्वर मालिक की पुष्टि किए बिना नाम से Bucket स्वीकार कर सकता था और निजी स्कैन आर्काइव वहाँ अपलोड कर सकता था। | स्कैन या अपलोड से पहले पुष्टि करें कि Bucket अपेक्षित खाते का है। |
| ठीक की गई स्वामित्व सीमा | ExpectedBucketOwner से S3 जाँच और अपलोड—दोनों समय मालिक की तुलना करता है। | अपडेट करें, वास्तविक मालिक जाँचें और तीसरे पक्ष का स्वामित्व मिलने पर स्कैन रोकें; अपडेट से Bucket का मालिक नहीं बदलता। |
हमले का चरण-दर-चरण प्रवाह
सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन
यह सुरक्षित रूपरेखा है, पूर्ण स्रोत की हूबहू प्रति नहीं। केवल मौजूदगी पर्याप्त नहीं: S3 को जाँच और write दोनों समय अपेक्षित owner मिलाना चाहिए। Owner को authenticated AWS identity से लें और mismatch पर प्रक्रिया रोकें। Update के बाद भी owner अलग से जाँचें, क्योंकि इससे पहले से registered नाम transfer या release नहीं होता। AWS के अनुसार HeadBucket और PutObject दोनों में ExpectedBucketOwner उपलब्ध है; mismatch होने पर request 403 से विफल होती है। इसे fail-closed सुरक्षा के रूप में रखें, लेकिन bucket को किसी और का मानने से पहले अधिकृत ownership-check रास्ते से access-denied त्रुटि की जाँच करें।[2], [8], [9]
सोर्स अंश: Advisory पर आधारित AWS SDK उदाहरण; यह स्रोत कोड का हूबहू diff नहीं है।
# सरल vulnerable रूप: नाम जाँचा जाता है, लेकिन उसके owner की नहीं।
s3.head_bucket(Bucket=bucket_name)
s3.put_object(
Bucket=bucket_name,
Key=object_key,
Body=archive_bytes,
)
# हर operation को bucket के अपेक्षित owner account से बाँधें।
expected_owner = sts.get_caller_identity()["Account"]
s3.head_bucket(
Bucket=bucket_name,
ExpectedBucketOwner=expected_owner,
)
s3.put_object(
Bucket=bucket_name,
Key=object_key,
Body=archive_bytes,
ExpectedBucketOwner=expected_owner,
)
इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट
- ✓
awslabs.security-agent-mcp-serverको 0.2.0 या बाद में अपडेट करें; plugins, CI images और forks का चल रहा संस्करण जाँचें।[2], [4] - ✓Scan से पहले पुष्टि करें कि derived bucket अपेक्षित AWS खाते का है; नाम मिलना ownership का प्रमाण नहीं।[1], [2]
- ✓Upload सहित हर S3 operation में अपेक्षित account को
ExpectedBucketOwnerके रूप में दें।[8], [9] - ✓Owner mismatch पर रुकें। यदि नाम किसी और का है तो scans रोककर AWS से संपर्क करें।[1]
- ✓जहाँ लागू हो पहले उपयोग से पहले ग्राहक खाते में bucket बनाएँ; least privilege और encryption लागू करें।[3], [1]
- ✓प्रभावित versions के scans की समीक्षा करें; archive में secrets की संभावना हो तो credentials बदलें।[2], [1]
स्रोत
- AWS Security Bulletin 2026-105-AWS — CVE-2026-87913
- Maintainer GHSA-3jxw-vj8m-8x77
- AWS Security Agent IDE integration and scan bucket workflow
- awslabs.security-agent-mcp-server 0.2.0 release
- NVD — CVE-2026-87913
- MITRE CWE-283 — Unverified Ownership
- MITRE CWE-341 — Predictable from Observable State
- Boto3 HeadBucket — ExpectedBucketOwner
- Boto3 PutObject — ExpectedBucketOwner
- उसी पैकेज की संबंधित अलग कमजोरी: AWS MCP Git argument injection, CVE-2026-97662