Call Now Button is a popular WordPress plugin (200k+ installs) that adds a call/chat overlay to a website and can be managed locally or via the vendor’s cloud. During testing, we identified CVE-2025-11587, a critical CSRF / Missing Authorization vulnerability that allows an attacker to force-bind a victim site to an attacker-controlled Call Now Button (CNB) cloud account. The flaw is caused by an unprotected admin-post activation endpoint that accepts a one-time token (OTT) from the request and stores it directly into the plugin’s persistent options, enabling cloud management without verifying the user’s capabilities and without verifying any nonce. The result is an arbitrary plugin configuration update that grants the attacker remote control over the on-site overlay and funnels user interactions into the attacker’s cloud project.

CVECVE-2025-11587
Plugin VersionCall Now Button <= 1.5.3
CriticalHigh
All Time6 620 388
Active installations200 000+
Publicly PublishedOctober 28, 2025
Last UpdatedOctober 29, 2025
ResearcherDmitrii Ignatyev
PoCYes
ExploitNo
Reference https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-11587
https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/call-now-button/call-now-button-153-missing-authorization-to-authenticated-subscriber-limited-plugin-settings-update
Plugin Security Certification by CleanTalk
Logo of the plugin

Join the community of developers who prioritize security. Highlight your plugin in the WordPress catalog.

PSC by Cleantalk

Timeline

September 26, 2025Plugin testing and vulnerability detection in the Call Now Button – The #1 Click to Call Button for WordPress have been completed
September 26, 2025I contacted the author of the plugin and provided a vulnerability PoC with a description and recommendations for fixing
October 28, 2025Registered CVE-2025-11587

Discovery of the Vulnerability

The vulnerable endpoint is registered as:
/wp-admin/admin-post.php?action=cnb_apikey_activate

It is implemented in src/admin/api-key/class-ott-controller.php::activate() and invoked via the admin-posthandler in src/CallNowButton.php. The handler reads api_key or api_key_ott from the GET query using filter_input(...) and then immediately mutates configuration using update_option('cnb', $options)—including setting cloud_enabled and storing the provided token/key. Critically, this code path does not call current_user_can(...) and does not perform check_admin_referer() / wp_verify_nonce() validation. This violates the expected security order for state-changing admin endpoints (“capability → nonce → validate input → side effects”) and enables both low-privilege abuse and CSRF.

Understanding of CSRF attack’s

WordPress relies on capability checks (e.g., current_user_can('manage_options')) to prevent low-privilege users from changing global configuration, and on nonces (check_admin_referer) to prevent CSRF. Admin-post endpoints are frequently abused when developers omit either check, because they run in an “admin” context while still being reachable by any logged-in user—or even by unauthenticated visitors in some configurations. Similar patterns have appeared across themes and plugins where “helper” endpoints were left open, enabling silent settings manipulation, forced activation of features, or unwanted third-party integrations. In this case, the missing authorization is particularly dangerous because it binds the site to an attacker’s external cloud account, granting ongoing remote control beyond WordPress itself.

Exploiting the CSRF Vulnerability

To exploit CVE-2025-11587, an attacker without cookies:

POC:

1) In your own CNB cloud account, create an OTT (one-time token) and ensure you can create a button there.
2) On the target WordPress site, sign in with a subscriber user (minimum privileges) or prepare a CSRF page for a logged-in victim.
3) Send this single GET request (no nonce, no capability required):
/wp-admin/admin-post.php?action=cnb_apikey_activate&api_key_ott=cnbott_d467d13d_f490_47d7_8e2a_{your_key} (you can create it in your own localhost Wordress via request inside plugin. When you obtain a key dont push it inside you localhost plugin)
(If the site is installed under a subdir, prefix accordingly, e.g., /wordpress/wp-admin/....)
4) Verify the site is now connected to your CNB cloud account and the button is immediately enabled; in the database, option_name='cnb' shows {"cloud_enabled":1,"api_key":"<attacker key/ott binding>"}. CSRF variant: the same URL can be triggered by a logged-in victim simply loading an <img src> pointing at that endpoint.

____

This vulnerability enables a highly practical takeover of the plugin’s user-facing behavior without requiring admin access. Once the attacker binds the site to their CNB cloud account, they can:

  • Enable/disable the call widget site-wide.
  • Replace phone numbers or destinations to redirect users to attacker-controlled contact channels.
  • Inject misleading UI elements (“Support”, “Billing”, “Security”) for phishing/social engineering.
  • Collect interaction metadata (clicks, messages, user timing) within the attacker’s cloud project.
  • Maintain persistence: even if WordPress credentials are rotated, cloud control can remain until the binding is discovered and removed.

For businesses that rely on call/chat widgets for customer support or lead generation, this can cause revenue loss, reputational damage, and user trust erosion immediately.

Recommendations for Improved Security

This vulnerability enables a highly practical takeover of the plugin’s user-facing behavior without requiring admin access. Once the attacker binds the site to their CNB cloud account, they can:

  • Enable/disable the call widget site-wide.
  • Replace phone numbers or destinations to redirect users to attacker-controlled contact channels.
  • Inject misleading UI elements (“Support”, “Billing”, “Security”) for phishing/social engineering.
  • Collect interaction metadata (clicks, messages, user timing) within the attacker’s cloud project.
  • Maintain persistence: even if WordPress credentials are rotated, cloud control can remain until the binding is discovered and removed.

For businesses that rely on call/chat widgets for customer support or lead generation, this can cause revenue loss, reputational damage, and user trust erosion immediately.

By taking proactive measures to address CSRF vulnerabilities like CVE-2025-11587WordPress website owners can enhance their security posture and safeguard against potential exploitation. Stay vigilant, stay secure.

#WordPressSecurity #CSRF #WebsiteSafety #StayProtected #HighVulnerability

Use CleanTalk solutions to improve the security of your website

Dmitrii I.
CVE-2025-11587 – Call Now Button – CSRF/Missing Auth Enables Forced Cloud Account Binding – POC

Leave a Reply

Your email address will not be published. Required fields are marked *