On this page (7 sections)

A critical code injection flaw has been published for s2Member, a WordPress membership plugin. Tracked as CVE-2026-86596, it affects all versions up to and including 260927 and can let an authenticated user with custom-level access or higher execute code on the server, according to the NVD record.

If you run a membership, paywall or subscription site on WordPress with s2Member installed, treat this as a priority to review. At the time of writing, only the NVD entry and its linked references describe the issue, so some details, such as a fixed version, are not confirmed.

What happened

The NVD entry, published on 2026-11-02, describes remote code execution in s2Member through the 'item_name' parameter. The attacker must be authenticated with custom-level access or above, so this is not described as a fully anonymous attack. The score of 9.8 reflects the severity of the outcome: code running on the web server.

Only one independent publisher covers the story so far. The record also links to a Wordfence threat intelligence entry and a WordPress plugin repository changeset, which are the places to look for details beyond the NVD description.

Technical details in plain terms

The weakness is classified as CWE-94, improper control of generated code. The NVD description explains the cause in two parts:

  • A function named strip_php_tags_deep() is meant to clean user-supplied values, but it only removes literal '<?' sequences.
  • A placeholder cleanup step runs after the attacker-controlled value has already been embedded in an email template. According to the description, that cleanup reassembles a valid '<?php' opener.

In other words, the filter runs at the wrong moment. Sanitizing input and then modifying the text again afterwards can undo the protection. This is a common class of bug: a defense checks the data before a later transformation changes what the data means.

The reference links point to s2Member source files, and several of those file names mention PayPal notifications. The NVD description itself does not mention PayPal, and the exact request path that reaches the flaw is not confirmed in the sources available. We are not describing how to build a request that triggers it.

Who is affected

Every site running s2Member at version 260927 or earlier is within the affected range. Real-world risk depends on who can hold an account with custom-level access or above. The sources available do not explain how such access is granted in a default s2Member setup, so do not assume ordinary members or open registrations do or do not qualify. Check which of your roles meet that level and who holds them.

Weak or reused passwords on those accounts also raise the risk, since the attacker needs a valid login at the required level.

How to check your exposure

First, find out whether s2Member is installed and which version it is. This read-only WP-CLI command lists the plugin with its status and version. Run it from your WordPress root directory and look for a version of 260927 or lower.

List s2Member status and version (run in the WordPress root)WP-CLI
wp plugin list --name=s2member --fields=name,status,version

If you do not have shell access, open Plugins in the WordPress dashboard and read the version number under s2Member.

Next, see which roles exist on your site. This read-only command lists all roles; note any custom roles, including those added by s2Member, and compare them against the custom-level requirement in the advisory.

List all roles defined on the site (run in the WordPress root)WP-CLI
wp role list

Then list the users holding a role you want to review. Replace YOUR_ROLE with a role name from the previous output; the result shows each account, and you should look for any you do not recognize.

List users with a specific role (replace YOUR_ROLE with a role from wp role list)WP-CLI
wp user list --role=YOUR_ROLE --fields=ID,user_login,user_email,user_registered

You can also check our list of known WordPress plugin vulnerabilities and read our guide on whether your plugin is vulnerable.

What to do now

The NVD record does not name a patched version, so confirm the current state of the plugin before relying on an update. Check the Wordfence entry and the plugin changeset for fix information.

Caution. Deactivating a membership plugin can lock members out or break paid content access and payment handling. Test on a staging copy first and plan the change for a quiet period.

If the plugin must stay active, a web application firewall can add a layer of protection, but it is not a substitute for patching. See what a WAF is for what it can and cannot do.

Detection and monitoring

Because the flaw ends in code execution, look for unexpected or modified PHP files. This read-only command lists PHP files under wp-content changed in the last 7 days. Run it from the WordPress root and investigate anything you did not change yourself.

List PHP files modified in the last 7 days under wp-contentShell
find wp-content -type f -name '*.php' -mtime -7 -print

Also review newly created administrator accounts, unexpected scheduled tasks, and web server logs for unusual requests from logged-in accounts at custom level or above, particularly around the time of any unexplained file changes. Our guides on checking if a website is hacked and what to do if you are hacked cover next steps. The free malware scanner can give an outside-in check, with the limits described in what outside-in detection can and cannot see.

What is still unknown

  • The NVD record does not state a fixed version.
  • No exploitation in the wild is reported in the sources available, and the CVE is not listed in CISA KEV at this time.
  • The sources available do not say which party assigned the 9.8 score.
  • The exact request path and how custom-level access is granted in typical setups are not explained.
  • Independent coverage is limited, so details may change as vendors and researchers publish more.

Sources

This article is based on the public sources below. Details can change as vendors and researchers publish more; check the original advisories before acting on version numbers.

  1. CVE-2026-86596: The s2Member plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, <= 260927 via the 'item_name' parameter…nvd.nist.gov ·
  • WordPress
  • s2Member
  • RCE
  • CVE-2026-86596
  • plugin security