
Docker-आधारित लैब जो Request-Baskets में CVE-2023-27163 SSRF को पुनः उत्पन्न करती है, जिसमें शोषण सत्यापन, डिटेक्शन स्क्रिप्ट, और नेटवर्क-आइसोलेशन उपचार शामिल हैं।
प्रोजेक्ट: Vulnerability Research & Reproduction Lab — CVE-2023-27163
लेखक: Amulya Kaushik
भूमिका: Cybersecurity R&D & Lab Content Development Intern Candidate
Request-Baskets ≤ 1.2.1 में Server-Side Request Forgery
CVE-2023-27163 को reproduce, detect और remediate करने के लिए defense-in-depth architecture के साथ एक self-contained local research lab।
| फ़ील्ड | मान |
|---|---|
| CVE ID | CVE-2023-27163 |
| CWE | CWE-918 — Server-Side Request Forgery (SSRF) |
| प्रभावित उत्पाद | Request-Baskets |
| प्रभावित संस्करण | ≤ 1.2.1 |
| ठीक किया गया संस्करण | 1.2.2 (Upstream source) / Defense-in-Depth Network Isolation |
| CVSS v3.1 स्कोर | 6.5 (Medium) |
| CVSS वेक्टर | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N |
| हमले की जटिलता | कम — एकल unauthenticated API call |
Upstream सीमाओं और Remediation पर नोट:
जबकि CVE-2023-27163 मनमाने forward URL validation को ट्रैक करता है,darklynx/request-basketsके सार्वजनिक container builds out of the box loopback या private subnet filtering लागू नहीं करते। वास्तविक दुनिया की DevSecOps सर्वोत्तम प्रथाओं का पालन करते हुए, हमारी लैब Defense-in-Depth Container Network Isolation के माध्यम से remediation प्रदर्शित करती है। संवेदनशील internal backends को internal-only Docker network (internal: trueके साथsecure-internal-net) पर अलग करके, relay path काट दिया जाता है, जिससे अविश्वसनीय webhook forwarders चलाने पर भी SSRF vulnerability की exploitability कम हो जाती है।
यह लैब दो अलग Docker Compose topologies प्रदान करती है:
docker-compose.yml): Request-Baskets और एक internal secret echo service bridge network lab-net साझा करते हैं। Request-Baskets host port 55556 पर mapped है (container port 55555 से mapped)।docker-compose.patched.yml): Request-Baskets विशेष रूप से public-net से जुड़ा है, जबकि internal echo service secure-internal-net (internal: true) से जुड़ा है।docker-compose.yml)┌─────────────────────────────────────────────────────────┐
│ Docker: lab-net │
│ │
│ ┌─────────────────────┐ ┌────────────────────────┐ │
│ │ request-baskets │───▶│ internal-service │ │
│ │ (v1.2.1) │ │ (http-echo:5678) │ │
│ │ Port 55556 ◀──HOST │ │ NOT exposed to host │ │
│ └─────────────────────┘ └────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
▲
│ HTTP (port 55556)
│
┌────┴─────┐
│ Attacker │
└──────────┘
docker-compose.patched.yml)┌─────────────────────────┐ ┌─────────────────────────┐
│ public-net │ │ secure-internal-net │
│ │ │ (internal: true) │
│ ┌───────────────────┐ │ │ ┌───────────────────┐ │
│ │ request-baskets │ │ ✕ │ │ internal-service │ │
│ │ Port 55556◀─HOST │ │ ──/──▶ │ │ (http-echo:5678) │ │
│ └───────────────────┘ │ │ └───────────────────┘ │
└─────────────────────────┘ └─────────────────────────┘
| आवश्यकता | न्यूनतम संस्करण | नोट्स |
|---|---|---|
| Docker Engine | 20.10+ | Container virtualization runtime |
| Docker Compose | v2.0+ | Multi-container orchestration |
| Python | 3.8+ | CLI verification और detection tools |
Python virtual environment और dependencies सेटअप करें:
python3 -m venv .venv
source .venv/bin/activate
pip install requests fpdf2
Vulnerable वातावरण शुरू करें (Request-Baskets v1.2.1 http://localhost:55556 पर उपलब्ध):
docker compose up -d
सत्यापित करें कि दोनों containers चल रहे हैं:
docker compose ps
अपेक्षित आउटपुट:
NAME IMAGE COMMAND SERVICE STATUS PORTS
isolated-internal-service hashicorp/http-echo:latest "/http-echo -text=CO…" internal-service Up 5678/tcp
vulnerable-request-baskets darklynx/request-baskets:v1.2.1 "/bin/sh -c /bin/ent…" request-baskets Up 0.0.0.0:55556->55555/tcp
पुष्टि करें कि internal service host से सीधे reachable नहीं है:
curl http://localhost:5678 2>&1 || echo "Connection refused — internal service isolated as expected"
स्वचालित SSRF verification script निष्पादित करें:
python3 scripts/verify_vulnerability.py
क्या होता है:
/api/baskets/ssrf-verification-basket को call करता है, forward_url: "http://internal-service:5678" और proxy_response: true सेट करता है।CONFIDENTIAL_DATA{INTERNAL_SSRF_DEMONSTRATION_SUCCESS} capture करता है और RESULT: VULNERABLE output करता है।Non-destructive audit probe चलाएँ:
python3 scripts/detect.py
क्या होता है:
http://127.0.0.1:80) स्वीकार किया जाता है या नहीं।AUDIT RESULT: VULNERABLE रिपोर्ट करता है और probe basket साफ़ करता है।Segmented remediated topology पर स्विच करें:
docker compose down
docker compose -f docker-compose.patched.yml up -d
python3 scripts/verify_vulnerability.py
अपेक्षित आउटपुट:
==============================================================
[✓] REMEDIATION VERIFIED: TARGET SECURED
The Request-Baskets instance failed to reach the internal
isolated service (HTTP 502 / Host Unreachable).
Network segmentation successfully prevented SSRF data exfiltration.
==============================================================
समाप्त होने पर वातावरण tear down करें:
docker compose -f docker-compose.patched.yml down
Deliverable 3 के लिए पूरा visual evidence portfolio evidence/ directory में बनाए रखा गया है:
प्रत्येक screenshot के लिए विस्तृत walkthroughs, commands और console transcripts evidence/README.md में documented हैं।
मैन्युअल setup की परेशानी के बिना सभी terminal screenshots क्रमिक रूप से capture करने के लिए, चलाएँ:
./scripts/capture_evidence_flow.sh
Academic technical report को PDF में संकलित करें:
python3 docs/generate_blog_pdf.py
आउटपुट उत्पन्न: docs/CVE-2023-27163-Technical-Blog.pdf
cve-2023-27163-lab/
├── .gitignore # Git artifact exclusions (.venv, cache, OS files)
├── docker-compose.yml # Vulnerable environment (shared lab-net, port 55556)
├── docker-compose.patched.yml # Remediated environment (disjoint network isolation)
├── README.md # Complete documentation, attribution & guide
├── scripts/
│ ├── capture_evidence_flow.sh # Interactive runner for capturing screenshots
│ ├── verify_vulnerability.py # SSRF exploitation & remediation verification CLI
│ └── detect.py # Defensive audit and detection tool
├── evidence/
│ └── README.md # Formal screenshot evidence walkthrough
└── docs/
├── technical_blog.md # Academic technical write-up (800–1,200 words)
├── generate_blog_pdf.py # Markdown → PDF converter
└── CVE-2023-27163-Technical-Blog.pdf # Compiled academic report PDF
यह शोध और लैब विकास खुले सुरक्षा मानकों, vendor advisories और vulnerability databases पर आधारित है:
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N)।यह लैब केवल शैक्षिक और अधिकृत सुरक्षा शोध उद्देश्यों के लिए है। इन tools का उपयोग उन systems के विरुद्ध न करें जिनके आप स्वामी नहीं हैं या जिनका परीक्षण करने की आपके पास स्पष्ट अनुमति नहीं है।
| Artifact | उद्देश्य | फ़ाइल लिंक | विवरण |
|---|
| Screenshot 1 | Environment Running | 01_lab_running.png | lab-net पर एक साथ चल रहे vulnerable-request-baskets (port 55556) और isolated-internal-service दिखाता है। |
| Screenshot 2 | SSRF Exploitation | 02_reproduction_ssrf.png | Exfiltrated CONFIDENTIAL_DATA{...} flag और VULNERABLE status प्रदर्शित करता है। |
| Screenshot 3 | Defensive Detection Tool | 03_detection_tool_run.png | Dual-phase signature check और loopback audit को VULNERABLE flag करते हुए प्रदर्शित करता है। |
| Screenshot 4 | Remediation Verification | 04_remediation_verified.png | Segmented network defense के तहत relay failure (HTTP 502 / Host Unreachable) सिद्ध करता है। |
| Screenshot 5 | Web UI Configuration | 05_web_ui_ssrf.png | (Bonus) Proxy Response के साथ configured Request-Baskets UI settings का browser capture। |