<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>BugShield WordPress Security</title><link>https://bugshield.co.uk/blog/category/security</link><description>WordPress security guides, investigations and vulnerability updates from BugShield.</description><language>en-GB</language><atom:link href="https://bugshield.co.uk/blog/security/rss.xml" rel="self" type="application/rss+xml"/><ttl>60</ttl><lastBuildDate>Wed, 14 Oct 2026 00:00:00 GMT</lastBuildDate><item><title>Ghostscript vulnerability WordPress owners need to check: is CVE-2026-39919 patched?</title><link>https://bugshield.co.uk/blog/ghostscript-vulnerability-wordpress-cve-2026-39919</link><guid isPermaLink="true">https://bugshield.co.uk/blog/ghostscript-vulnerability-wordpress-cve-2026-39919</guid><description>CVE-2026-39919 sits in Ghostscript, not in WordPress or a plugin. Here is how to tell whether uploaded PDFs reach it, how to read the real package revision and what to do if you cannot patch yet.</description><content:encoded>&lt;p&gt;Ghostscript vulnerability WordPress owners need to understand: CVE-2026-39919 matters because WordPress can hand uploaded PDFs to Ghostscript to create preview images. No plugin update will fix it, because the repair comes from your server&amp;apos;s operating system, your hosting provider or your container image. The practical job is to find out whether PDFs reach Ghostscript on your site and whether the installed package carries the fix.&lt;/p&gt;  &lt;figure&gt;&lt;img src=&quot;https://bugshield.co.uk/images/blog/ghostscript-vulnerability-wordpress-cve-2026-39919.webp&quot; alt=&quot;WordPress Site Health Info screen with the Media Handling section expanded, showing the active image editor as GD, ImageMagick and Imagick marked not available, and Ghostscript version not available on this example site&quot; width=&quot;1024&quot; height=&quot;516&quot;&gt;&lt;figcaption&gt;WordPress Site Health Info screen with the Media Handling section expanded, showing the active image editor as GD, ImageMagick and Imagick marked not available, and Ghostscript version not available on this example site &lt;a href=&quot;https://wordpress.org/documentation/files/2021/07/site-health-media-handling-1024x516.png&quot; rel=&quot;noopener noreferrer&quot;&gt;WordPress.org&lt;/a&gt;. &lt;a href=&quot;https://wordpress.org/documentation/article/site-health-screen/&quot; rel=&quot;noopener noreferrer&quot;&gt;Source details&lt;/a&gt;. Resized and converted to WebP.&lt;/figcaption&gt;&lt;/figure&gt;  &lt;h2&gt;How Ghostscript connects to your WordPress site&lt;/h2&gt;&lt;p&gt;Ghostscript is a document engine. It reads PDF files and turns their pages into images, and it sits quietly underneath many applications that never mention it by name, which is why many site owners run it without knowing they do.&lt;/p&gt;&lt;p&gt;Since WordPress 4.7, core can generate an image of a PDF&amp;apos;s first page when it creates attachment details. On a server with the PHP Imagick extension, the chain runs from WordPress to Imagick, then ImageMagick, then Ghostscript. Ghostscript only starts when something asks for a picture of the PDF, so a form that simply saves a file to disk never wakes it up.&lt;/p&gt;&lt;p&gt;According to the &lt;a href=&quot;https://www.wordfence.com/blog/2026/10/wordfence-argus-discovers-critical-vulnerability-in-ghostscript-the-program-that-turns-uploaded-pdfs-into-thumbnails-on-your-server/&quot; rel=&quot;noopener noreferrer&quot;&gt;Wordfence disclosure&lt;/a&gt;, the flaw is a heap buffer overflow: a crafted PDF containing a JPEG 2000 image makes Ghostscript write data past the end of a memory area. The bug lives in Ghostscript itself. WordPress and any form plugin are only the route a file takes to reach it.&lt;/p&gt;&lt;h2&gt;Who is exposed to the Ghostscript vulnerability on WordPress&lt;/h2&gt;&lt;p&gt;Stock WordPress does not let anonymous visitors upload PDFs to the Media Library. An attack therefore needs a plugin, form, application route or low-privileged account that accepts PDFs. Your site is exposed only when all of the following are true at once:&lt;/p&gt;&lt;p&gt;If visitors or limited users can upload PDFs and you are unsure what happens next, treat the site as affected until your host confirms otherwise. Upload routes deserve attention for other reasons too, as the recent &lt;a href=&quot;https://bugshield.co.uk/blog/gravity-forms-vulnerability-cve-2026-84434&quot;&gt;form upload flaws&lt;/a&gt; in popular plugins showed.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;A visitor or low-privileged user can upload a PDF.&lt;/li&gt;&lt;li&gt;Something on the site then asks for a preview or thumbnail of that PDF.&lt;/li&gt;&lt;li&gt;The server has Imagick, or another tool that calls Ghostscript to make the picture.&lt;/li&gt;&lt;li&gt;The installed Ghostscript package does not include the fix. Affected code spans Ghostscript 9.21 through 10.07.1 where the OpenJPEG decoder path is present.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Severity, patch status and exploitation status&lt;/h2&gt;&lt;p&gt;Artifex fixed the flaw in Ghostscript 10.08.0, released on 8th September 2026. The CVE carries a CVSS 3.1 score of 9.8, which describes a worst case: a network-facing application that accepts PDFs without a login. Successful code execution runs with the permissions of the account processing the PDF, which is not automatically full control of the server.&lt;/p&gt;&lt;p&gt;Wordfence reached unauthenticated remote code execution on one purpose-built WordPress test site. Its two proof-of-concept files worked only against the exact Ghostscript build they were prepared for and failed in 10,240 attempts across ten other package environments. At the time of its disclosure, Wordfence said it had found no public evidence that the flaw was being exploited. Build-specific exploits still matter when many sites share one hosting image, so the right response is to patch rather than wait.&lt;/p&gt;&lt;h2&gt;Read the full package revision, not gs --version&lt;/h2&gt;&lt;p&gt;Linux distributions add security fixes to the older Ghostscript version they already ship. Ubuntu 22.04, for example, fixed the flaw in a package that still reports Ghostscript 9.55.0, so gs --version alone cannot tell you whether you are patched. Run dpkg -s ghostscript on Debian and Ubuntu, or rpm -q ghostscript on Fedora and the Red Hat family, and compare the full revision with your distribution&amp;apos;s advisory.&lt;/p&gt;&lt;p&gt;The &lt;a href=&quot;https://ubuntu.com/security/CVE-2026-39919&quot; rel=&quot;noopener noreferrer&quot;&gt;Ubuntu advisory&lt;/a&gt; (USN-8791-1) and the &lt;a href=&quot;https://security-tracker.debian.org/tracker/CVE-2026-39919&quot; rel=&quot;noopener noreferrer&quot;&gt;Debian tracker&lt;/a&gt; list these fixed revisions:&lt;/p&gt;&lt;p&gt;Not every release has a fix yet. Debian 12 bookworm, at 10.0.0~dfsg-11+deb12u8, is still listed as vulnerable, and Ubuntu 20.04 and older are marked as needing evaluation. AlmaLinux 10 published a fix on 2nd October 2026. As of 9th October 2026, Fedora 44, Alpine 3.22 and Alpine 3.23 still listed older revisions, so check their current pages. Watch for the release candidate as well, because the 10.08.0 release candidate also reports 10.08.0 but is not fixed.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Ubuntu 22.04: 9.55.0~dfsg1-0ubuntu5.14&lt;/li&gt;&lt;li&gt;Ubuntu 24.04: 10.02.1~dfsg1-0ubuntu7.9&lt;/li&gt;&lt;li&gt;Ubuntu 26.04: 10.06.0~dfsg-3ubuntu1.1&lt;/li&gt;&lt;li&gt;Debian 13 trixie (security): 10.05.1~dfsg-1+deb13u3. The tracker records the fix as first arriving in 10.05.1~dfsg-1+deb13u2 through DSA-6516-1, so deb13u2 or any later revision from the security repository carries it. The plain trixie package, 10.05.1~dfsg-1+deb13u1, is still listed as vulnerable, so Debian 13 needs the update from the security repository.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;What to do now&lt;/h2&gt;&lt;p&gt;If your site is on shared or managed hosting where you cannot run package commands yourself, your host&amp;apos;s confirmation of what is installed carries the weight, so work through these steps in order:&lt;/p&gt;&lt;p&gt;Sites that run in containers take a different route to the fix, which is why the container step asks for a rebuild. When Wordfence tested an official WordPress Docker image snapshot on 15th September 2026, it contained a vulnerable Ghostscript package, Imagick and a working PDF preview path. Restarting an old container keeps whatever package it was built with, so rebuild from an updated image and check the Ghostscript revision in the image you actually deploy.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Ask your host whether uploaded PDFs reach Ghostscript through Imagick, and which Ghostscript package revision is installed.&lt;/li&gt;&lt;li&gt;Open &lt;strong&gt;Tools &amp;gt; Site Health &amp;gt; Info &amp;gt; Media Handling&lt;/strong&gt; to see whether Imagick lists PDF as a supported format. Treat the result as a clue only.&lt;/li&gt;&lt;li&gt;If you manage the server, install the fixed Ghostscript package from your distribution and follow the vendor or host restart guidance.&lt;/li&gt;&lt;li&gt;For containers, pull an updated base image, rebuild without relying on cached layers and redeploy.&lt;/li&gt;&lt;li&gt;Run dpkg -s ghostscript or rpm -q ghostscript again, or ask your host to confirm, and match the revision against the advisory.&lt;/li&gt;&lt;/ol&gt;&lt;h2&gt;Interim protection if you cannot patch yet&lt;/h2&gt;&lt;p&gt;Every step above depends on a fixed package being available, so Debian 12 users, along with anyone still waiting on a host, need a stopgap in the meantime. Your strongest option is to stop accepting PDFs from visitors and low-privileged users, which keeps those files away from the converter entirely.&lt;/p&gt;&lt;p&gt;Disabling PDF reads in ImageMagick&amp;apos;s security policy also blocks the path, at the cost of PDF previews. On shared or managed hosting, ask your host to make that change, and our guide to &lt;a href=&quot;https://bugshield.co.uk/knowledge-base/php-and-server-settings&quot;&gt;PHP and server settings&lt;/a&gt; explains how to prepare and test server-level changes with them.&lt;/p&gt;&lt;p&gt;Limiting files per submission and rate-limiting upload forms reduces an attacker&amp;apos;s opportunities without closing the hole. WordPress retries a failed PDF preview with a different setting, so one crashing PDF starts two Ghostscript processes, and a failed attempt still returned a successful upload response in Wordfence&amp;apos;s test.&lt;/p&gt;&lt;h2&gt;Verifying the fix: observation versus proof&lt;/h2&gt;&lt;p&gt;A quiet server proves nothing on its own. Wordfence&amp;apos;s test PDF rendered without crashing on Debian 12, yet 28 of 40 altered versions of that file did crash it, and Debian 12 remains unpatched. Any single file that fails to crash your site tells you about that file, not about your server.&lt;/p&gt;&lt;p&gt;Proof comes from the installed package revision matching your distribution&amp;apos;s fixed version, or written confirmation from your host naming that revision. Site Health showing PDF support confirms only that Imagick recognises the format; it says nothing about ImageMagick policy or the Ghostscript fix. If you would rather have server packages, plugins and upload routes reviewed as part of regular upkeep, our &lt;a href=&quot;https://bugshield.co.uk/wordpress-plugin-update-service&quot;&gt;managed updates service&lt;/a&gt; covers tested rollouts with backups.&lt;/p&gt; &lt;h2&gt;Sources&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.wordfence.com/blog/2026/10/wordfence-argus-discovers-critical-vulnerability-in-ghostscript-the-program-that-turns-uploaded-pdfs-into-thumbnails-on-your-server/&quot; rel=&quot;noopener noreferrer&quot;&gt;Wordfence Argus Discovers Critical Vulnerability in Ghostscript, the Program That Turns Uploaded PDFs into Thumbnails on Your Server&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ubuntu.com/security/CVE-2026-39919&quot; rel=&quot;noopener noreferrer&quot;&gt;CVE-2026-39919 | Ubuntu&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://security-tracker.debian.org/tracker/CVE-2026-39919&quot; rel=&quot;noopener noreferrer&quot;&gt;Debian Security Tracker: CVE-2026-39919&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;   &lt;h2&gt; Ghostscript vulnerability WordPress FAQs &lt;/h2&gt;    &lt;h3&gt; Is there a WordPress plugin update for CVE-2026-39919?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;No. The flaw is in Ghostscript, which your operating system, host or container image supplies. The fix arrives as a system package update or a rebuilt container image.&lt;/p&gt;  &lt;h3&gt; Why does gs --version still show an old number after patching?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Distributions add the fix to the version they already ship. Ubuntu 22.04&amp;apos;s fixed package still reports 9.55.0, so check the full revision with dpkg -s ghostscript or rpm -q ghostscript instead.&lt;/p&gt;  &lt;h3&gt; Is my site safe if nobody can upload PDFs?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;If no visitor or low-privileged user can upload a PDF that then gets previewed, this attack route is not open on your site. You should still ask your host to patch, because other tools on the same server can process PDFs.&lt;/p&gt;  &lt;h3&gt; Has this Ghostscript flaw been exploited against real sites?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;At the time of its disclosure, Wordfence said it had found no public evidence that the flaw was being exploited. Its exploits worked on one build-matched test site, which is why patching matters for shared hosting images even without known attacks.&lt;/p&gt;  &lt;h3&gt; What can Debian 12 users do while bookworm is still listed as vulnerable?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Stop accepting PDFs from untrusted users, ask your host to disable PDF reads in the ImageMagick policy, and rate-limit upload forms. Keep checking the Debian tracker for a fixed bookworm package.&lt;/p&gt;         &lt;p&gt;Originally published on &lt;a href=&quot;https://bugshield.co.uk/blog/ghostscript-vulnerability-wordpress-cve-2026-39919&quot;&gt;BugShield&lt;/a&gt;.&lt;/p&gt;</content:encoded><pubDate>Wed, 14 Oct 2026 00:00:00 GMT</pubDate><atom:updated>2026-10-14T00:00:00.000Z</atom:updated><category>Security</category></item><item><title>WordPress 7.1.3 security release: seven fixes sorted by who can exploit them</title><link>https://bugshield.co.uk/blog/wordpress-7-1-3-security-release</link><guid isPermaLink="true">https://bugshield.co.uk/blog/wordpress-7-1-3-security-release</guid><description>WordPress 7.1.3 brings seven security fixes. Most depend on who can log in to your site, so the update works best alongside a quick review of user roles and stored Imgur embeds.</description><content:encoded>&lt;p&gt;The WordPress 7.1.3 security release arrived on 6th October 2026 with seven security fixes and four bug fixes. Patchstack does not class it as a drop-everything emergency, but several fixes depend on who can log in to your site, so installing the update is the first step rather than the whole job.&lt;/p&gt;  &lt;figure&gt;&lt;img src=&quot;https://bugshield.co.uk/images/blog/wordpress-7-1-3-security-release.webp&quot; alt=&quot;Older WordPress Users screen (version 5.0.3 shown) listing three accounts with Administrator, Author and Subscriber roles, as an example of the role list to review&quot; width=&quot;1236&quot; height=&quot;560&quot;&gt;&lt;figcaption&gt;Older WordPress Users screen (version 5.0.3 shown) listing three accounts with Administrator, Author and Subscriber roles, as an example of the role list to review &lt;a href=&quot;https://wordpress.org/documentation/files/2019/01/users-screen.png&quot; rel=&quot;noopener noreferrer&quot;&gt;WordPress.org&lt;/a&gt;. &lt;a href=&quot;https://wordpress.org/documentation/article/users-screen/&quot; rel=&quot;noopener noreferrer&quot;&gt;Source details&lt;/a&gt;. Resized and converted to WebP.&lt;/figcaption&gt;&lt;/figure&gt;  &lt;h2&gt;What the WordPress 7.1.3 security release changes&lt;/h2&gt;&lt;p&gt;WordPress recommends updating immediately because 7.1.3 is a security release. Patchstack, which &lt;a href=&quot;https://patchstack.com/articles/wordpress-7-1-3-security-release/&quot; rel=&quot;noopener noreferrer&quot;&gt;reviewed the fixes in detail&lt;/a&gt;, advises updating as soon as you can while describing the release as something other than a drop-everything emergency. Both views fit together once you see what each flaw needs: the comment-feed leak needs nothing beyond reaching the feed, the comments XSS needs a visitor plus a moderator&amp;apos;s click, three fixes need a Contributor or Author account, one needs an administrator to run an export, and the last depends on a plugin.&lt;/p&gt;&lt;p&gt;The release follows 7.1.2, which fixed a local file inclusion flaw, tracked as CVE-2026-87902, that Patchstack says could lead to remote code execution under the right PHP configuration. If you skipped that update, installing 7.1.3 brings both sets of fixes in one step. Neither source reports exploitation of the 7.1.3 issues.&lt;/p&gt;&lt;h2&gt;Two fixes begin with a visitor who has no account&lt;/h2&gt;&lt;p&gt;A comment feed leak is the simpler of the two. On single-post comment feeds, WordPress loaded a post&amp;apos;s comments before checking whether the visitor was allowed to see that post. The post itself was then hidden, yet its comments were still printed in the feed, which Patchstack&amp;apos;s review confirms. Comments on private and unpublished posts could therefore have been readable through the feed before you updated.&lt;/p&gt;&lt;p&gt;Stored cross-site scripting, known as stored XSS, accounts for the other: an attack that saves harmful code somewhere a trusted user later triggers it in their own browser. Here, a visitor without an account leaves a pending comment containing a crafted link, but that alone achieves nothing. The attack also needs a moderator with Editor rights or higher to click the link on the Comments admin page, and the crafted markup has to sit inside a wrapper carrying the contextual-help-tabs class. Patchstack places this pending-comment route in versions 7.1.0 to 7.1.2, because 7.1.0 added the formatting support the attack relies on. According to Patchstack, the older backports harden the same code, though WordPress describes those backports as still in progress.&lt;/p&gt;&lt;p&gt;Installing 7.1.3 is the actual fix. Until every site you manage is on it, have moderators approve or delete pending comments based on the text they can read, without clicking links inside them. Treat that habit as a sensible precaution while you schedule the update, not as a substitute for it.&lt;/p&gt;&lt;h2&gt;Three fixes need a Contributor or Author account&lt;/h2&gt;&lt;p&gt;The next three fixes need someone logged in with a Contributor or Author role. Reviewing those accounts alongside the update is a sensible step, particularly where they belong to guest writers, former staff or old agency logins.&lt;/p&gt;&lt;p&gt;By pointing the block editor&amp;apos;s link preview at a page they controlled, a Contributor was able to trigger a denial of service, meaning an attack that makes a site slow down or stop responding. Patchstack explains that a loop inside WP_Http::make_absolute_url() never exits when it meets certain relative paths, so the code keeps running instead of returning a result.&lt;/p&gt;&lt;p&gt;Embedded content accounts for the next fix, which both sources list as Imgur embeds vulnerable to XSS. Imgur sat on the WordPress trusted embed list, so whatever Imgur&amp;apos;s API returned was printed directly onto the page instead of being reduced to a sandboxed frame. Patchstack notes that the response includes text the uploader controls, for example from their own image or album, which meant attacker-controlled content reached the page unfiltered. The attacker here needs Contributor access or higher, and Patchstack lists one further condition: a target has to view that page for the attack to land. Version 7.1.3 removes Imgur from the trusted list.&lt;/p&gt;&lt;p&gt;Last in this group comes a smaller permissions slip. Authors were able to make posts sticky, pinning them to the top of the blog, through the REST API, because the check passed for anyone holding the publish_posts capability, which Authors have. The fix tightens that capability check, and neither source describes any impact beyond making posts sticky.&lt;/p&gt;&lt;h2&gt;One fix needs an admin export and one depends on plugins&lt;/h2&gt;&lt;p&gt;The WXR export is the file produced by &lt;strong&gt;Tools &amp;gt; Export&lt;/strong&gt;. A second-order SQL injection, where bad data already stored in the database is later run as part of a query, affected how that export collected featured-image IDs. Exploiting it needs an administrator to export a single content type while a malicious _thumbnail_id value already sits in the database. The default All content export does not reach the vulnerable code, and the code only exists from 6.5.0 onwards.&lt;/p&gt;&lt;p&gt;The final fix is hardening. WordPress builds some action names from a post&amp;apos;s status and type, so publishing a post fires publish_post. A plugin passing raw values into wp_insert_post() could create a post whose status and type combined into an unrelated action. Patchstack&amp;apos;s example is a post saved with the status delete and the type post, which fires delete_post, so any callbacks hooked to that action run as if a post had been deleted. WordPress 7.1.3 only fires these hooks when the status and post type are registered. Your exposure here depends on the plugins you run, and the update closes the gap either way.&lt;/p&gt;&lt;h2&gt;Update-and-audit checklist for WordPress 7.1.3&lt;/h2&gt;&lt;p&gt;Work through these steps in order and keep a note of what you checked on each site. After updating, Patchstack advises clearing the site cache, and it notes that the update leaves oEmbed data already stored in the database as _oembed_* post meta and oembed_cache posts in place.&lt;/p&gt;&lt;p&gt;Because that stored data survives, we recommend going a step further than Patchstack&amp;apos;s advice: clear &lt;a href=&quot;https://bugshield.co.uk/how-to/clear-wordpress-cache-completely&quot;&gt;every cache layer&lt;/a&gt;, including any host or CDN cache you use, so visitors receive fresh pages, and ask a developer or your host to check and remove the stored data behind any suspicious Imgur embed. Alongside the update, review who holds Contributor or higher roles.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Take a backup you know you can restore, then go to &lt;strong&gt;Dashboard &amp;gt; Updates&lt;/strong&gt; and update to 7.1.3. If the site has automatic background updates, confirm the installed version on that screen instead of assuming the update has run.&lt;/li&gt;&lt;li&gt;Open &lt;strong&gt;Users &amp;gt; All Users&lt;/strong&gt; and filter by Contributor, Author, Editor and Administrator. Remove or downgrade any account that no longer needs that level of access.&lt;/li&gt;&lt;li&gt;Clear your site&amp;apos;s cache, as Patchstack advises, along with any server cache from your host and any CDN cache your site uses.&lt;/li&gt;&lt;li&gt;Review posts that embed Imgur content, starting with any added by Contributors you do not fully trust. Patchstack says the existing embed keeps rendering after the update, so have a developer or host remove its stored data.&lt;/li&gt;&lt;li&gt;For sites on older WordPress branches, check whether a backport for that branch has shipped, and plan a move to the current version.&lt;/li&gt;&lt;/ol&gt;&lt;h2&gt;Older branches and backports&lt;/h2&gt;&lt;p&gt;WordPress &lt;a href=&quot;https://wordpress.org/news/2026/10/wordpress-7-1-3-maintenance-and-security-release/&quot; rel=&quot;noopener noreferrer&quot;&gt;backports security fixes&lt;/a&gt;, as a courtesy, to every branch still eligible for them, which currently reaches back to 4.7. Only the most recent version is actively supported. As Patchstack reported on release day, backports had shipped through the 6.6 releases while branches 4.7 to 6.5 were still waiting, and WordPress said the remaining backports would ship as they became ready.&lt;/p&gt;&lt;p&gt;A site pinned to an older branch because of a plugin or theme dependency needs two things: a check of &lt;strong&gt;Dashboard &amp;gt; Updates&lt;/strong&gt; for a new minor release on its branch, and a plan to reach the current version. If your branch is still waiting for its backport, start that plan now.&lt;/p&gt;&lt;h2&gt;How to confirm the update worked&lt;/h2&gt;&lt;p&gt;Open &lt;strong&gt;Dashboard &amp;gt; Updates&lt;/strong&gt; and check that it reports WordPress 7.1.3 as installed. The screen confirms the code running now, and it says nothing about whether anyone used one of these flaws before you updated.&lt;/p&gt;&lt;p&gt;To look beyond the version number, check for signs of misuse: unfamiliar accounts in &lt;strong&gt;Users &amp;gt; All Users&lt;/strong&gt;, posts you did not expect, or Imgur embeds from unknown authors. A past read of the comment feed leaves nothing in the dashboard, so no check there can show whether comments on private posts were seen. Finding nothing is reassuring, but an empty result does not establish safety on its own. If you spot an administrator you did not create, our guide to how &lt;a href=&quot;https://bugshield.co.uk/blog/wordpress-plugin-supply-chain-attack&quot;&gt;hidden admins&lt;/a&gt; were created in a recent plugin attack explains how to check for rogue administrator accounts.&lt;/p&gt;&lt;p&gt;Core releases do not fix plugin flaws, so finish by running your plugin list through our &lt;a href=&quot;https://bugshield.co.uk/tools/wordpress-plugin-vulnerability-lookup&quot;&gt;vulnerability lookup&lt;/a&gt; using each plugin&amp;apos;s slug and installed version. Treat any result it returns as a record to act on, and an unknown result as a gap rather than a clean bill of health.&lt;/p&gt; &lt;h2&gt;Sources&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://wordpress.org/news/2026/10/wordpress-7-1-3-maintenance-and-security-release/&quot; rel=&quot;noopener noreferrer&quot;&gt;WordPress 7.1.3 Maintenance and Security Release&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://patchstack.com/articles/wordpress-7-1-3-security-release/&quot; rel=&quot;noopener noreferrer&quot;&gt;WordPress 7.1.3 Security Release - Patchstack&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;   &lt;h2&gt; WordPress 7.1.3 security release FAQs &lt;/h2&gt;    &lt;h3&gt; Is WordPress 7.1.3 an emergency update?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;WordPress recommends updating immediately because it is a security release. Patchstack advises updating as soon as you can but does not class it as a drop-everything emergency. The comment-feed leak needs nothing beyond reaching the feed, the comments XSS needs a visitor plus a moderator&amp;apos;s click, three fixes need Contributor or Author access, one needs an admin export and one depends on a plugin. Neither source reports exploitation.&lt;/p&gt;  &lt;h3&gt; Will automatic updates install WordPress 7.1.3 for me?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Sites that support automatic background updates begin the update on their own. Starting is not the same as finishing, so check the installed version on &lt;strong&gt;Dashboard &amp;gt; Updates&lt;/strong&gt; to confirm 7.1.3 is in place.&lt;/p&gt;  &lt;h3&gt; Does clearing my cache remove a malicious Imgur embed?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Clearing your site&amp;apos;s cache is the step Patchstack recommends after updating. Patchstack also notes that the update does not remove oEmbed data already stored in the database as _oembed_* post meta and oembed_cache posts, and that a malicious embed saved before 7.1.3 keeps rendering. Review posts with Imgur embeds as well, and ask a developer or host to remove the stored data behind any suspicious ones.&lt;/p&gt;  &lt;h3&gt; My site runs an older WordPress branch. Is it protected?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;On 6th October 2026, backports had shipped through the 6.6 releases, while branches 4.7 to 6.5 were still waiting. WordPress says those backports will ship as they become ready. Check &lt;strong&gt;Dashboard &amp;gt; Updates&lt;/strong&gt; for a new minor release on your branch, and plan a move to the current version.&lt;/p&gt;  &lt;h3&gt; Which user accounts should I review after updating?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Review everyone with Contributor, Author, Editor or Administrator roles under &lt;strong&gt;Users &amp;gt; All Users&lt;/strong&gt;. Three fixes involve Contributor or Author access, and the comments XSS relies, among other conditions, on an Editor or higher clicking a link, so remove or downgrade any account that no longer needs its current role.&lt;/p&gt;         &lt;p&gt;Originally published on &lt;a href=&quot;https://bugshield.co.uk/blog/wordpress-7-1-3-security-release&quot;&gt;BugShield&lt;/a&gt;.&lt;/p&gt;</content:encoded><pubDate>Mon, 12 Oct 2026 00:00:00 GMT</pubDate><atom:updated>2026-10-12T00:00:00.000Z</atom:updated><category>Security</category></item><item><title>Bricksforge vulnerability: update to 3.1.8.10 as attacks target file uploads</title><link>https://bugshield.co.uk/blog/bricksforge-vulnerability-cve-2026-85097</link><guid isPermaLink="true">https://bugshield.co.uk/blog/bricksforge-vulnerability-cve-2026-85097</guid><description>Bricksforge 3.1.8.9 and earlier let attackers plant PHP through form uploads without logging in. Find out whether the plugin is installed, update it and check for files left behind.</description><content:encoded>&lt;p&gt;The Bricksforge vulnerability tracked as CVE-2026-85097 lets an attacker who has no login plant PHP code on your server through the plugin&amp;apos;s form uploads. Security firm Patchstack reports attack attempts in its own monitoring since 7th October 2026 and says Bricksforge 3.1.8.10 closes the flaw. If your Bricks Builder site uses the Bricksforge add-on, update it now, then check your uploads folders and logs, because the update stops new attacks without removing anything already planted.&lt;/p&gt;  &lt;figure&gt;&lt;img src=&quot;https://bugshield.co.uk/images/blog/bricksforge-vulnerability-cve-2026-85097.webp&quot; alt=&quot;Screenshot of an older WordPress 5.2.4 dashboard for a sample blog, showing a PHP update notice, Quick Draft and At a Glance panels&quot; width=&quot;1438&quot; height=&quot;711&quot;&gt;&lt;figcaption&gt;Screenshot of an older WordPress 5.2.4 dashboard for a sample blog, showing a PHP update notice, Quick Draft and At a Glance panels &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:WordPress_DashboardView.png&quot; rel=&quot;noopener noreferrer&quot;&gt;Gmoran6&lt;/a&gt;. &lt;a href=&quot;https://creativecommons.org/licenses/by-sa/4.0/&quot; rel=&quot;noopener noreferrer&quot;&gt;CC BY-SA 4.0&lt;/a&gt;. Resized and converted to WebP.&lt;/figcaption&gt;&lt;/figure&gt;  &lt;h2&gt;How the Bricksforge vulnerability works&lt;/h2&gt;&lt;p&gt;Bricksforge adds extra features to Bricks Builder, including forms that accept file uploads. &lt;a href=&quot;https://patchstack.com/articles/critical-unauthenticated-arbitrary-file-upload-vulnerability-exploited-in-bricksforge-plugin/&quot; rel=&quot;noopener noreferrer&quot;&gt;Patchstack&amp;apos;s advisory&lt;/a&gt; describes a problem that unfolds in two stages. When a visitor first uploads a file, Bricksforge checks the file type. A genuine image with PHP code hidden inside passes that check, because it really is an image.&lt;/p&gt;&lt;p&gt;The second stage comes when the form is submitted. At that point the plugin trusts the file details sent by the visitor&amp;apos;s browser, including the address where the file should be saved. An attacker can change that destination to a PHP filename, and Bricksforge writes the image&amp;apos;s contents there. The hidden code then sits in a file the server is willing to run.&lt;/p&gt;&lt;p&gt;PHP is the programming language WordPress runs on, so a PHP file planted this way hands control to whoever placed it. Patchstack lists the possible consequences as web shells (hidden control panels that let an attacker run commands on the server), changed site content, reading sensitive data and persistent access to the site.&lt;/p&gt;&lt;p&gt;No login is required to attempt the attack. Patchstack tracks the flaw as CVE-2026-85097 and gives it a CVSS score of 10.0. CVSS is the common scale for rating how severe a vulnerability is, and 10.0 sits at the very top of it.&lt;/p&gt;&lt;h2&gt;Which sites are affected and what Patchstack has seen&lt;/h2&gt;&lt;p&gt;The exposure covers WordPress sites running the Bricksforge plugin at version 3.1.8.9 or earlier. Bricksforge is a separate add-on for Bricks Builder, so a site built with Bricks alone falls outside this advisory. Patchstack states no extra condition for exposure, such as a published form or a file upload field, so the installed version alone decides whether you need to update.&lt;/p&gt;&lt;p&gt;Patchstack first saw exploitation attempts in its own telemetry at 21:47 UTC on 7th October 2026 and published the advisory on 8th October 2026. That time marks the earliest activity Patchstack observed, not a confirmed start date for attacks everywhere. The attempts show attackers are actively trying the flaw, yet they do not mean any particular site, including yours, has been broken into.&lt;/p&gt;&lt;p&gt;According to Patchstack, version 3.1.8.10 contains the fix. The vendor&amp;apos;s changelog, referenced in Patchstack&amp;apos;s advisory, is the place to confirm the security fix for the copy you install.&lt;/p&gt;&lt;p&gt;Upload flaws have featured in our recent coverage of &lt;a href=&quot;https://bugshield.co.uk/blog/elementor-pro-4-2-1-vulnerability&quot;&gt;Elementor Pro&lt;/a&gt; and the &lt;a href=&quot;https://bugshield.co.uk/blog/gravity-forms-vulnerability-cve-2026-84434&quot;&gt;Gravity Forms issue&lt;/a&gt;, and the same lesson applies here: patching is only half the job when attackers can leave files behind. Bricksforge still needs its own response, with a different CVE, a different fixed version and its own folders and log entries to check.&lt;/p&gt;&lt;h2&gt;Check whether Bricksforge is installed on your site&lt;/h2&gt;&lt;p&gt;The quickest check is in the WordPress dashboard. Go to &lt;strong&gt;Plugins &amp;gt; Installed Plugins&lt;/strong&gt; and look for Bricksforge in the list. The version number appears under the plugin&amp;apos;s description, and that number decides what you do next.&lt;/p&gt;&lt;p&gt;Inherited sites deserve extra care. When a freelancer or former agency built the site, you may not know every plugin they added, and an add-on can be installed to power a single form or layout feature. Check the plugin list on every site they handed over, not only the one you think uses forms.&lt;/p&gt;&lt;p&gt;Locked out of wp-admin? Ask your host, or open the hosting file manager and look inside wp-content/plugins for a folder named after Bricksforge. Our guide to &lt;a href=&quot;https://bugshield.co.uk/knowledge-base/file-management&quot;&gt;website file management&lt;/a&gt; explains where those folders sit and how to approach file changes safely.&lt;/p&gt;&lt;p&gt;For a quick outside view, our free &lt;a href=&quot;https://bugshield.co.uk/tools/wordpress-plugin-detector&quot;&gt;plugin detector&lt;/a&gt; looks for plugin clues in public page assets. A match is a useful hint. An empty result proves nothing, because a plugin does not always leave traces in public pages, so the dashboard or file check remains the real answer.&lt;/p&gt;&lt;h2&gt;How to update Bricksforge to 3.1.8.10&lt;/h2&gt;&lt;p&gt;With active attempts under way, the update comes first. A &lt;a href=&quot;https://bugshield.co.uk/how-to/update-wordpress-plugins-safely&quot;&gt;careful update routine&lt;/a&gt; includes a backup and a staging test, and a recent backup is still worth having, but holding the patch back for a full staging cycle leaves the upload hole open in the meantime. Work through these steps in order.&lt;/p&gt;&lt;p&gt;Bear in mind that any backup, recent or older, can contain files an attacker has already uploaded. Patchstack&amp;apos;s 7th October date marks only the earliest activity it observed, so no backup is clean simply because of its date.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Take or confirm a recent backup of your files and database so you have a recovery point if the update causes a problem.&lt;/li&gt;&lt;li&gt;Open &lt;strong&gt;Plugins &amp;gt; Installed Plugins&lt;/strong&gt; and note the current Bricksforge version.&lt;/li&gt;&lt;li&gt;Update Bricksforge to 3.1.8.10 or later using the vendor&amp;apos;s own update route.&lt;/li&gt;&lt;li&gt;Reload the plugins screen and confirm the version now reads 3.1.8.10 or higher.&lt;/li&gt;&lt;li&gt;Check the vendor&amp;apos;s changelog to confirm the release you installed includes the security fix.&lt;/li&gt;&lt;li&gt;Submit a test entry on each Bricksforge form, including one with a file upload, and check the entry arrives as expected.&lt;/li&gt;&lt;/ol&gt;&lt;h2&gt;If you cannot update straight away&lt;/h2&gt;&lt;p&gt;Patchstack states that its RapidMitigate rule blocks these exploitation attempts for the sites it protects. That protection applies only to sites covered by Patchstack, and it does not repair the plugin.&lt;/p&gt;&lt;p&gt;The rule is not a substitute for updating. The vulnerable code stays on the server until Bricksforge is updated, so plan the update for the same day if you can, and run the file and log checks below whether or not a rule was in place.&lt;/p&gt;&lt;h2&gt;Updating closes the hole but leaves planted files behind&lt;/h2&gt;&lt;p&gt;The update stops new uploads through the flaw. Any file an attacker managed to place before you patched remains on the server, ready to run, which is why the checks after the update matter as much as the update itself.&lt;/p&gt;&lt;p&gt;Start in the folder Patchstack highlights: wp-content/uploads/bricksforge/tmp/. Any PHP file there is a red flag, and files following the pattern login_admin_*.php (login_admin_ followed by other characters) match the indicators Patchstack lists. Patchstack also gives /wp-content/uploads/2026/10/ as an example of where login_admin files were aimed, so widen the search to the rest of wp-content/uploads, which normally holds images, documents and other media rather than PHP code.&lt;/p&gt;&lt;p&gt;Your hosting file manager or an SFTP client will show these folders. Sorting by modification date helps you spot recent changes, but treat dates with caution. Patchstack&amp;apos;s 7th October date is only the earliest activity it saw, so an earlier date does not clear a file, and file dates can be altered.&lt;/p&gt;&lt;p&gt;Found something suspicious? Resist deleting it on the spot. Note the file name, location and date, download a copy for the record, and then follow a structured clean-up. Our guide to &lt;a href=&quot;https://bugshield.co.uk/knowledge-base/fixing-a-hacked-site&quot;&gt;fixing a hacked site&lt;/a&gt; covers documenting symptoms and closing the entry point, while the &lt;a href=&quot;https://bugshield.co.uk/how-to/remove-wordpress-malware-manually&quot;&gt;manual malware removal guide&lt;/a&gt; walks through containment and replacing affected files.&lt;/p&gt;&lt;h2&gt;Check your server logs for Bricksforge attack requests&lt;/h2&gt;&lt;p&gt;Your host&amp;apos;s access logs record the requests made to your site, and Patchstack lists several indicators worth searching for. A POST request, mentioned below, is the kind a browser sends when someone submits a form.&lt;/p&gt;&lt;p&gt;Treat a match on the form address with care. Genuine visitors submitting your Bricksforge forms use the same /wp-json/bricksforge/v1/form_submit address, so a bare match proves nothing. The stronger signs are submissions containing temporaryFileUploads and follow-up requests to PHP files that have newly appeared in your uploads folders.&lt;/p&gt;&lt;p&gt;Standard access logs record the address requested rather than the contents of the form, so the temporaryFileUploads detail will only show in more detailed logs from your host, a firewall or a security plugin. Ask your host what they keep if you cannot see it yourself.&lt;/p&gt;&lt;p&gt;Hosts keep logs for different lengths of time, so check how far back yours go. An empty search covers only the period your logs retain, and it cannot rule out activity before then.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;POST requests to /wp-json/bricksforge/v1/form_submit, especially where the submitted data includes temporaryFileUploads.&lt;/li&gt;&lt;li&gt;Requests to admin-ajax.php using the bricksforge_form_submit action.&lt;/li&gt;&lt;li&gt;Calls to the bricksforge_regenerate_nonce action.&lt;/li&gt;&lt;li&gt;Requests to newly created PHP files in uploads folders, such as a login_admin file under /wp-content/uploads/2026/10/.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;What your results do and do not prove&lt;/h2&gt;&lt;p&gt;A clean set of checks is good news with limits. No suspicious files and no matching log entries mean you found no evidence of abuse. Proof that the site was never targeted is a different matter, because logs can be incomplete, attackers can rename or move files, and a planted file can create further access elsewhere before anyone notices.&lt;/p&gt;&lt;p&gt;Version numbers carry the same caveat. Seeing 3.1.8.10 on the plugins screen confirms the patched release is installed, yet the number says nothing about what happened before the patch went on.&lt;/p&gt;&lt;p&gt;Any suspicious file or matching request changes the picture. Treat the site as potentially compromised and investigate beyond the update: &lt;a href=&quot;https://bugshield.co.uk/how-to/manage-wordpress-user-roles&quot;&gt;review administrator accounts&lt;/a&gt; under &lt;strong&gt;Users &amp;gt; All Users&lt;/strong&gt;, change passwords for WordPress, hosting and database access, and &lt;a href=&quot;https://bugshield.co.uk/how-to/change-wordpress-salts-and-keys&quot;&gt;replace the security keys&lt;/a&gt; in wp-config.php so existing logins are signed out.&lt;/p&gt;&lt;p&gt;Restoring a backup brings its own catches. An older copy can already contain planted files, and restoring it also brings back the vulnerable Bricksforge version, so the update must be applied again straight afterwards.&lt;/p&gt;&lt;h2&gt;Getting help with a Bricksforge update or clean-up&lt;/h2&gt;&lt;p&gt;When the update goes through smoothly and your checks come back clear, keep a short note of what you did and when, including how far back your logs reached. If you would rather not touch the plugin yourself, BugShield can carry out the Bricksforge update as a &lt;a href=&quot;https://bugshield.co.uk/one-off&quot;&gt;one-off fix&lt;/a&gt; at a confirmed price. Where suspicious files, unknown requests or other signs of compromise have turned up, our &lt;a href=&quot;https://bugshield.co.uk/wordpress-hacked-site-cleanup&quot;&gt;hacked site clean-up&lt;/a&gt; is the better route, because the work goes beyond the update to closing the entry point.&lt;/p&gt;&lt;p&gt;For sites you look after over the long term, the free &lt;a href=&quot;https://bugshield.co.uk/tools/wordpress-plugin-vulnerability-lookup&quot;&gt;plugin vulnerability lookup&lt;/a&gt; lets you check a plugin slug and installed version against known records. A brand-new CVE such as this one may not be listed yet, and a missing record is never a clean bill of health, so treat the advisory itself as the authority for now.&lt;/p&gt; &lt;h2&gt;Sources&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://patchstack.com/articles/critical-unauthenticated-arbitrary-file-upload-vulnerability-exploited-in-bricksforge-plugin/&quot; rel=&quot;noopener noreferrer&quot;&gt;Critical Unauthenticated Arbitrary File Upload Vulnerability Exploited in Bricksforge Plugin - Patchstack&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://patchstack.com/articles/&quot; rel=&quot;noopener noreferrer&quot;&gt;Latest WordPress Security News - Patchstack Articles&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;   &lt;h2&gt; Bricksforge vulnerability FAQs &lt;/h2&gt;    &lt;h3&gt; Is every Bricks Builder site affected by the Bricksforge vulnerability?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;No. Only sites with the Bricksforge add-on installed at version 3.1.8.9 or earlier are affected. A site built with Bricks Builder alone falls outside this advisory. Patchstack states no further condition, so if Bricksforge 3.1.8.9 or earlier appears under &lt;strong&gt;Plugins &amp;gt; Installed Plugins&lt;/strong&gt;, update it.&lt;/p&gt;  &lt;h3&gt; Which Bricksforge version should I install?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Install 3.1.8.10 or later, which Patchstack reports contains the fix for CVE-2026-85097. After updating, reload the plugins screen to confirm the version number and check the vendor&amp;apos;s changelog for the security fix.&lt;/p&gt;  &lt;h3&gt; Does updating Bricksforge remove files an attacker already uploaded?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;No. The update stops new uploads through the flaw, but any PHP file planted beforehand stays on the server. Check wp-content/uploads/bricksforge/tmp/ and the wider uploads folders, including dated folders such as /wp-content/uploads/2026/10/, for unexpected PHP files, especially ones named like login_admin_*.php.&lt;/p&gt;  &lt;h3&gt; What should I search for in my server logs?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Look for POST requests to /wp-json/bricksforge/v1/form_submit containing temporaryFileUploads, admin-ajax.php requests using the bricksforge_form_submit action, calls to bricksforge_regenerate_nonce and requests to new PHP files in uploads folders. Genuine form submissions use the same form_submit address, so a match on that address alone proves nothing.&lt;/p&gt;  &lt;h3&gt; My files and logs look clean. Does that prove my site is safe?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;No. A clean result means you found no evidence of abuse, not that the site was never targeted. Your logs only cover the period your host retains, Patchstack&amp;apos;s 7th October date is just the earliest activity it observed, and files can be renamed or moved. Keep the plugin updated and treat any later sign of trouble seriously.&lt;/p&gt;         &lt;p&gt;Originally published on &lt;a href=&quot;https://bugshield.co.uk/blog/bricksforge-vulnerability-cve-2026-85097&quot;&gt;BugShield&lt;/a&gt;.&lt;/p&gt;</content:encoded><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate><atom:updated>2026-10-11T00:00:00.000Z</atom:updated><category>Security</category></item><item><title>BugShield scanned 100,000 WordPress sites for the Gravity Forms vulnerability</title><link>https://bugshield.co.uk/blog/gravity-forms-vulnerability-scan-100000-wordpress-sites</link><guid isPermaLink="true">https://bugshield.co.uk/blog/gravity-forms-vulnerability-scan-100000-wordpress-sites</guid><description>BugShield scanned 100,000 WordPress URLs and found 4,697 that appeared to run a vulnerable Gravity Forms version. Many were still on the older 2.x branch.</description><content:encoded>&lt;p&gt;
BugShield AI automatically scans the web for WordPress vulnerabilities. For the recent &lt;strong&gt;Gravity Forms vulnerability&lt;/strong&gt;, we ran a targeted scan across 100,000 WordPress URLs. It found 4,697 sites that appeared to be running an
				affected plugin version, with many still on Gravity Forms 2.x. That is not proof that every site could be
				exploited, but it is a much larger patching gap than any site owner should ignore.
&lt;/p&gt;       Check your Gravity Forms version    
Versions up to and including 3.1.0.4 are affected by CVE-2026-84434. Gravity Forms 3.1.1 is the first
			patched release, but site owners should install the latest version available through their licence.
  &lt;a href=&quot;https://bugshield.co.uk/wordpress-plugin-update-service&quot;&gt; Get help updating  &lt;/a&gt;    &lt;h2&gt;Why we ran a targeted scan&lt;/h2&gt; &lt;p&gt;
BugShield AI continuously scans the web for WordPress vulnerabilities. When it finds a site that appears to
				be running vulnerable software, BugShield Bot automatically warns the owner so there is a chance to fix the
				problem before somebody abuses it.
&lt;/p&gt; &lt;p&gt;
The process became especially relevant when &lt;strong&gt;CVE-2026-84434&lt;/strong&gt; was disclosed in Gravity Forms.
				The flaw can allow an unauthenticated visitor to upload a dangerous file when an affected site has a public
				form containing a File Upload field whose visibility is set to Hidden. In the wrong server setup, that file
				could be executed as code.
&lt;/p&gt; &lt;p&gt;
We had already published a full explanation of  &lt;a href=&quot;https://bugshield.co.uk/blog/gravity-forms-vulnerability-cve-2026-84434&quot;&gt;how the Gravity Forms vulnerability works&lt;/a&gt;.
				The next question was broader: now that a fixed release existed, how many WordPress sites still appeared to
				be running a vulnerable version? We ran a dedicated scan across a list of 100,000 WordPress URLs to find out.
&lt;/p&gt; &lt;h2&gt;4,697 sites matched the affected version range&lt;/h2&gt; &lt;p&gt;
The scan identified 4,697 sites running a Gravity Forms version up to and including 3.1.0.4. Put another way,
&lt;strong&gt;4.697% of the 100,000 URLs we checked matched the vulnerable version range&lt;/strong&gt;. Rounded for a
				simpler comparison, that is about 4.7%, or roughly one in every 21 sites in the scanned list.
&lt;/p&gt;   &lt;table&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Scan result&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Finding&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;WordPress URLs checked&lt;/th&gt; &lt;td&gt;100,000&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Sites matching the affected version range&lt;/th&gt; &lt;td&gt;4,697&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Share of the scanned list&lt;/th&gt; &lt;td&gt;4.697%, or about one in 21&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Affected version range&lt;/th&gt; &lt;td&gt;Gravity Forms 3.1.0.4 and earlier&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;First patched release&lt;/th&gt; &lt;td&gt;Gravity Forms 3.1.1&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Notable pattern&lt;/th&gt; &lt;td&gt;Many affected sites were still running a 2.x release&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;   &lt;p&gt;
The denominator matters. We are not saying that 4.7% of all Gravity Forms installations are vulnerable, or
				that this is a global market-share estimate. It is the result from the specific list of 100,000 WordPress URLs
				we scanned. Even with that boundary, 4,697 sites is a substantial number of owners left with a known weakness
				in production.
&lt;/p&gt; &lt;h2&gt;What the number does and does not prove&lt;/h2&gt; &lt;p&gt;
A vulnerable plugin version is not the same as a confirmed vulnerable form, and neither is proof of a hacked
				website. The disclosed attack route also needs a public form with a File Upload field set to Hidden. The server
				must then be willing to execute the file for the attack to progress to code execution.
&lt;/p&gt; &lt;p&gt;
Our 4,697 result establishes the part we could identify across the list: those sites appeared to be running
				Gravity Forms within the affected version range. It does not tell us that each one had the required form
				configuration, that somebody tried the attack, or that an upload succeeded.
&lt;/p&gt; &lt;p&gt;
That distinction prevents a useful warning from becoming a frightening but unsupported claim. It should not
				become an excuse to leave the old plugin installed. Site owners can forget about a form on an old landing page,
				a draft campaign, or a page built by a previous agency. Updating removes the known weakness without relying on
				a perfect inventory of every form that has ever been published.
&lt;/p&gt; &lt;h2&gt;The number of Gravity Forms 2.x sites stood out&lt;/h2&gt; &lt;p&gt;
A lot of the affected sites were not just one small security release behind. They were still on version 2.x,
				while Gravity Forms has moved to the 3.x line. Those installations need the same urgent security response, but
				their owners may face more update work than somebody moving from 3.1.0.4 to a patched 3.1 release.
&lt;/p&gt; &lt;p&gt;
The  &lt;a href=&quot;https://docs.gravityforms.com/gravityforms-change-log/&quot; rel=&quot;noopener noreferrer&quot;&gt;official Gravity Forms changelog&lt;/a&gt; describes the move from 2.x to 3.x as a major upgrade that may include
				breaking changes, and recommends testing it in a sandbox. That is sensible advice. A busy site may have custom
				form code, payment feeds, CRM connections, or styling that needs to be checked before the update reaches live.
&lt;/p&gt; &lt;p&gt;
Compatibility work explains why an update can be delayed. It does not make the vulnerable version safer. Take
				a current backup, copy the site to staging, test the newest release there, and set a short deadline for the live
				upgrade. If a problem appears, fix that problem instead of allowing the old branch to remain indefinitely.
&lt;/p&gt; &lt;h2&gt;Finding the issue is only half the job&lt;/h2&gt; &lt;p&gt;
A scan result has little value if it sits in a dashboard nobody checks. BugShield Bot turns the finding into a
				warning for the site owner. The message can explain which vulnerable software was detected, why it matters,
				and what the owner can do next.
&lt;/p&gt; &lt;p&gt;
Careful wording matters here too. The useful message is not that a website has definitely been hacked. It is
				that the site appears to be running an affected Gravity Forms version and needs an update. If the required form
				setup was public during that vulnerable period, the owner can then make an informed decision about reviewing
				the files and logs.
&lt;/p&gt; &lt;p&gt;
That is the reason we keep the monitoring continuous. New vulnerabilities appear, sites drift out of date, and
				a clean result from last month cannot describe the software running today. Repeated checks shorten the gap
				between a problem becoming visible and the person responsible for the site hearing about it.
&lt;/p&gt; &lt;h2&gt;What Gravity Forms site owners should do now&lt;/h2&gt; &lt;p&gt;
Start by opening &lt;strong&gt;Plugins &amp;gt; Installed Plugins&lt;/strong&gt; in WordPress and checking the installed Gravity
				Forms version. Any release up to and including 3.1.0.4 falls inside the affected range. Gravity Forms 3.1.1
				contains the first fix, although installing the latest stable release available through the licence is the better
				target.
&lt;/p&gt; &lt;p&gt;Then work through the parts that turn an update into a proper response:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;take a current backup before changing the plugin&lt;/li&gt; &lt;li&gt;test the upgrade on staging first if the site is moving from Gravity Forms 2.x&lt;/li&gt; &lt;li&gt;submit every important form after the update, including payments, uploads, notifications, and integrations&lt;/li&gt; &lt;li&gt;check whether any public form used a hidden File Upload field while the affected version was installed&lt;/li&gt; &lt;li&gt;review files and server logs if the known vulnerable configuration was publicly reachable&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;
Updating closes the disclosed route, but it cannot remove a malicious file that may have arrived earlier. Where
				the vulnerable form configuration existed, check Gravity Forms upload storage, the wider &lt;code&gt;wp-content&lt;/code&gt;
directory, administrator accounts, must-use plugins, scheduled tasks, and requests made during the exposed period.
&lt;/p&gt; &lt;h2&gt;The patch gap is the bigger lesson&lt;/h2&gt; &lt;p&gt;
A security fix can be available and still leave thousands of websites behind. Some owners never see the update
				notice. Some licences have expired. Others are worried about breaking an old integration, or assume that a
				quiet site is not interesting to an attacker. The result is the same: vulnerable code stays online after the
				problem and its fix are public.
&lt;/p&gt; &lt;p&gt;
The 2.x installations make that gap particularly visible. Updating them may need more care, but postponing the
				work simply transfers the risk from a planned staging test to an unplanned security incident. Monitoring works
				best when it identifies that drift early and gives the owner a practical route back to a supported release.
&lt;/p&gt; &lt;h2&gt;A useful scan should end with a safer website&lt;/h2&gt; &lt;p&gt;
The headline figure from this scan is 4,697, but the goal is not to collect a larger number next time. It is to
				help those site owners close the gap. That means detecting the issue, communicating it without exaggeration,
				and making the update achievable even when an old site needs careful testing.
&lt;/p&gt; &lt;p&gt;
BugShield maintenance plans include ongoing vulnerability monitoring and  &lt;a href=&quot;https://bugshield.co.uk/wordpress-plugin-update-service&quot;&gt;managed WordPress plugin updates&lt;/a&gt;. If a vulnerable form was public,
				or the site contains files and users nobody recognises, our  &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt;WordPress malware removal service&lt;/a&gt; can investigate the files, database,
				accounts, scheduled tasks, and likely entry point.
&lt;/p&gt; &lt;p&gt;
For a single update or investigation, &lt;a href=&quot;https://bugshield.co.uk/one-off&quot;&gt;request a one-off WordPress fix&lt;/a&gt;. Whether BugShield
				handles it or an existing developer does, check the installed version today. A known vulnerability becomes far
				less useful to an attacker once the affected software is no longer there.
&lt;/p&gt;   &lt;h2&gt; Quick answers about the Gravity Forms scan &lt;/h2&gt;    &lt;h3&gt; What did BugShield find in the scan of 100,000 WordPress sites?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;BugShield found 4,697 URLs that appeared to be running a Gravity Forms version affected by CVE-2026-84434. That is 4.697% of the scanned list, or roughly one in every 21 URLs checked. Many of the affected sites were still running a 2.x release.&lt;/p&gt;  &lt;h3&gt; Does the result mean 4,697 websites were hacked?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;No. The scan identified an affected plugin version, not a successful attack. Exploiting this vulnerability also requires a public form with a hidden File Upload field and a server setup that can execute the uploaded file.&lt;/p&gt;  &lt;h3&gt; Why does finding Gravity Forms 2.x matter?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Gravity Forms treats the move from 2.x to 3.x as a major upgrade that may include breaking changes. Those sites need to patch urgently, but should use a current backup and staging copy to test forms, add-ons, payments, and integrations before updating live.&lt;/p&gt;  &lt;h3&gt; Which Gravity Forms version fixes CVE-2026-84434?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Gravity Forms 3.1.1 is the first patched release. Sites running 3.1.0.4 or earlier are affected and should install the latest stable version available through their Gravity Forms licence.&lt;/p&gt;  &lt;h3&gt; What does BugShield Bot do after a vulnerable site is found?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;BugShield Bot automatically warns the site owner that vulnerable WordPress software has been detected. The warning gives the owner a chance to update, test the site, and investigate further where the vulnerable configuration may have been publicly reachable.&lt;/p&gt;         &lt;p&gt;Originally published on &lt;a href=&quot;https://bugshield.co.uk/blog/gravity-forms-vulnerability-scan-100000-wordpress-sites&quot;&gt;BugShield&lt;/a&gt;.&lt;/p&gt;</content:encoded><pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate><atom:updated>2026-09-23T00:00:00.000Z</atom:updated><category>Security</category></item><item><title>Critical WordPress vulnerability affects versions dating back to 2016</title><link>https://bugshield.co.uk/blog/wordpress-cve-2026-87902</link><guid isPermaLink="true">https://bugshield.co.uk/blog/wordpress-cve-2026-87902</guid><description>A critical WordPress page-template vulnerability is already being probed. Learn which sites meet the known conditions, how to update, and what to check.</description><content:encoded>&lt;p&gt;
The &lt;strong&gt;WordPress CVE-2026-87902 vulnerability&lt;/strong&gt; can let a visitor make WordPress load a local PHP file
				that sits outside the active theme. Turning that into control of a website depends on the theme and server setup,
				but attackers started checking sites within hours of the patch. Update WordPress now, then use the evidence from
				your own site to decide how much investigation is needed.
&lt;/p&gt;       Update WordPress now    
Install the latest WordPress release available for your installation. Version 7.1.2 was the first fix for this vulnerability, but later security releases also need to be installed. A vulnerable version is not
			proof that the site was hacked, but waiting leaves a known route open while scanning has already begun.
  &lt;a href=&quot;https://bugshield.co.uk/wordpress-plugin-update-service&quot;&gt; Get help with the update  &lt;/a&gt;    &lt;h2&gt;CVE-2026-87902 at a glance&lt;/h2&gt; &lt;p&gt; &lt;a href=&quot;https://wordpress.org/news/2026/09/wordpress-7-1-2-release/&quot; rel=&quot;noopener noreferrer&quot;&gt;WordPress released the fix on 22nd September 2026 and recommends updating immediately&lt;/a&gt;. Its  &lt;a href=&quot;https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-7hp8-65ch-5whp&quot; rel=&quot;noopener noreferrer&quot;&gt;official security advisory&lt;/a&gt; gives the flaw a CVSS score of 9.2 out of 10. The rating is Critical because the
				request does not require a login or a click from an administrator, and a successful chain can end in remote code
				execution.
&lt;/p&gt;   &lt;table&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Detail&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;What site owners need to know&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Issue&lt;/th&gt; &lt;td&gt;Path traversal leading to local PHP file inclusion and, under the right conditions, remote code execution&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Affected releases&lt;/th&gt; &lt;td&gt;Unpatched WordPress releases from 4.7.0 through 7.1.1&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;First fixed 7.1 release&lt;/th&gt; &lt;td&gt;WordPress 7.1.2&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Older branches&lt;/th&gt; &lt;td&gt;Security backports are available for every branch from 7.0 back to 4.7&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Severity&lt;/th&gt; &lt;td&gt;CVSS 9.2, Critical&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Login required&lt;/th&gt; &lt;td&gt;No&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Activity seen&lt;/th&gt; &lt;td&gt;Automated probing, with no attacker-controlled payload delivery observed at publication time&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;   &lt;h2&gt;What the flaw changes in WordPress&lt;/h2&gt; &lt;p&gt;
When somebody opens a page, WordPress works out which template file the active theme should use. The vulnerable
				part sits in that template resolution. A specially formed request can make &lt;code&gt;get_page_template()&lt;/code&gt; step
				outside the theme directories and include another readable PHP file already present on the same server.
&lt;/p&gt; &lt;p&gt;
That is serious, but the last part is important. The flaw does not simply let an attacker upload any program and
				run it on every WordPress website. They need a useful local PHP file to be available, and the active theme must
				have a particular directory structure. Remote code execution becomes possible when those pieces line up.
&lt;/p&gt; &lt;p&gt;
The distinction should shape the response. It is not a reason to postpone the update, especially now that the
				patch is public and probing has started. It is a reason to avoid telling every owner of an outdated site that
				their website has definitely been taken over.
&lt;/p&gt; &lt;h2&gt;Which websites meet the known conditions?&lt;/h2&gt; &lt;p&gt;
The theme condition is a top-level folder whose name begins with &lt;code&gt;page-&lt;/code&gt;, in either the active parent
				or child theme. WordPress names the older Twenty Twelve and Twenty Fourteen themes as examples. The advisory
				also mentions Neve, Hestia, and Sydney, although the presence of one of those themes does not by itself prove
				that the full attack chain will work.
&lt;/p&gt; &lt;p&gt;
The server then needs a readable local PHP file that can be used to move from file inclusion to code execution.
				One documented route involves a PHP PEAR utility and the &lt;code&gt;register_argc_argv&lt;/code&gt; setting. The WordPress
				advisory says the official PHP Docker image meets that server condition, as does the default cPanel configuration
				when it runs a PHP version earlier than 8.5.
&lt;/p&gt; &lt;p&gt;
If either condition is absent, this specific route to remote code execution is incomplete. Checking them can
				help a developer judge past exposure, but changing a theme or PHP setting is not a substitute for patching
				WordPress. The vulnerable template handling still belongs in core, and the fixed release removes it there.
&lt;/p&gt; &lt;h2&gt;Probing began within hours, but probing is not a breach&lt;/h2&gt; &lt;p&gt;
Patchstack says it  &lt;a href=&quot;https://patchstack.com/articles/cve-2026-87902-attackers-started-probing-wordpress-sites-hours-after-the-patch/&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;first saw attempts at 17:44 UTC on 22nd September&lt;/a&gt;, less than five hours after WordPress 7.1.2 was published.
				The requests matched the encoding addressed by the patch and were sent across several protected sites, which is
				consistent with somebody building a list of vulnerable hosts.
&lt;/p&gt; &lt;p&gt;
At the time of publication, every target in those requests was an ordinary WordPress core file. The activity was
				testing whether the inclusion worked, not delivering attacker-controlled PHP. That does not make the scanning
				harmless, but it does mean a matching request in an access log is not enough on its own to declare the site
				compromised.
&lt;/p&gt; &lt;p&gt;
The timing still matters. Once a security patch is public, the changed code helps attackers understand what was
				fixed. Here, the gap between release and scanning was measured in hours. Updating before a working attack chain
				becomes widely automated is much easier than proving what happened afterwards.
&lt;/p&gt; &lt;h2&gt;Install the right WordPress security release&lt;/h2&gt; &lt;p&gt;
WordPress 7.1.2 was the first fixed release on the 7.1 branch. The original backports included 7.0.6, 6.9.9, 6.8.10, 6.7.9, 6.6.9 and 6.5.12, continuing down to 4.7.37. These numbers identify the fix for this flaw, not the latest available releases. The &lt;a href=&quot;https://wordpress.org/news/2026/10/wordpress-7-1-3-maintenance-and-security-release/&quot; rel=&quot;noopener noreferrer&quot;&gt;WordPress 7.1.3 security release&lt;/a&gt; arrived on 6th October with additional security fixes, so install the newest available release rather than stopping at this article&amp;apos;s original patch level.
&lt;/p&gt; &lt;p&gt;
Those backports make a rapid security update possible without combining it with a major-version migration.
				They are not a promise of long-term support. WordPress only actively supports its latest release, so a site kept
				on an old branch still needs a separate plan to move forward once the immediate risk is closed.
&lt;/p&gt; &lt;p&gt;
Take a current backup, then open &lt;strong&gt;Dashboard &amp;gt; Updates&lt;/strong&gt; and install the newest release offered for
				the site. Confirm the version after WordPress finishes, clear any full-page or edge cache, and check a few important
				pages, forms, account screens, and checkout steps. If automatic background updates are enabled, verify that the
				update completed rather than assuming it did.
&lt;/p&gt; &lt;h2&gt;What to check after the update&lt;/h2&gt; &lt;p&gt;
Start with access logs for the period before the site was patched. Patchstack highlights requests where
&lt;code&gt;pagename&lt;/code&gt; contains double-encoded traversal text such as &lt;code&gt;%252e%252e&lt;/code&gt;, especially when
&lt;code&gt;pagename&lt;/code&gt; and &lt;code&gt;page_id&lt;/code&gt; appear together on the home page or &lt;code&gt;index.php&lt;/code&gt;. Similar
				requests can arrive through either GET or POST, so checking only the query string may miss part of the picture.
&lt;/p&gt; &lt;p&gt;
A request in the log shows that somebody knocked on the door. The response tells you more. Unexpected OPML or
				other core-file output returned from a normal page URL suggests the inclusion succeeded on that host. If you find
				that response, treat the site as having had a confirmed vulnerable window and widen the review.
&lt;/p&gt; &lt;p&gt;A practical review should cover:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;unexpected or recently modified PHP files across WordPress, not only inside the active theme&lt;/li&gt; &lt;li&gt;core files that no longer match the clean files from the installed WordPress release&lt;/li&gt; &lt;li&gt;administrator accounts, plugins, themes, and must-use plugins nobody recognises&lt;/li&gt; &lt;li&gt;scheduled tasks, configuration changes, and new files created during the vulnerable period&lt;/li&gt; &lt;li&gt;server and security logs for what happened after a successful probe&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;
Preserve suspicious files and useful logs before cleaning anything. If compromise is confirmed, remove the
				malicious code, close every persistence route you find, and then rotate affected credentials. Deleting the first
				odd file without understanding what created it can hide evidence while leaving the attacker another way back.
&lt;/p&gt; &lt;h2&gt;Patch quickly, then follow the evidence&lt;/h2&gt; &lt;p&gt;
CVE-2026-87902 has the ingredients that make a core vulnerability uncomfortable: no login is required, the
				potential impact is high, and probing started on release day. It also has clear preconditions, a complete set of
				security releases, and no confirmed payload delivery in the activity reported so far. Both sides of that picture
				matter.
&lt;/p&gt; &lt;p&gt;
Update first. Then check the theme and server conditions, look at the requests and responses your own site handled,
				and investigate more deeply where the evidence justifies it. That is a calmer response than assuming the worst,
				and a safer one than deciding the conditions sound too specific to worry about.
&lt;/p&gt; &lt;p&gt;
BugShield maintenance plans include monitored plugin, theme, and core updates through our  &lt;a href=&quot;https://bugshield.co.uk/wordpress-plugin-update-service&quot;&gt;managed WordPress update service&lt;/a&gt;. If logs show a successful probe,
				or the site already contains files and users you do not recognise, our  &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt;WordPress malware removal service&lt;/a&gt; can investigate the files, database,
				users, scheduled tasks, and likely entry point.
&lt;/p&gt; &lt;p&gt;
For a single site, you can also &lt;a href=&quot;https://bugshield.co.uk/one-off&quot;&gt;request a one-off WordPress fix&lt;/a&gt;. Whichever route you choose,
				the useful finish line is not simply seeing an update notice disappear. It is knowing the fixed release is installed
				and that the site&amp;apos;s own evidence has been checked in proportion to its exposure.
&lt;/p&gt;   &lt;h2&gt; Quick answers about WordPress CVE-2026-87902 &lt;/h2&gt;    &lt;h3&gt; Which WordPress versions are affected by CVE-2026-87902?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;The advisory covers unpatched WordPress releases from 4.7.0 through 7.1.1. WordPress 7.1.2 was the first fix on the 7.1 branch, with backports through 4.7. Install the latest available release because later versions contain additional security fixes.&lt;/p&gt;  &lt;h3&gt; Can CVE-2026-87902 affect every outdated WordPress site?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;The known route to remote code execution needs both a theme with a top-level directory whose name begins with page- and a suitable readable local PHP file on the server. Sites should still update even when one of those conditions appears to be absent.&lt;/p&gt;  &lt;h3&gt; Does an attacker need to log in to exploit CVE-2026-87902?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;No. The vulnerable template-resolution request is unauthenticated and does not need an administrator to click anything. The theme and server preconditions determine whether it can progress to remote code execution.&lt;/p&gt;  &lt;h3&gt; Is CVE-2026-87902 being actively exploited?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Patchstack observed automated probing within five hours of the patch. At publication time, the requests tested local WordPress core files and did not deliver attacker-controlled code, so a probe is not proof that a site was compromised.&lt;/p&gt;  &lt;h3&gt; What should I check after updating WordPress?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Review access logs and responses from the vulnerable period, then check WordPress file integrity, unexpected PHP files, administrator accounts, plugins, themes, must-use plugins, scheduled tasks, and configuration changes. Widen the investigation if a probe returned unexpected core-file output.&lt;/p&gt;         &lt;p&gt;Originally published on &lt;a href=&quot;https://bugshield.co.uk/blog/wordpress-cve-2026-87902&quot;&gt;BugShield&lt;/a&gt;.&lt;/p&gt;</content:encoded><pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate><atom:updated>2026-10-09T00:00:00.000Z</atom:updated><category>Security</category></item><item><title>Self-healing WordPress malware came back after cleanup</title><link>https://bugshield.co.uk/blog/self-healing-wordpress-malware</link><guid isPermaLink="true">https://bugshield.co.uk/blog/self-healing-wordpress-malware</guid><description>We removed the malicious files, but they returned from a payload hidden in the database. Here is how the persistence worked and why cleanup order mattered.</description><content:encoded>&lt;p&gt;
We removed a &lt;strong&gt;self-healing WordPress malware&lt;/strong&gt; infection and watched the visible files disappear.
				By the next day, they were back. The cleanup had reached the symptoms, but the part rebuilding them was still
				hiding in the database and in code that WordPress loads before an ordinary plugin.
&lt;/p&gt;       Malware keeps returning?    
Deleting the file again will not help if another part of the infection can rebuild it. We can trace the
			persistence, clean the wider site, and check that it stays clean.
  &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt; Ask BugShield to investigate  &lt;/a&gt;    &lt;h2&gt;The site looked clean, until it did not&lt;/h2&gt; &lt;p&gt;
The first sign was difficult to miss. Some visitors were being shown a fake Cloudflare-style &lt;strong&gt;Verify
				you are human&lt;/strong&gt; screen instead of the page they expected. Clicking through led to instructions that
				tried to persuade them to paste a PowerShell command from their clipboard.
&lt;/p&gt; &lt;p&gt;
That trick is often called ClickFix. It turns a familiar verification step into a piece of social engineering:
				the visitor is told to run the attacker&amp;apos;s command themselves. Microsoft has documented the same broader
&lt;a href=&quot;https://www.microsoft.com/en-us/security/blog/2025/08/21/think-before-you-clickfix-analyzing-the-clickfix-social-engineering-technique/&quot; rel=&quot;noopener noreferrer&quot;&gt;ClickFix technique&lt;/a&gt;, including fake CAPTCHA and human-verification prompts that copy a command for the
				visitor to run.
&lt;/p&gt; &lt;p&gt;
We found and removed the files serving the overlay. The website returned to normal, so the result looked
				promising. Less than 24 hours later, the same malicious pieces had been written back to disk. That return was
				the useful clue. We were not dealing with one infected plugin file. We were looking at several parts of an
				infection keeping one another alive.
&lt;/p&gt; &lt;h2&gt;The files were only the visible part&lt;/h2&gt; &lt;p&gt;
Self-healing is a descriptive name here, not a special WordPress feature or a formal malware family. The code
				was not repairing itself in any clever biological sense. It simply had more than one place from which to
				restart, and every normal page request gave the surviving code another chance to run.
&lt;/p&gt; &lt;p&gt;Across the affected sites, the persistence sat in three connected layers:&lt;/p&gt;   &lt;table&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Layer&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;What we found&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Why a partial cleanup failed&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Database&lt;/th&gt; &lt;td&gt;Encoded payload data in &lt;code&gt;wp_options&lt;/code&gt;, stored under transient names resembling &lt;code&gt;_site_transient_health_*&lt;/code&gt;&lt;/td&gt; &lt;td&gt;The database still held enough data to rebuild deleted files&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Files&lt;/th&gt; &lt;td&gt;Fake plugins, must-use plugins, and copies placed in core-like or writable locations&lt;/td&gt; &lt;td&gt;Removing one copy left other loaders available&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Boot and scheduling&lt;/th&gt; &lt;td&gt;Restore code in &lt;code&gt;wp-config.php&lt;/code&gt; or &lt;code&gt;wp-content/object-cache.php&lt;/code&gt;, with unfamiliar scheduled hooks&lt;/td&gt; &lt;td&gt;A page load or cron run could write the malicious plugin back&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;   &lt;p&gt;
WordPress transients are normally harmless temporary data. Without a persistent object cache, they are commonly
				stored in the options table, as the
&lt;a href=&quot;https://developer.wordpress.org/apis/transients/&quot; rel=&quot;noopener noreferrer&quot;&gt;WordPress Transients API documentation&lt;/a&gt; explains. The attacker was using that ordinary storage mechanism
				as cover. The name looked like routine health or cache data, while the value carried something the surviving
				loader could use.
&lt;/p&gt; &lt;h2&gt;Why the infection returned on the next request&lt;/h2&gt; &lt;p&gt;
The order in which WordPress starts matters. Configuration and drop-in files can run before the normal plugins
				you see on the main Plugins screen. Must-use plugins are loaded automatically too. The
&lt;a href=&quot;https://developer.wordpress.org/advanced-administration/plugins/mu-plugins/&quot; rel=&quot;noopener noreferrer&quot;&gt;WordPress must-use plugin documentation&lt;/a&gt; notes that they live in &lt;code&gt;wp-content/mu-plugins&lt;/code&gt; by
				default and cannot be switched off like an ordinary plugin. They appear separately under
&lt;strong&gt;Plugins &amp;gt; Must-Use&lt;/strong&gt;.
&lt;/p&gt; &lt;p&gt;
In this infection, code in &lt;code&gt;wp-config.php&lt;/code&gt; or an unexpected &lt;code&gt;object-cache.php&lt;/code&gt; drop-in
				checked whether the malicious plugin files were present. When the cleanup removed those files but left the
				restore code and database payload behind, the next request put them back. Hourly cron hooks provided another
				way to restart the chain.
&lt;/p&gt; &lt;p&gt;
That is why the first cleanup appeared to work. The delivery files really had gone, and the bad overlay stopped
				showing for a while. The quieter persistence layer had not gone with them. A clean homepage proved only that
				the visible symptom was absent at that moment.
&lt;/p&gt; &lt;h2&gt;The traces we used to follow it&lt;/h2&gt; &lt;p&gt;
File names are clues, not a verdict. A host or caching plugin may legitimately install an
&lt;code&gt;object-cache.php&lt;/code&gt; drop-in, and a well-managed site may have genuine must-use plugins. We compared
				each item with known-good packages, the site&amp;apos;s normal configuration, file history, and the code itself before
				removing anything.
&lt;/p&gt; &lt;p&gt;The more distinctive traces in this incident included:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;code&gt;wp-own-assets.php&lt;/code&gt; and files matching &lt;code&gt;wp-feed-normalize-*.php&lt;/code&gt;, &lt;code&gt;wp-rest-cache-*.php&lt;/code&gt;, &lt;code&gt;wp-rest-hardening-*.php&lt;/code&gt;, or &lt;code&gt;wp-rest-optimizer-*.php&lt;/code&gt; under &lt;code&gt;wp-content/mu-plugins&lt;/code&gt;&lt;/li&gt; &lt;li&gt;plugin directories beginning &lt;code&gt;wp-cache-&lt;/code&gt;, &lt;code&gt;security-headers-manager-&lt;/code&gt;, or &lt;code&gt;site-performance-toolkit-&lt;/code&gt; that did not belong to installed software&lt;/li&gt; &lt;li&gt;files named like &lt;code&gt;class-walker_&amp;lt;hex&amp;gt;.php&lt;/code&gt; inside &lt;code&gt;wp-includes/assets&lt;/code&gt;, separate from genuine WordPress files&lt;/li&gt; &lt;li&gt;a hidden &lt;code&gt;.own-releases&lt;/code&gt; directory and files such as &lt;code&gt;own-stego.php&lt;/code&gt;, &lt;code&gt;own-stg.php&lt;/code&gt;, &lt;code&gt;qtt-own-core.php.obf&lt;/code&gt;, &lt;code&gt;pc_pack.py&lt;/code&gt;, or &lt;code&gt;_w10_up.php&lt;/code&gt;&lt;/li&gt; &lt;li&gt;code around &lt;code&gt;WP_Core_Integrity&lt;/code&gt; or functions named &lt;code&gt;_wp_cuh_restore&lt;/code&gt; and &lt;code&gt;_wp_cuh_sql&lt;/code&gt; inside &lt;code&gt;wp-config.php&lt;/code&gt;&lt;/li&gt; &lt;li&gt;&lt;code&gt;_site_transient_health_*&lt;/code&gt; option rows containing large encoded values, unknown cron hooks, and unfamiliar REST routes shaped like &lt;code&gt;check-&amp;lt;hex&amp;gt;&lt;/code&gt;&lt;/li&gt; &lt;li&gt;&lt;code&gt;# own-stego-v4&lt;/code&gt; or repeated &lt;code&gt;# BEGIN wp_compat_*&lt;/code&gt; blocks in &lt;code&gt;.htaccess&lt;/code&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;
A single matching word is not enough to condemn a file. Broad searches for functions such as
&lt;code&gt;base64_decode&lt;/code&gt; are useful for finding places to inspect, but legitimate software uses encoding too.
				The stronger evidence came from several traces agreeing with one another and from watching a surviving loader
				recreate a deleted component.
&lt;/p&gt; &lt;h2&gt;The cleanup order changed the outcome&lt;/h2&gt; &lt;p&gt;
Once we understood the loop, repeatedly deleting the same plugin was no longer useful. The site had to be
				contained first, then the parts capable of writing files had to be stopped before their output was removed.
				Working in that order prevented one layer from undoing the next step.
&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Contain the site and preserve evidence.&lt;/strong&gt; We restricted public access where possible and took private copies of the files, database, and relevant logs before changing them. An infected copy is evidence, not a backup to restore blindly.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Stop the restore path.&lt;/strong&gt; We removed the confirmed injection from &lt;code&gt;wp-config.php&lt;/code&gt; and dealt with the malicious drop-in before allowing ordinary page requests to keep running.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Remove every confirmed file component.&lt;/strong&gt; That included the fake must-use and normal plugins, hidden release copies, core-like files, altered rewrite rules, and any secondary locations found during the review.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Clean the database and scheduled hooks.&lt;/strong&gt; We removed only the confirmed malicious transient data and cron entries after preserving a database copy. Guessing at rows in &lt;code&gt;wp_options&lt;/code&gt; can break a site.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Restore trusted application code.&lt;/strong&gt; WordPress core, plugins, and themes were checked against clean packages or known source, with anything unverifiable reinstalled rather than trusted because its name looked familiar.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Review access and close the entrance.&lt;/strong&gt; We checked administrators, REST routes, other sites under the same hosting account, logs, and the vulnerable or stolen access that could have allowed the infection in.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Rotate secrets after the code was clean.&lt;/strong&gt; That covered every WordPress salt, administrator passwords, hosting and SFTP access, database credentials, and other exposed keys. Rotating too early can hand the replacement secrets to malware that is still running.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Watch the site start again.&lt;/strong&gt; We re-enabled access carefully, triggered normal page loads and cron, rescanned the files and database, and monitored for recreation rather than declaring success after one clean response.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;
If you cannot safely stop PHP execution, inspect configuration files, or distinguish a legitimate cache drop-in
				from the malicious one, ask your host or a WordPress security specialist to handle the containment. Removing
&lt;code&gt;object-cache.php&lt;/code&gt; on a guess can take a working cache offline without touching the real infection.
&lt;/p&gt; &lt;h2&gt;A returning file changes the question&lt;/h2&gt; &lt;p&gt;
When malware comes back, the useful question is no longer, “Where is that file?” It becomes, “What had the
				ability to write it again?” That shift leads naturally into the database, early-loading configuration, drop-ins,
				must-use plugins, scheduled events, and sometimes neighbouring sites that share the same hosting account.
&lt;/p&gt; &lt;p&gt;
It also changes what a scan result means. A scanner can correctly remove a malicious file and still leave the
				site compromised if its view stops at the filesystem. In the opposite direction, an unfamiliar transient or
				must-use plugin is not automatically malware. Automated findings need enough context to show how the pieces
				behave together.
&lt;/p&gt; &lt;p&gt;
For site owners, the simplest warning sign is repetition. If the same file returns, a disabled plugin silently
				reactivates, rewrite rules reappear, or a fake verification screen vanishes and then comes back, pause the cycle
				of deleting symptoms. Keep the evidence and investigate the mechanism doing the restoring.
&lt;/p&gt; &lt;h2&gt;Clean means it stays clean&lt;/h2&gt; &lt;p&gt;
The important part of this incident was not the strange file name or the fake verification screen. It was the
				gap between looking clean and being clean. The first pass removed what visitors could see. The successful pass
				removed the stored payload, the code that rebuilt it, the scheduled route back, and the access that could let
				the attacker begin again.
&lt;/p&gt; &lt;p&gt;
Our &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt;WordPress malware removal service&lt;/a&gt; covers the files, database,
				users, scheduled tasks, and likely entry point rather than stopping at the first alert. If you need help with
				one affected site, you can also &lt;a href=&quot;https://bugshield.co.uk/one-off&quot;&gt;request a one-off WordPress fix&lt;/a&gt;. Whichever route you
				choose, leave enough time after the cleanup to prove the site no longer rebuilds what was removed.
&lt;/p&gt;   &lt;h2&gt; Quick answers about self-healing WordPress malware &lt;/h2&gt;    &lt;h3&gt; Why does WordPress malware come back after its files are deleted?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Another part of the infection may still be able to recreate them. In the sites we examined, code loaded from WordPress configuration or an object-cache drop-in used payload data stored in the database, while scheduled hooks provided another way to restart the chain.&lt;/p&gt;  &lt;h3&gt; What is self-healing WordPress malware?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Self-healing is a practical description for malware with more than one persistence layer. A surviving database payload, loader, must-use plugin, drop-in, or scheduled task can restore another malicious component after it is removed.&lt;/p&gt;  &lt;h3&gt; Is every object-cache.php file malicious?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;No. WordPress caching plugins and hosting platforms can install a legitimate object-cache.php drop-in. Check who installed it, compare it with a trusted copy, and review what the code does before removing it.&lt;/p&gt;  &lt;h3&gt; Is deleting suspicious WordPress transients safe?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Not by name alone. Transients are a normal WordPress feature, and deleting the wrong options may disrupt the site. Preserve a database backup and remove a row only when its value and relationship to the infection have been confirmed.&lt;/p&gt;  &lt;h3&gt; How do I know a WordPress malware cleanup worked?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Recheck the files, database, users, scheduled events, and logs after normal page requests and cron have run. The site should remain clean over time, with the original access route closed and affected credentials rotated after the malicious code is gone.&lt;/p&gt;         &lt;p&gt;Originally published on &lt;a href=&quot;https://bugshield.co.uk/blog/self-healing-wordpress-malware&quot;&gt;BugShield&lt;/a&gt;.&lt;/p&gt;</content:encoded><pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate><atom:updated>2026-09-22T00:00:00.000Z</atom:updated><category>Security</category></item><item><title>Gravity Forms vulnerability puts hidden upload fields at risk</title><link>https://bugshield.co.uk/blog/gravity-forms-vulnerability-cve-2026-84434</link><guid isPermaLink="true">https://bugshield.co.uk/blog/gravity-forms-vulnerability-cve-2026-84434</guid><description>Gravity Forms 3.1.0.4 and earlier contain a critical unauthenticated file upload vulnerability. Learn who is exposed, how to update, and what to check.</description><content:encoded>&lt;p&gt;
A critical &lt;strong&gt;Gravity Forms vulnerability&lt;/strong&gt; can let somebody upload a dangerous file without
				logging in when a public form contains a hidden File Upload field. Versions up to and including 3.1.0.4
				are affected. Update to the latest release now, then check the site if that form setup was publicly available.
&lt;/p&gt;       Using Gravity Forms?    
Check the installed version and install the latest stable release available through your licence. Version 3.1.1
			was the first fix for this flaw. Updating cannot tell you whether an earlier attack succeeded.
  &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt; Get your site checked  &lt;/a&gt;    &lt;h2&gt;Gravity Forms vulnerability at a glance&lt;/h2&gt; &lt;p&gt;
The issue is tracked as &lt;strong&gt;CVE-2026-84434&lt;/strong&gt;. Wordfence, which assigned the CVE, gives it a
				CVSS score of 9.8 out of 10. That Critical rating reflects a difficult combination for site owners: an attacker
				does not need a WordPress account, does not need an administrator to click anything, and may be able to place
				executable code on the server.
&lt;/p&gt;   &lt;table&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Detail&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;What site owners need to know&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Affected versions&lt;/th&gt; &lt;td&gt;Gravity Forms 3.1.0.4 and earlier&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;First patched version&lt;/th&gt; &lt;td&gt;Gravity Forms 3.1.1&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Release at original publication&lt;/th&gt; &lt;td&gt;Gravity Forms 3.1.2 at the time of publication&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Severity&lt;/th&gt; &lt;td&gt;CVSS 9.8, Critical&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Login required&lt;/th&gt; &lt;td&gt;No&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Exploitation condition&lt;/th&gt; &lt;td&gt;A public form containing a File Upload field with Visibility set to Hidden&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;   &lt;h2&gt;Why a hidden upload field became dangerous&lt;/h2&gt; &lt;p&gt;
A File Upload field normally checks what a visitor is trying to send before Gravity Forms keeps it. If the
				file type is not allowed, the submission should stop there. The  &lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2026-84434&quot; rel=&quot;noopener noreferrer&quot;&gt;official CVE record&lt;/a&gt; describes a gap between that validation step and the part of the plugin that finally
				saves the upload.
&lt;/p&gt; &lt;p&gt;
When the upload field&amp;apos;s Visibility setting is Hidden, a rejected file can keep enough of its upload state to
				reach the saving process without being checked again. A visitor can therefore submit a file that the form was
				supposed to refuse. If the server will execute that file as code, the attacker may be able to take control of
				the website.
&lt;/p&gt; &lt;p&gt;
Hidden does not mean the field has disappeared from the form configuration. It means the field is not shown
				to an ordinary visitor. The server still receives the form submission, which is why hiding a field is never a
				replacement for checking what reaches the server.
&lt;/p&gt; &lt;h2&gt;Which Gravity Forms sites are exposed?&lt;/h2&gt; &lt;p&gt;
The plugin version matters, but it is not the whole picture. The disclosed route needs an affected version and
				a form that an unauthenticated visitor can reach. That form must also contain a File Upload field whose
				Visibility setting is Hidden.
&lt;/p&gt; &lt;p&gt;
A private form limited to logged-in users does not offer the same unauthenticated route. Nor does a form that
				has no hidden upload field. Even so, checking every old landing page before deciding not to update is the wrong
				trade-off. A forgotten form, shortcode, or embedded page is easy to miss, while installing the fixed version
				removes the known weakness from the plugin.
&lt;/p&gt; &lt;p&gt;
There is another reason not to wait.  &lt;a href=&quot;https://patchstack.com/database/wordpress/plugin/gravityforms/vulnerability/wordpress-gravity-forms-plugin-3-1-0-4-unauthenticated-arbitrary-file-upload-via-hidden-file-upload-field-vulnerability&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Patchstack marks the vulnerability as known to be exploited&lt;/a&gt;. That does not mean every exposed site has
				been attacked, but it does turn the update from routine housekeeping into work that should be handled now.
&lt;/p&gt; &lt;h2&gt;Update to Gravity Forms 3.1.1 or later&lt;/h2&gt; &lt;p&gt;Update checked on 9th October 2026: the &lt;a href=&quot;https://docs.gravityforms.com/gravityforms-change-log/&quot; rel=&quot;noopener noreferrer&quot;&gt;vendor changelog&lt;/a&gt; lists 3.1.3, released on 1st October with further security enhancements, followed by 3.1.3.1. Use the latest stable package available through your licence. The 3.1.1 minimum below describes this particular vulnerability.&lt;/p&gt; &lt;p&gt;
Gravity Forms 3.1.1 is the first patched release. The vendor&amp;apos;s  &lt;a href=&quot;https://docs.gravityforms.com/gravityforms-change-log/&quot; rel=&quot;noopener noreferrer&quot;&gt;official changelog&lt;/a&gt; lists security enhancements in 3.1.1, followed by another security-enhancement release,
				3.1.2, on 17th September. At the time this article was published, 3.1.2 was the current version, so there is
				little reason to stop at the minimum fixed release.
&lt;/p&gt; &lt;p&gt;
Open &lt;strong&gt;Plugins &amp;gt; Installed Plugins&lt;/strong&gt;, find Gravity Forms, and note the version before making a
				change. Take a current backup, install the latest update available through your Gravity Forms licence, and
				check the version again when WordPress says the update has finished. Then submit a test entry through each
				important form, especially forms that accept files or feed a payment, CRM, email, or automation service.
&lt;/p&gt; &lt;p&gt;
Gravity Forms describes version 3 as a major release and recommends sandbox testing when moving from version 2.
				If a site is still on the older branch, use a staging copy to catch compatibility problems, but do not let that
				turn into an open-ended delay. Ask the plugin vendor, your host, or a WordPress developer to help plan the move.
&lt;/p&gt; &lt;h2&gt;What to do if you cannot update immediately&lt;/h2&gt; &lt;p&gt;
The update is the proper fix. If it genuinely cannot happen today, reduce the exposed surface while somebody
				resolves the blocker. Take public forms containing hidden File Upload fields offline, or remove those fields
				from the published form. Restricting the whole page to authenticated users can also close the unauthenticated
				route described in the advisory.
&lt;/p&gt; &lt;p&gt;
A web application firewall may block a known malicious request, and Patchstack says it has issued a mitigation
				rule. Treat that as a temporary layer rather than evidence that the vulnerable code can remain. Rules differ
				between providers, plans, and configurations, while an installed update is much simpler to verify.
&lt;/p&gt; &lt;h2&gt;Updating closes the flaw, but it does not rewind the site&lt;/h2&gt; &lt;p&gt;
Once the update is installed, new attempts through this route should fail. What the update cannot do is remove
				a file that arrived beforehand. That distinction matters because the vulnerability may lead to remote code
				execution, giving an attacker room to add a backdoor somewhere else and return later.
&lt;/p&gt; &lt;p&gt;
The  &lt;a href=&quot;https://docs.gravityforms.com/file-upload-security/&quot; rel=&quot;noopener noreferrer&quot;&gt;Gravity Forms file-upload documentation&lt;/a&gt; explains that uploads normally sit beneath a dedicated
&lt;code&gt;wp-content/uploads/gravity_forms/&lt;/code&gt; area. It also describes an Apache configuration file intended
				to stop PHP running there. That is useful defence in depth, but server setups vary, upload paths can be changed,
				and the CVE still carries a Critical rating. It should not be used as a reason to skip the update or review.
&lt;/p&gt; &lt;p&gt;If an affected version and the required form setup were public, the review should include:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;unexpected executable files in Gravity Forms upload storage&lt;/li&gt; &lt;li&gt;recently added or changed PHP files elsewhere under &lt;code&gt;wp-content&lt;/code&gt;&lt;/li&gt; &lt;li&gt;administrator accounts, plugins, themes, and must-use plugins nobody recognises&lt;/li&gt; &lt;li&gt;server access logs around unusual form submissions and direct requests to uploaded files&lt;/li&gt; &lt;li&gt;scheduled tasks, WordPress configuration, and credentials if compromise is confirmed&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;
Do not delete the first unfamiliar file and assume the job is finished. Preserve enough evidence to understand
				when it appeared and what it did, then check the wider site. If you are not comfortable doing that yourself,
				ask your host or a security specialist to review it before logs rotate and useful evidence disappears.
&lt;/p&gt; &lt;h2&gt;A sensible response without the panic&lt;/h2&gt; &lt;p&gt;
CVE-2026-84434 deserves a prompt response, but a vulnerable version is not proof of a hacked website. Start
				with what you can establish: the installed version, whether a public form had a hidden upload field, and how
				long that combination was online. Update first, test the forms, and use that exposure to decide how urgently
				the site needs a deeper review.
&lt;/p&gt; &lt;p&gt;
BugShield can handle the update and form checks through our  &lt;a href=&quot;https://bugshield.co.uk/wordpress-plugin-update-service&quot;&gt;managed WordPress plugin updates&lt;/a&gt;. If the affected configuration
				was public, or the site already contains files and users you do not recognise, our  &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt;WordPress malware removal service&lt;/a&gt; can investigate the files, database,
				users, and likely route into the site.
&lt;/p&gt; &lt;p&gt;
For a one-off job, &lt;a href=&quot;https://bugshield.co.uk/one-off&quot;&gt;request a WordPress fix&lt;/a&gt;. The important part is not whether you use
				BugShield or handle it with your existing developer. It is making sure Gravity Forms is genuinely beyond
				3.1.0.4 and that an exposed site is not declared clean simply because the update button has been pressed.
&lt;/p&gt;   &lt;h2&gt; Quick answers about the Gravity Forms vulnerability &lt;/h2&gt;    &lt;h3&gt; Which Gravity Forms versions are affected by CVE-2026-84434?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Gravity Forms 3.1.0.4 and every earlier version are affected. Version 3.1.1 is the first patched release, and site owners should install the latest release available through their Gravity Forms licence.&lt;/p&gt;  &lt;h3&gt; Is every website using an affected Gravity Forms version exposed?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;The disclosed unauthenticated route also needs a publicly accessible form containing a File Upload field with Visibility set to Hidden. Sites without that setup are not exposed through this specific path, but should still update.&lt;/p&gt;  &lt;h3&gt; Does an attacker need a WordPress account?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;No. The vulnerability is unauthenticated, so an attacker does not need a subscriber, editor, or administrator login to target a suitable public form.&lt;/p&gt;  &lt;h3&gt; Is updating Gravity Forms enough after possible exploitation?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Updating closes the vulnerable upload route, but it cannot remove a malicious file or backdoor that may already be present. If the affected form setup was public, review the wider site after updating.&lt;/p&gt;  &lt;h3&gt; What should I check after updating Gravity Forms?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Check Gravity Forms upload storage and the wider wp-content directory for unexpected executable files, then review server logs, administrator accounts, plugins, themes, must-use plugins, and scheduled tasks for changes nobody recognises.&lt;/p&gt;         &lt;p&gt;Originally published on &lt;a href=&quot;https://bugshield.co.uk/blog/gravity-forms-vulnerability-cve-2026-84434&quot;&gt;BugShield&lt;/a&gt;.&lt;/p&gt;</content:encoded><pubDate>Sun, 20 Sep 2026 00:00:00 GMT</pubDate><atom:updated>2026-10-09T00:00:00.000Z</atom:updated><category>Security</category></item><item><title>Undetected WordPress malware, caught on day one</title><link>https://bugshield.co.uk/blog/undetected-wordpress-malware</link><guid isPermaLink="true">https://bugshield.co.uk/blog/undetected-wordpress-malware</guid><description>A customer thought their WordPress site was fine. Their first BugShield checks uncovered malware that had been sitting on the server for months.</description><content:encoded>&lt;p&gt;
Most WordPress malware stories begin when something goes visibly wrong. Our latest one began with a customer who
				thought their website was fine. They had only just connected it to BugShield when our first checks raised a
				possible infection. A closer look confirmed it was &lt;strong&gt;undetected WordPress malware&lt;/strong&gt; that had been
				sitting on their server for months.
&lt;/p&gt;   &lt;h2&gt;The alert that changed the picture&lt;/h2&gt; &lt;p&gt;
There was no broken homepage or dramatic warning from a browser. The customer had been using their site
				without knowing anything was wrong, which is why the first result inside BugShield mattered so much. It
				did not say the site was definitely infected. It said there was a possible infection that needed attention.
&lt;/p&gt; &lt;p&gt;
The cautious wording is deliberate. WordPress sites contain thousands of files, and not every unfamiliar
				one is malicious. Developers add custom code, plugins generate files of their own, and old installations
				can accumulate all sorts of forgotten leftovers. A scanner can tell us where to look, but it takes an
				investigation to understand what has actually been found.
&lt;/p&gt; &lt;p&gt;
In this case, the warning held up. We reviewed the suspicious files in context, looked at what the code was
				doing, and confirmed malware. The more unsettling discovery came next: the infection was not recent. It had
				been on the server for months, sitting quietly behind a website that still looked normal.
&lt;/p&gt; &lt;p&gt;
We are keeping the customer, the website, and the precise file locations private. The useful part of this
				story is not who they are. It is how long a compromised site can continue to look perfectly ordinary.
&lt;/p&gt; &lt;h2&gt;A working website is not necessarily a clean website&lt;/h2&gt; &lt;p&gt;
When people imagine a hacked WordPress site, they usually imagine something they would notice straight away.
				Perhaps the homepage has been replaced, visitors are being redirected, or Google is showing a security
				warning. Visible symptoms do happen, but they are only the noisy end of the problem.
&lt;/p&gt; &lt;p&gt;
Malware can be much quieter. It might preserve a hidden way back into the server, wait for instructions, or
				only act when a particular visitor or search engine arrives. Some infections appear intermittently. Others
				hide inside familiar plugin or upload folders where one unusual file is easy to miss among thousands of
				legitimate ones.
&lt;/p&gt; &lt;p&gt;
From the customer&amp;apos;s point of view, the site still loaded and the usual work could continue, so it felt
				healthy. In reality, a successful page load only tells you that one page worked for one visit. It says very
				little about the rest of the server, the database, administrator accounts, scheduled tasks, or hidden access
				an attacker may have left behind.
&lt;/p&gt; &lt;h2&gt;The scan found the clue. The investigation found the answer.&lt;/h2&gt; &lt;p&gt;
It would have been easy to treat the first alert as proof and rush straight to the word hacked. Calling the
				site hacked immediately might make a stronger notification, but it would not make a more accurate one. Security
				checks are most useful when they narrow the search without pretending to know more than the evidence shows.
&lt;/p&gt; &lt;p&gt;
The real work begins after the alert. A suspicious file needs to be compared with the software that should be
				there. Its location, contents, history, and behaviour all matter, along with everything around it. An infection
				may also involve unfamiliar administrators, altered database records, must-use plugins, scheduled jobs, or
				other files that were never included in the first warning.
&lt;/p&gt; &lt;p&gt;
Only after completing the review could we say the finding was genuine. The automated check created
				the opportunity to catch it; human judgement turned that signal into a confirmed problem we could act on
				for the customer. Neither part is very useful on its own.
&lt;/p&gt; &lt;h2&gt;Months of infection change what you can trust&lt;/h2&gt; &lt;p&gt;
Finding malware is bad enough. Learning that it has been present for months makes the response more involved,
				because the clean point you would normally return to may be much further back than expected.
&lt;/p&gt; &lt;p&gt;
Take backups. Restoring yesterday&amp;apos;s copy feels like a sensible first move until you realise yesterday&amp;apos;s copy
				probably contains the same infection. The same may be true of last week&amp;apos;s and last month&amp;apos;s. A backup is still
				valuable, but its date alone does not make it safe. It has to come from a point before the compromise, or be
				cleaned and checked before it goes back into service.
&lt;/p&gt; &lt;p&gt;
The trail also gets colder with time. Hosting logs are not always kept for months, and the change that first
				let an attacker in may now be buried beneath later updates. Even if the original weakness has since been
				patched, any backdoor planted before the patch can remain. Updating closes a known entrance; it does not
				automatically remove someone who is already inside.
&lt;/p&gt; &lt;p&gt;
Then there are credentials. If the incident reached beyond WordPress itself, changing a single administrator
				password is not enough. Hosting, SFTP, SSH, database, and other privileged access may all need to be reviewed.
				Credential changes should happen in a sensible order, after the routes into the site have been understood, so fresh
				credentials are not handed straight back to the same attacker.
&lt;/p&gt; &lt;h2&gt;Why deleting the flagged file is rarely the end&lt;/h2&gt; &lt;p&gt;
A malware alert naturally draws attention to the file named in the warning. Delete that file and the visible
				problem disappears from the scanner, but that does not tell you whether another copy exists or whether the
				attacker still has a way to recreate it.
&lt;/p&gt; &lt;p&gt;
A proper cleanup follows the infection through the site. It checks WordPress core, plugins, themes, uploads,
				must-use plugins, the database, administrator users, scheduled jobs, and server configuration. It also asks
				how the code arrived, closes that route where it can be established, and verifies the result before a fresh
				backup is treated as the new clean starting point.
&lt;/p&gt; &lt;p&gt;
Taking time over the cleanup helps prevent the familiar cycle where a site appears clean
				for a few days and the malware quietly returns.
&lt;/p&gt; &lt;h2&gt;If a malware warning appears on your site&lt;/h2&gt; &lt;p&gt;
The best response is calm and methodical. Do not ignore the warning because the website still works, but do
				not start removing unfamiliar files at random either. Both reactions can make the eventual investigation
				harder.
&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;strong&gt;Preserve a private copy of the current site.&lt;/strong&gt; Keep the files and database for investigation,
					while remembering that this is evidence and not a clean recovery point.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Have the warning reviewed in context.&lt;/strong&gt; Confirm what the file is, what it does, and whether
					anything related has changed elsewhere in WordPress or on the server.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Trace and close the likely access route.&lt;/strong&gt; Update or remove vulnerable software and review every
					privileged route into the hosting account and website.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Rotate the credentials that may have been exposed.&lt;/strong&gt; Make the changes from a device and account
					you trust, once the environment is ready to protect the new details.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Verify the clean state.&lt;/strong&gt; Rescan, compare files with trusted copies, test the important parts of
					the site, and only then create a fresh off-site backup.
&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;
Our &lt;a href=&quot;https://bugshield.co.uk/how-to/remove-wordpress-malware-manually&quot;&gt;manual WordPress malware guide&lt;/a&gt; goes further into
				the technical checks. If you would rather have a developer handle the investigation and cleanup, see
&lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt;WordPress malware removal&lt;/a&gt;.
&lt;/p&gt; &lt;h2&gt;What stays with us from this case&lt;/h2&gt; &lt;p&gt;
The timing is the part that stays with us. BugShield did not spend weeks watching the site before stumbling
				onto the problem. The warning appeared during the first checks, but the malware had already been there for
				months before the customer connected the site. Everything looked normal, so nobody knew there was anything to investigate.
&lt;/p&gt; &lt;p&gt;
Starting with a proper baseline matters. When monitoring begins, the first job is not simply to watch what changes
				tomorrow. It is to understand what is already there today. Otherwise, an old compromise can quietly become
				the starting point everyone assumes is safe.
&lt;/p&gt; &lt;p&gt;
Nobody wants to learn that their website has been infected. Finding out before the homepage breaks, visitors
				are redirected, or a search engine raises the alarm is still the better moment to discover it. A website does
				not need to look hacked to be hacked, but it also does not need to stay that way simply because the warning
				signs were quiet.
&lt;/p&gt;       Do not wait for visible damage    
Shield Pro includes daily malware scans, ongoing monitoring, off-site backups, and malware investigation
			and cleanup when a confirmed infection needs attention.
  &lt;a href=&quot;https://bugshield.co.uk/shield-pro&quot;&gt; See Shield Pro protection  &lt;/a&gt;    &lt;h2&gt; Quick answers about undetected WordPress malware &lt;/h2&gt;    &lt;h3&gt; Can a WordPress site have malware and still work normally?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Yes. Some malware is designed to stay quiet, preserve hidden access, or affect only certain visitors. The homepage can keep loading while malicious code remains elsewhere in the files, database, user accounts, or scheduled tasks.&lt;/p&gt;  &lt;h3&gt; Why did the first alert say possible infection?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;A scanner can identify an unusual file or pattern, but it cannot always understand the reason it is there. Calling the result possible gives a person time to review the file, its behaviour, and the surrounding site before confirming whether it is malware.&lt;/p&gt;  &lt;h3&gt; Can WordPress malware stay undetected for months?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;It can. Malware that does not break the website or appear for every visitor may sit outside the owner&amp;apos;s normal view for a long time. Regular checks create an opportunity to find it before a visible symptom brings the problem to everyone&amp;apos;s attention.&lt;/p&gt;  &lt;h3&gt; Will deleting the flagged file remove the infection?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Not necessarily. The first file may be one part of a wider compromise, and another backdoor may recreate it. The investigation should cover the wider files, database, users, scheduled tasks, credentials, and the route the attacker may have used.&lt;/p&gt;  &lt;h3&gt; What should I do after a WordPress malware warning?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Keep a private copy for investigation and have the warning reviewed before deleting unfamiliar files. If malware is confirmed, clean the whole site, close the access route, rotate affected credentials, verify the result, and then create a fresh off-site backup.&lt;/p&gt;         &lt;p&gt;Originally published on &lt;a href=&quot;https://bugshield.co.uk/blog/undetected-wordpress-malware&quot;&gt;BugShield&lt;/a&gt;.&lt;/p&gt;</content:encoded><pubDate>Fri, 11 Sep 2026 00:00:00 GMT</pubDate><atom:updated>2026-09-11T00:00:00.000Z</atom:updated><category>Security</category></item><item><title>Elementor Pro 4.2.1 vulnerability: active attacks target file uploads</title><link>https://bugshield.co.uk/blog/elementor-pro-4-2-1-vulnerability</link><guid isPermaLink="true">https://bugshield.co.uk/blog/elementor-pro-4-2-1-vulnerability</guid><description>Elementor Pro 4.2.1 and earlier contain a critical file upload vulnerability under active attack. See who is exposed, what to check, and why you should update to 4.2.2.</description><content:encoded>&lt;p&gt; &lt;strong&gt;Elementor Pro 4.2.1&lt;/strong&gt; and every earlier version contain a critical file upload vulnerability
				that attackers are actively exploiting. If your site uses Elementor Pro, check the version now and update
				to 4.2.2 or a newer patched release. If an affected version was online after 19th August, check the site as
				well as updating it.
&lt;/p&gt;       Still using Elementor Pro 4.2.1?    
Update to Elementor Pro 4.2.2 or a newer patched version first. If the site was exposed or anything looks
			unfamiliar, a security review can check whether somebody uploaded code before the update.
  &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt; Get your site checked  &lt;/a&gt;    &lt;h2&gt;Elementor Pro 4.2.1 vulnerability at a glance&lt;/h2&gt; &lt;p&gt;
This is not a routine low-risk plugin warning. The vulnerability is tracked as  &lt;a href=&quot;https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/elementor-pro/elementor-pro-421-unauthenticated-arbitrary-file-upload-via-upload-field-array-validation-bypass&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;&lt;strong&gt;CVE-2026-32475&lt;/strong&gt;&lt;/a&gt; and carries a CVSS score of 9.8 out of 10, which puts it in the Critical
				category. The fixed release is Elementor Pro 4.2.2.
&lt;/p&gt;   &lt;table&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Detail&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;What site owners need to know&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Affected versions&lt;/th&gt; &lt;td&gt;Elementor Pro 4.2.1 and earlier&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Patched version&lt;/th&gt; &lt;td&gt;Elementor Pro 4.2.2 or newer&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Vulnerability&lt;/th&gt; &lt;td&gt;CVE-2026-32475, arbitrary file upload&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Severity&lt;/th&gt; &lt;td&gt;CVSS 9.8, Critical&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Login required&lt;/th&gt; &lt;td&gt;No WordPress account is required&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th scope=&quot;row&quot;&gt;Exploitation condition&lt;/th&gt; &lt;td&gt;A published Elementor Pro Form with at least one non-required File Upload field&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;   &lt;h2&gt;What happened with Elementor Pro 4.2.1&lt;/h2&gt; &lt;p&gt;
Wordfence disclosed the vulnerability on 19th August 2026. According to its  &lt;a href=&quot;https://www.wordfence.com/blog/2026/09/attackers-actively-exploiting-critical-vulnerability-in-elementor-pro-plugin/&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;attack report&lt;/a&gt;, attackers began targeting websites on the same day. By 2nd September, the Wordfence
				firewall had blocked more than 190,000 exploit attempts.
&lt;/p&gt; &lt;p&gt;
That number is not the same as 190,000 compromised sites. It counts blocked attempts, and one website can
				receive many attempts. It still tells us something important: this is being used in the wild, not sitting
				quietly in a vulnerability database waiting for somebody to notice it.
&lt;/p&gt; &lt;p&gt;
Elementor released version 4.2.2 with the fix on 19th August. The safest response is to install that release
				or a newer patched version, then consider whether the site needs a closer check based on the conditions below.
&lt;/p&gt; &lt;h2&gt;How the file upload flaw works in plain English&lt;/h2&gt; &lt;p&gt;
Elementor Pro includes a Form widget that can accept files from visitors. Normally, the plugin checks each
				upload and rejects file types that should not be placed on the server. A mistake in the validation loop means
				that a specially arranged upload can make those checks stop too early.
&lt;/p&gt; &lt;p&gt;
The attacker places an empty item first and a second file after it. When the File Upload field is optional,
				the empty item can cause validation to end before Elementor checks the remaining file. That second file may
				then be saved with a dangerous extension such as &lt;code&gt;.php&lt;/code&gt;.
&lt;/p&gt; &lt;p&gt;
A PHP file is code, not an ordinary image or document. If the attacker can request it from the web, they may
				be able to run commands on the server. Security teams call that remote code execution. For a WordPress owner,
				the practical meaning is simpler: somebody could take control of the site without first logging in.
&lt;/p&gt; &lt;h2&gt;Which Elementor Pro sites are exposed?&lt;/h2&gt; &lt;p&gt;The disclosed attack path needs these conditions to line up:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Elementor Pro 4.2.1 or an earlier version is active.&lt;/li&gt; &lt;li&gt;A public page contains an Elementor Pro Form widget.&lt;/li&gt; &lt;li&gt;The form has at least one File Upload field.&lt;/li&gt; &lt;li&gt;That File Upload field is not marked as required.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;
If your site does not have that form configuration, this specific exploitation route should not be available.
				That is useful context, but it is not a reason to leave Elementor Pro 4.2.1 installed. Forms change, old landing
				pages are easy to forget, and updating removes the known weakness rather than relying on a page audit staying
				perfect.
&lt;/p&gt; &lt;p&gt;
The vulnerability is unauthenticated. An attacker does not need a customer account, an editor login, or a
				stolen administrator password. They only need to reach a suitable public form on an affected site.
&lt;/p&gt; &lt;h2&gt;What to do if you have Elementor Pro 4.2.1&lt;/h2&gt; &lt;p&gt;Start with the update, then decide how far the review needs to go.&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;strong&gt;Check the installed version.&lt;/strong&gt; Open &lt;strong&gt;Plugins &amp;gt; Installed Plugins&lt;/strong&gt; and find
					Elementor Pro. If it shows 4.2.1 or anything earlier, treat it as affected.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Update to 4.2.2 or newer.&lt;/strong&gt; Confirm the new version number after WordPress reports that the
					update has finished.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Test the site and its forms.&lt;/strong&gt; Check the front end, send a test submission, and confirm any
					legitimate uploads still arrive where expected.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Review the exposure window.&lt;/strong&gt; If an affected version was online from 19th August onwards and
					the site had a suitable upload form, arrange a security check rather than assuming the update tells you what
					happened before it was installed.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Remove Elementor Pro if it is no longer needed.&lt;/strong&gt; An unused premium plugin should not remain
					forgotten on the server. Keep it updated if you need it, or remove it properly if you do not.
&lt;/li&gt; &lt;/ol&gt; &lt;h2&gt;Signs that the Elementor Pro vulnerability was exploited&lt;/h2&gt; &lt;p&gt;
Wordfence says a successful attack writes an executable PHP file beneath  &lt;code&gt;/wp-content/uploads/elementor/forms/&lt;/code&gt;. That folder is intended for form uploads and should not
				contain PHP. Any &lt;code&gt;.php&lt;/code&gt; file there is a strong warning sign and deserves investigation.
&lt;/p&gt; &lt;p&gt;
Your hosting provider can also review web server access logs for suspicious requests to  &lt;code&gt;/wp-admin/admin-ajax.php&lt;/code&gt; involving the Elementor Pro form submission action. Logs are useful,
				but the absence of a matching entry does not prove the site is clean. Logs may have expired, been rotated, or
				not captured enough detail.
&lt;/p&gt; &lt;p&gt;Because successful exploitation can lead to full site control, the review should also cover:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;administrator accounts that nobody on your team created&lt;/li&gt; &lt;li&gt;new or modified plugins, themes, and must-use plugins&lt;/li&gt; &lt;li&gt;unexpected scheduled tasks or changes to WordPress configuration&lt;/li&gt; &lt;li&gt;other recently changed PHP files outside the normal update window&lt;/li&gt; &lt;li&gt;hosting, database, SFTP, and administrator credentials if compromise is confirmed&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;
Do not rely on the WordPress Users screen alone. A backdoor can exist without a visible administrator account.
				If you find an unfamiliar file, preserve enough information for somebody to investigate it before deleting
				everything around it.
&lt;/p&gt; &lt;h2&gt;Is a firewall enough protection?&lt;/h2&gt; &lt;p&gt;
A web application firewall can block a malicious upload before it reaches the plugin. Wordfence reports that
				its built-in Malicious File Upload protection blocks attempts against this vulnerability. It also recommends
				enabling its option that prevents code execution from the uploads directory.
&lt;/p&gt; &lt;p&gt;
That is useful protection, but it is not a replacement for the Elementor update. Firewall rules can be disabled,
				misconfigured, or absent from a different site. Updating to Elementor Pro 4.2.2 or later fixes the vulnerable
				code itself and gives you a much simpler state to verify.
&lt;/p&gt; &lt;h2&gt;How BugShield can help after the Elementor Pro 4.2.1 warning&lt;/h2&gt; &lt;p&gt;
Fast security updates are easier when somebody owns the routine. BugShield maintenance plans combine  &lt;a href=&quot;https://bugshield.co.uk/wordpress-plugin-update-service&quot;&gt;managed plugin updates&lt;/a&gt; with  &lt;a href=&quot;https://bugshield.co.uk/monitoring&quot;&gt;WordPress monitoring&lt;/a&gt;, &lt;a href=&quot;https://bugshield.co.uk/backups&quot;&gt;off-site backups&lt;/a&gt;, and a secure
				record of the work completed on each site.
&lt;/p&gt; &lt;p&gt;
If you only need Elementor Pro updated and tested, you can  &lt;a href=&quot;https://bugshield.co.uk/one-off&quot;&gt;request a one-off fix&lt;/a&gt;. If there are suspicious PHP files, unknown administrators,
				or other signs of access, choose &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt;WordPress malware removal&lt;/a&gt; so the
				review covers the wider site rather than stopping at the plugin version.
&lt;/p&gt; &lt;p&gt;
For most site owners, the immediate job is short: move beyond Elementor Pro 4.2.1, confirm the update, and
				check whether the affected form setup was publicly available while attacks were active.
&lt;/p&gt;   &lt;h2&gt; Quick answers about the Elementor Pro 4.2.1 vulnerability &lt;/h2&gt;    &lt;h3&gt; Which Elementor Pro versions are affected by CVE-2026-32475?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Elementor Pro 4.2.1 and every earlier version are affected. Version 4.2.2 contains the security fix, so install 4.2.2 or any newer patched release available through your Elementor account.&lt;/p&gt;  &lt;h3&gt; Does an attacker need a WordPress account?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;No. The vulnerability is unauthenticated, which means an attacker does not need a customer, editor, or administrator login to target a suitable public Elementor Pro form.&lt;/p&gt;  &lt;h3&gt; Is every website using Elementor Pro 4.2.1 exposed to the reported attack?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;The disclosed attack also requires a published page containing an Elementor Pro Form widget with at least one non-required File Upload field. Sites without that form setup are not exposed through this specific path, but should still update.&lt;/p&gt;  &lt;h3&gt; Is updating Elementor Pro enough after possible exploitation?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Updating closes the vulnerable upload path, but it does not remove a PHP file or backdoor that may already be present. If an affected form was public while attacks were active, review the site as well as installing the update.&lt;/p&gt;  &lt;h3&gt; What should I check after updating Elementor Pro?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Check wp-content/uploads/elementor/forms for unexpected PHP files, review server logs and unfamiliar administrator accounts, and look for plugin, theme, or configuration changes nobody on your team made.&lt;/p&gt;         &lt;p&gt;Originally published on &lt;a href=&quot;https://bugshield.co.uk/blog/elementor-pro-4-2-1-vulnerability&quot;&gt;BugShield&lt;/a&gt;.&lt;/p&gt;</content:encoded><pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate><atom:updated>2026-09-03T00:00:00.000Z</atom:updated><category>Security</category></item><item><title>All-in-One WP Migration vulnerability: update to version 7.110</title><link>https://bugshield.co.uk/blog/all-in-one-wp-migration-sql-injection</link><guid isPermaLink="true">https://bugshield.co.uk/blog/all-in-one-wp-migration-sql-injection</guid><description>All-in-One WP Migration 7.109 and earlier contain a serious SQL injection vulnerability. Learn how the issue works and what WordPress site owners should do.</description><content:encoded>&lt;p&gt;
A recently disclosed &lt;strong&gt;All-in-One WP Migration vulnerability&lt;/strong&gt; means sites using version 7.109
				or earlier should update. The issue does not take effect simply because the plugin is installed. It depends
				on an attacker placing harmful data on the site, followed by an administrator exporting and restoring it.
				Version 7.110 closes the weakness.
&lt;/p&gt;       Using All-in-One WP Migration?    
It is worth checking the installed version before your next migration or restore. Sites still using 7.109
			or earlier should be updated to version 7.110 or the latest release available.
  &lt;a href=&quot;https://bugshield.co.uk/wordpress-plugin-update-service&quot;&gt; See managed updates  &lt;/a&gt;    &lt;h2&gt;What has happened&lt;/h2&gt; &lt;p&gt;
All-in-One WP Migration and Backup is a familiar tool for moving and restoring WordPress sites, with more
				than five million active installations. On 1st September 2026,  &lt;a href=&quot;https://www.wordfence.com/blog/2026/09/5-million-wordpress-sites-affected-by-sql-injection-vulnerability-in-all-in-one-wp-migration-and-backup-wordpress-plugin/&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Wordfence published details&lt;/a&gt; of a security weakness that could put those sites at risk if a particular
				export and restore sequence takes place.
&lt;/p&gt; &lt;p&gt;
Researcher Jack Taylor reported the issue to Wordfence on 14th August. The plugin developer, ServMask, then
				released version 7.110 on 20th August. That update is the important part for site owners because it fixes the
				problem in every version up to and including 7.109.
&lt;/p&gt; &lt;p&gt;
The vulnerability is recorded as &lt;strong&gt;CVE-2026-19949&lt;/strong&gt; and has a High severity score of 8.8 out
				of 10. Those labels help security teams track the issue, but you do not need to understand them to respond.
				The &lt;a href=&quot;https://wordpress.org/plugins/all-in-one-wp-migration/&quot; rel=&quot;noopener noreferrer&quot;&gt;official WordPress.org plugin page&lt;/a&gt; confirms the change in version 7.110 and credits Taylor for reporting
				it responsibly.
&lt;/p&gt; &lt;h2&gt;What SQL injection means in plain English&lt;/h2&gt; &lt;p&gt;
To understand why the update matters, it helps to know what the flaw does. WordPress keeps posts, settings,
				users and other important information in a database. SQL is simply the language used to read and change that
				database. With a SQL injection flaw, information that should remain ordinary text can instead be treated as
				a command.
&lt;/p&gt; &lt;p&gt;
In this case, that does not happen straight away. The attacker first sends harmful information through a
				trackback, an older WordPress feature that notifies a post about an incoming link. The information can remain
				stored on the site until an administrator exports it and later imports the archive with the vulnerable plugin.
				During that restore, the plugin can mistake the stored text for a database command and run it.
&lt;/p&gt; &lt;p&gt;
Security researchers call this a second-order SQL injection because the information is stored first and
				becomes dangerous during a later action. The useful point for site owners is the order in which it happens:
				the harmful information is planted first, then a later export and restore can set it off.
&lt;/p&gt; &lt;h2&gt;Why the restore step matters&lt;/h2&gt; &lt;p&gt;
That extra restore step changes how this warning should be understood. The vulnerability is unauthenticated,
				which means an attacker does not need a WordPress account to place the harmful information. Even so, simply
				having the plugin installed does not give somebody immediate control of the site.
&lt;/p&gt; &lt;p&gt;
The attack only moves to its next stage when an administrator exports the site and imports the resulting
				archive. Because those are normal actions for a migration plugin, the condition cannot be ignored, but it
				does help explain which sites may need a closer review.
&lt;/p&gt; &lt;p&gt;
If the full sequence succeeds, the attacker may obtain a private key used by the plugin and use it to make
				the server run code of their choosing. In practical terms, that could give them control of the WordPress site.
&lt;/p&gt; &lt;h2&gt;Who needs to update&lt;/h2&gt; &lt;p&gt;
Although the attack relies on that sequence of events, the update advice is straightforward. Any site with
				All-in-One WP Migration and Backup 7.109 or earlier should move to a fixed release, even if the plugin has not
				been used recently or there is no migration planned.
&lt;/p&gt; &lt;p&gt;
Open &lt;strong&gt;Plugins &amp;gt; Installed Plugins&lt;/strong&gt; in WordPress and find All-in-One WP Migration. The
				installed version appears with the plugin details. If it shows 7.109 or an earlier number, update it to
				7.110 or the latest version available.
&lt;/p&gt; &lt;p&gt;
A firewall may provide another layer of protection, but updating remains the more dependable response because
				it removes the known weakness from the plugin itself.
&lt;/p&gt; &lt;h2&gt;What site owners should do now&lt;/h2&gt; &lt;p&gt;
If version 7.110 or later is already active and the plugin was not used for a recent export and restore, there
				is unlikely to be anything more to do for this specific issue. Otherwise, work through these steps in order:
&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;strong&gt;Check the plugin version.&lt;/strong&gt; Look under &lt;strong&gt;Plugins &amp;gt; Installed Plugins&lt;/strong&gt; for
					All-in-One WP Migration and Backup.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Update to version 7.110 or later.&lt;/strong&gt; Confirm the new version number after the update finishes.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Update before exporting or restoring.&lt;/strong&gt; If you cannot update immediately, do not use an older
					version for another migration or restore.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Review any recent migration or restore.&lt;/strong&gt; If an administrator exported and imported the site
					while version 7.109 or earlier was active, a security review is sensible. This does not mean the site was
					attacked, only that the sequence needed for the vulnerability took place.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Remove unused copies.&lt;/strong&gt; If the site no longer needs the plugin, remove it instead of leaving
					an old version installed and forgotten.
&lt;/li&gt; &lt;/ol&gt; &lt;h2&gt;What to check after a recent restore&lt;/h2&gt; &lt;p&gt;
A recent restore with an affected version is a reason to check the site, not proof that it was compromised.
				The review becomes more worthwhile if public posts accepted trackbacks before the archive was created. Updating
				closes the vulnerable route, while the review checks whether anything happened before that update.
&lt;/p&gt; &lt;p&gt;That review should bring the main signs of unexpected access together:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;administrator accounts you do not recognise&lt;/li&gt; &lt;li&gt;plugins and must-use plugins that nobody on your team installed&lt;/li&gt; &lt;li&gt;unexpected file changes around the time of the restore&lt;/li&gt; &lt;li&gt;security and server logs showing unusual activity&lt;/li&gt; &lt;li&gt;hosting, WordPress and database credentials if there are signs of access&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;
If something unfamiliar appears, avoid deleting it until somebody has checked what it is. Removing the wrong
				file can break the site or make an investigation harder. A full &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt;WordPress
				malware review&lt;/a&gt; can check the files and database together.
&lt;/p&gt; &lt;h2&gt;How BugShield handles plugin security updates&lt;/h2&gt; &lt;p&gt;
Keeping plugins current is easier when it is part of the site&amp;apos;s regular care. On BugShield maintenance plans,
				a developer can review the release, apply it and check the site afterwards through our &lt;a href=&quot;https://bugshield.co.uk/wordpress-plugin-update-service&quot;&gt;managed
				plugin updates&lt;/a&gt;. This works alongside &lt;a href=&quot;https://bugshield.co.uk/monitoring&quot;&gt;site monitoring&lt;/a&gt; and &lt;a href=&quot;https://bugshield.co.uk/backups&quot;&gt;off-site
				cloud backups&lt;/a&gt;.
&lt;/p&gt; &lt;p&gt;
If you are not on a maintenance plan and would like help updating or checking a recent restore, you can
&lt;a href=&quot;https://bugshield.co.uk/one-off&quot;&gt;request a one-off WordPress fix&lt;/a&gt;. If there are already signs that somebody gained
				access, choose &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt;WordPress malware removal&lt;/a&gt; so the investigation covers
				more than the plugin version.
&lt;/p&gt; &lt;p&gt;
For most site owners, this comes back to one practical step: make sure All-in-One WP Migration is on version
				7.110 or later before the next export or restore.
&lt;/p&gt;   &lt;h2&gt; Quick answers about the All-in-One WP Migration vulnerability &lt;/h2&gt;    &lt;h3&gt; Which versions of All-in-One WP Migration are affected?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;If your site is using All-in-One WP Migration and Backup 7.109 or earlier, it is within the affected range. Updating to version 7.110 or any newer release offered through WordPress will apply the security fix.&lt;/p&gt;  &lt;h3&gt; Does an attacker need a WordPress account?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;An attacker does not need a WordPress account to place the harmful data. However, the disclosed attack only reaches its final stage after a site administrator exports and then imports the site using a vulnerable version of the plugin.&lt;/p&gt;  &lt;h3&gt; Is my site safe if I have not restored an archive?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Without an export and restore, the harmful database command described by Wordfence is not triggered and this particular attack chain cannot be completed. Updating is still important because it prevents a future migration or restore from activating stored harmful data.&lt;/p&gt;  &lt;h3&gt; What should I do if I use All-in-One WP Migration?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Start by updating the plugin to version 7.110 or later and checking that the new version is active before creating or restoring another migration archive. If you recently completed a restore with version 7.109 or earlier, a security review is also sensible.&lt;/p&gt;  &lt;h3&gt; Should I remove the plugin after updating it?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;If your site still uses All-in-One WP Migration, you can keep it once the fixed version is active. If the plugin is no longer needed, removing it leaves one less piece of software to maintain and update.&lt;/p&gt;         &lt;p&gt;Originally published on &lt;a href=&quot;https://bugshield.co.uk/blog/all-in-one-wp-migration-sql-injection&quot;&gt;BugShield&lt;/a&gt;.&lt;/p&gt;</content:encoded><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate><atom:updated>2026-09-02T00:00:00.000Z</atom:updated><category>Security</category></item><item><title>Wishlist Member account takeover: unauthenticated mergewith bug in 3.34.1</title><link>https://bugshield.co.uk/blog/wishlist-member-account-takeover</link><guid isPermaLink="true">https://bugshield.co.uk/blog/wishlist-member-account-takeover</guid><description>Wishlist Member account takeover, CVE-2026-12949, affects versions through 3.34.1. Learn about the 3.34.2 fix, current update advice and account checks.</description><content:encoded>&lt;p&gt; &lt;strong&gt;Wishlist Member account takeover&lt;/strong&gt; is possible without logging in on WishList Member X
				through 3.34.1. Wordfence reports that a &lt;code&gt;mergewith&lt;/code&gt; parameter can be pointed at a WordPress
				user the attacker does not own. If that user is an administrator, they own the site. Update first.
				Then look at who is on the Users screen.
&lt;/p&gt;       Running WishList Member?    
Update the plugin first. If you cannot install 3.34.2 or a newer patched release, or the site already has mystery
			admins, we can do a full &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt;WordPress malware removal&lt;/a&gt; from £99.99.
  &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt; Get your site checked  &lt;/a&gt;    &lt;h2&gt;What this Wishlist Member account takeover actually is&lt;/h2&gt; &lt;p&gt; &lt;a href=&quot;https://wishlistmember.com/&quot; rel=&quot;noopener noreferrer&quot;&gt;WishList Member&lt;/a&gt; is a commercial
				membership plugin. Course sites, coaching programmes, and paid communities use it to gate content and
				take payments. If it is installed, it is usually doing the money part of the site, not sitting unused
				in a forgotten folder.
&lt;/p&gt; &lt;p&gt;
Wordfence published an advisory titled  &lt;a href=&quot;https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/wishlist-member-x/wishlist-member-x-3341-unauthenticated-account-takeover-via-mergewith-parameter&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;
Wishlist Member X 3.34.1: unauthenticated account takeover via the mergewith parameter
&lt;/a&gt;
. Their naming matches the rest of the  &lt;a href=&quot;https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/wishlist-member-x/&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;
WishList Member X intel list
&lt;/a&gt;
: versions up to and including &lt;strong&gt;3.34.1&lt;/strong&gt; are in scope. Unauthenticated means the attacker
				does not need a membership, an admin session, or a stolen password. Reaching the site is enough.
&lt;/p&gt; &lt;p&gt;
In plain English: the plugin can connect a new registration or payment to an existing WordPress
				account, avoiding the creation of a duplicate user. That connection is what &lt;code&gt;mergewith&lt;/code&gt; is
				designed to handle.
				The bug is that the plugin trusted that value without proving the requester owned the target account.
				Point it at the wrong user and you are sitting in their session. Point it at an administrator and the
				site is gone.
&lt;/p&gt; &lt;p&gt;
We will not include the technical request details here. To protect your site, update the plugin and
				review your WordPress users for any accounts or changes you do not recognise.
&lt;/p&gt; &lt;h2&gt;Who is at risk&lt;/h2&gt; &lt;p&gt;
If WishList Member (WishList Member X) is active and the version is &lt;strong&gt;3.34.1 or older&lt;/strong&gt;,
				treat the site as in scope. Check &lt;strong&gt;Plugins &amp;gt; Installed Plugins&lt;/strong&gt;, or the version string inside the WishList
				Member screens. Premium plugins often update from the vendor, not from wordpress.org, so “I click Update
				All on Tuesdays” is not a guarantee this one moved.
&lt;/p&gt; &lt;p&gt;
This is worse than “a subscriber can be annoying.” The May 2026 WishList Member bugs (
&lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2026-6419&quot; rel=&quot;noopener noreferrer&quot;&gt;
CVE-2026-6419
&lt;/a&gt;
,  &lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2026-6895&quot; rel=&quot;noopener noreferrer&quot;&gt;CVE-2026-6895&lt;/a&gt;,
				and neighbours) needed a Subscriber-level login first. This one does not. Open registration is not a
				prerequisite. A membership paywall does not save you. The public front of the site is the front door.
&lt;/p&gt; &lt;p&gt;
Two extra gotchas that matter on real membership sites:
&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;strong&gt;Levels can map to WordPress roles.&lt;/strong&gt; WishList Member can assign a WordPress role
					when someone joins a level. If any level grants Administrator (or even Editor), a taken-over member
					account is not “only” a content leak. It is wp-admin.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Duplicate-account handling is a feature, not a hidden switch.&lt;/strong&gt; The vendor documents
  &lt;a href=&quot;https://wishlistmember.com/docs/prevent-duplicate-shopping-cart-registrations/&quot; rel=&quot;noopener noreferrer&quot;&gt;
preventing duplicate shopping cart registrations
&lt;/a&gt;  
and  &lt;a href=&quot;https://wishlistmember.com/docs/member-registration-options-new-members-existing-members-or-both/&quot; rel=&quot;noopener noreferrer&quot;&gt;
letting existing members add a level without a second login
&lt;/a&gt;
. That is legitimate product behaviour. The vulnerability is the unauthenticated abuse of the
					parameter that glues those flows together, not the idea of merging itself.
&lt;/li&gt; &lt;/ul&gt; &lt;h2&gt;How the mergewith bug fits together&lt;/h2&gt; &lt;p&gt;
You do not need an exploit write-up. The shape is enough, and it is the same shape we keep seeing in
				membership plugins.
&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;strong&gt;A public flow accepts a user identifier.&lt;/strong&gt; Registration, a payment return, or a
					related front-end request includes a &lt;code&gt;mergewith&lt;/code&gt; value that names an existing WordPress
					user.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;The plugin does not prove you own that user.&lt;/strong&gt; No login. No capability check that
					would stop a stranger. The value is trusted.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Accounts get glued together, or the attacker is treated as that user.&lt;/strong&gt; Membership
					levels, profile data, and the WordPress role travel with the account.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Aftermath.&lt;/strong&gt; From an administrator session the rest is ordinary: new admin users,
					plugin ZIPs, must-use droppers,  &lt;code&gt;wp-config.php&lt;/code&gt; in someone’s pocket. Same cleanup story as  &lt;a href=&quot;https://bugshield.co.uk/blog/wordpress-plugin-supply-chain-attack&quot;&gt;the BdThemes supply chain mess&lt;/a&gt; last week,
					minus the poisoned JSON.
&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;
If that last stretch sounds adjacent to  &lt;a href=&quot;https://bugshield.co.uk/blog/wordpress-xss2shell&quot;&gt;WordPress XSS2Shell&lt;/a&gt;, it is only from a site-owner point of
				view: security issue published, patch available or imminent, do not wait for a quiet Sunday. XSS2Shell
				started on &lt;code&gt;wp-login.php&lt;/code&gt;.  &lt;a href=&quot;https://bugshield.co.uk/blog/wordpress-7-0-4-postscript-rce&quot;&gt;The WordPress 7.0.4 Postscript bug&lt;/a&gt; started in the
				Media Library. This one starts in the membership plugin you installed on purpose.
&lt;/p&gt; &lt;h2&gt;This plugin has had a rough year&lt;/h2&gt; &lt;p&gt;
WishList Member is not a one-CVE product. In May, Wordfence disclosed a cluster of High issues through
				3.30.1 where a Subscriber could pull or rotate the plugin’s REST API secret, create a membership level
				mapped to Administrator, and register a new admin. Patches landed in 3.31.x. The  &lt;a href=&quot;https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/wishlist-member-x/wishlist-member-3301-missing-authorization-to-authenticated-subscriber-api-secret-key-disclosure-and-privilege-escalation-via-wlm3-export-settings-ajax-action&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;
wlm3_export_settings advisory
&lt;/a&gt;  
is the readable one if you want the older chain in one place.
&lt;/p&gt; &lt;p&gt;
3.33.0 (June) had a Security section in the  &lt;a href=&quot;https://my.wishlistmember.com/changelog/wishlist-member-3-33-0/&quot; rel=&quot;noopener noreferrer&quot;&gt;
vendor changelog
&lt;/a&gt;
: tighter payment notifications, team and API access, login and profile hardening. 3.34.0 (6th July)
				hardened secrets used by some payment integrations. None of that is a reason to assume 3.34.1 is fine.
				A later unauthenticated account takeover means those earlier fixes did not cover this path.
&lt;/p&gt; &lt;p&gt;
The advisory identifies &lt;strong&gt;CVE-2026-12949&lt;/strong&gt; and confirms &lt;strong&gt;3.34.2&lt;/strong&gt; as the first patched release. Install the latest patched version available through your WishList Member account. If &lt;strong&gt;Dashboard &amp;gt; Updates&lt;/strong&gt; does not offer it, check the licence connection and obtain the package from the vendor. The &lt;a href=&quot;https://my.wishlistmember.com/changelogs/&quot; rel=&quot;noopener noreferrer&quot;&gt;WishList Member changelog&lt;/a&gt; records subsequent releases.
&lt;/p&gt; &lt;h2&gt;What to do about this Wishlist Member account takeover today&lt;/h2&gt; &lt;ol&gt; &lt;li&gt; &lt;strong&gt;Update WishList Member&lt;/strong&gt; to the latest patched release from the vendor; 3.34.2 is the first version containing this fix. Confirm the version under &lt;strong&gt;Plugins &amp;gt; Installed Plugins&lt;/strong&gt;, or inside WishList Member itself. If the plugin is inactive but still installed,
					update or delete it. Inactive is not the same as gone, and leftover copies get forgotten.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Audit WordPress users.&lt;/strong&gt; &lt;strong&gt;Users &amp;gt; All Users&lt;/strong&gt;. Sort by registered date. Look at
					Administrators first, then anyone with a role you did not assign. WP-CLI is the honest view if you
					have SSH: &lt;code&gt;wp user list --role=administrator&lt;/code&gt;. The dashboard can lie after a takeover.
					See  &lt;a href=&quot;https://bugshield.co.uk/how-to/manage-wordpress-user-roles&quot;&gt;managing WordPress user roles&lt;/a&gt; if you need a
					refresher on what each role can actually do.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Look at membership levels and role maps.&lt;/strong&gt; In WishList Member, check which levels
					grant a WordPress role. A “Gold” level that quietly assigns Administrator is a loaded gun even after
					the plugin is patched. Change that mapping. Then re-check the Users screen.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Reset remaining admin passwords&lt;/strong&gt; and turn on two-factor authentication.  &lt;a href=&quot;https://bugshield.co.uk/how-to/reset-wordpress-admin-password&quot;&gt;Reset the admin password&lt;/a&gt;, then  &lt;a href=&quot;https://bugshield.co.uk/how-to/enable-wordpress-two-factor-authentication&quot;&gt;enable WordPress 2FA&lt;/a&gt;. If you also
					keep site credentials in BugShield, the same habit applies to  &lt;a href=&quot;https://bugshield.co.uk/blog/bugshield-account-security-2fa-active-sessions&quot;&gt;our own 2FA and Active Sessions&lt;/a&gt;.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;If you were late:&lt;/strong&gt; review unexpected plugins (including &lt;code&gt;mu-plugins&lt;/code&gt;),
					Application Passwords, and new users from the last few weeks. For a proper pass, see  &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt;WordPress malware removal&lt;/a&gt; and  &lt;a href=&quot;https://bugshield.co.uk/knowledge-base/fixing-a-hacked-site&quot;&gt;Fixing a Hacked Site&lt;/a&gt;.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Take a clean backup&lt;/strong&gt; after you patch, so you are not rolling back onto a known-bad
					plugin build.  &lt;a href=&quot;https://bugshield.co.uk/backups&quot;&gt;Managed backups&lt;/a&gt; exist so that step is not a ZIP on someone’s laptop.
&lt;/li&gt; &lt;/ol&gt; &lt;h2&gt;How to tell if someone already used it&lt;/h2&gt; &lt;p&gt;
There is no magic log line labelled “mergewith attack.” Look for the residue instead.
&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Administrator accounts you did not create, especially recent ones with throwaway emails&lt;/li&gt; &lt;li&gt;Existing admins whose email or password suddenly “stopped working” for the real owner&lt;/li&gt; &lt;li&gt;Members who gained a WordPress role they never had&lt;/li&gt; &lt;li&gt;Plugin folders you did not install, and anything under &lt;code&gt;wp-content/mu-plugins&lt;/code&gt;&lt;/li&gt; &lt;li&gt;Payment or registration traffic that does not match real customers&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;
Unknown does not mean safe. If WishList Member was on 3.34.1 or older and exposed to the internet,
				do the user audit even if the dashboard looks calm. File integrity tools will not catch an account
				takeover. The files can be clean. The Users table is where this one lives first.
&lt;/p&gt; &lt;p&gt;
If anything on that list shows up, stop poking at random files. Half-cleaning a backdoor is how it
				comes back next week. The work is the same as our  &lt;a href=&quot;https://bugshield.co.uk/case-studies/hacked-wordpress-site-cleaned-and-secured&quot;&gt;hacked WordPress site case study&lt;/a&gt;
: files, database, and the entry point. Deleting one user and hoping is not that.
&lt;/p&gt; &lt;h2&gt;Wishlist Member account takeover and BugShield&lt;/h2&gt; &lt;p&gt;
Premium membership plugins are easy to leave a version behind. The update is not in the wordpress.org
				button. It sits in a vendor account someone last logged into in 2024. That is how a site stays on
				3.34.1 while the advisory is already public.
&lt;/p&gt; &lt;p&gt;
On Shield plans we treat plugin updates as part of  &lt;a href=&quot;https://bugshield.co.uk/wordpress-plugin-update-service&quot;&gt;managed updates&lt;/a&gt;, next to  &lt;a href=&quot;https://bugshield.co.uk/monitoring&quot;&gt;monitoring&lt;/a&gt; and &lt;a href=&quot;https://bugshield.co.uk/backups&quot;&gt;backups&lt;/a&gt;. That includes commercial
				plugins when we have the licence in the  &lt;a href=&quot;https://bugshield.co.uk/security&quot;&gt;Password Vault&lt;/a&gt;. Shield Pro adds malware scanning when you need a second pair of
				eyes on files after a scare. Broader reading:  &lt;a href=&quot;https://bugshield.co.uk/knowledge-base/website-hacking-and-malware&quot;&gt;website security&lt;/a&gt; and  &lt;a href=&quot;https://bugshield.co.uk/knowledge-base/fixing-a-hacked-site&quot;&gt;WordPress security&lt;/a&gt; in the knowledge base.
&lt;/p&gt; &lt;p&gt;
If you only need this one plugin updated, or the site already looks compromised,  &lt;a href=&quot;https://bugshield.co.uk/one-off&quot;&gt;request a one-off fix&lt;/a&gt; or go straight to  &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt;malware removal&lt;/a&gt;. August has been busy enough without leaving a
				membership plugin as the unlocked door.
&lt;/p&gt; &lt;p&gt;
Install the latest patched WishList Member release, with 3.34.2 as the minimum for this flaw. Then review who can still log in as administrator. That is the
				whole job for most sites today.
&lt;/p&gt;   &lt;h2&gt; Quick answers about WishList Member security &lt;/h2&gt;    &lt;h3&gt; Which WishList Member versions are affected?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;WishList Member X 3.34.1 and earlier are affected by CVE-2026-12949. Version 3.34.2 is the first patched release. Install the latest patched version from the vendor and confirm the installed version inside WordPress or the plugin&amp;apos;s own settings.&lt;/p&gt;  &lt;h3&gt; Does an attacker need a member account to use this bug?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;No. The vulnerability is unauthenticated, so an attacker does not need a membership, an existing login or a stolen password to target the site.&lt;/p&gt;  &lt;h3&gt; What if WishList Member is installed but inactive?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Do not leave an old copy forgotten on the server. Update it if you plan to use it again, or remove it if the site no longer needs it.&lt;/p&gt;  &lt;h3&gt; How can I tell whether someone took over an account?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Look for unfamiliar administrators, unexpected role changes, new plugin folders, must-use plugins and registration or payment activity that does not match real customers. Check the database or WP-CLI as well as the WordPress Users screen if you can.&lt;/p&gt;  &lt;h3&gt; Is updating the plugin enough after a suspected compromise?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Updating closes the vulnerable path, but it does not remove accounts or files that may already have been added. If anything looks unfamiliar, the site needs a proper review of its users, files, database and access credentials.&lt;/p&gt;         &lt;p&gt;Originally published on &lt;a href=&quot;https://bugshield.co.uk/blog/wishlist-member-account-takeover&quot;&gt;BugShield&lt;/a&gt;.&lt;/p&gt;</content:encoded><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><atom:updated>2026-10-09T00:00:00.000Z</atom:updated><category>Security</category></item><item><title>WordPress 7.0.4: Author-level Postscript upload RCE (CVE-2026-65640)</title><link>https://bugshield.co.uk/blog/wordpress-7-0-4-postscript-rce</link><guid isPermaLink="true">https://bugshield.co.uk/blog/wordpress-7-0-4-postscript-rce</guid><description>WordPress 7.0.4 patches CVE-2026-65640, an Author-level Postscript upload RCE when Imagick and Ghostscript are present. See who is affected and what to do.</description><content:encoded>&lt;p&gt; &lt;strong&gt;WordPress 7.0.4&lt;/strong&gt; fixed a High severity core bug (CVE-2026-65640) that allowed a user with upload permission to turn a crafted Postscript upload into code execution when Imagick and Ghostscript were present. That was the original patch. Install current WordPress security updates, then review who can upload media.
&lt;/p&gt;       Keep security updates current    
Update WordPress first. If the site already looks odd after an Author-level account went sideways, we
			can do a full &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt;WordPress malware removal&lt;/a&gt; from £99.99.
  &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt; Get your site checked  &lt;/a&gt;    &lt;h2&gt;What WordPress 7.0.4 fixes&lt;/h2&gt; &lt;p&gt;
WordPress published  &lt;a href=&quot;https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-8vr3-7mxf-gx8w&quot; rel=&quot;noopener noreferrer&quot;&gt;
GHSA-8vr3-7mxf-gx8w
&lt;/a&gt; 
on 12th August 2026. The CVE is &lt;strong&gt;CVE-2026-65640&lt;/strong&gt;. CVSS 8.8 (High). CWE-434: unrestricted
				upload of a dangerous type.
&lt;/p&gt; &lt;p&gt;
In plain English: on some hosts, WordPress will process a Postscript file that an Author uploads through
				the Media Library. Imagick hands that file to Ghostscript. Ghostscript has a weakness in how it handles
				certain embedded files. That is where remote code execution comes from. WordPress is the front door.
				Ghostscript is the room the payload reaches.
&lt;/p&gt; &lt;p&gt;
The fix shipped in &lt;strong&gt;WordPress 7.0.4&lt;/strong&gt;, and as usual the WordPress security team backported
				it all the way to the 4.7 branch. You do not need to jump to 7.x to be patched. You do need the matching
				security release for whatever major you are on.
&lt;/p&gt; &lt;p&gt;
Credit for the disclosure goes to the team at  &lt;a href=&quot;https://pwn.ai/&quot; rel=&quot;noopener noreferrer&quot;&gt;pwn.ai&lt;/a&gt;.
&lt;/p&gt; &lt;h2&gt;Who is at risk from this WordPress 7.0.4 CVE&lt;/h2&gt; &lt;p&gt;
Two conditions have to line up. Miss either one and this particular path does not fire. That is not a
				reason to skip the update.
&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;strong&gt;Imagick and Ghostscript on the server.&lt;/strong&gt; Plenty of managed WordPress hosts ship both
					so image and PDF handling “just works.” Shared hosts and VPS images do the same. If you are not
					sure, ask the host whether ImageMagick (Imagick PHP extension) and Ghostscript are installed.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;A user with the &lt;code&gt;upload_files&lt;/code&gt; capability.&lt;/strong&gt; On a default WordPress role
					map, that means Author and above: Author, Editor, Administrator. Contributor does not get Media
					Library uploads by default. Custom roles and membership plugins often add &lt;code&gt;upload_files&lt;/code&gt; 
to “trusted” customers. Treat those the same as Authors for this advisory.
&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;
This is not an unauthenticated drive-by. Someone needs a legitimate (or stolen) Author-level account,
				or any account that can upload media. That still leaves a large blast radius: guest writers, agencies
				with shared Author logins, old contractor accounts nobody revoked, and any plugin that quietly grants
				upload rights.
&lt;/p&gt; &lt;p&gt;
If that sounds adjacent to  &lt;a href=&quot;https://bugshield.co.uk/blog/wordpress-xss2shell&quot;&gt;WordPress XSS2Shell&lt;/a&gt;, it is the same family of problem from a
				site-owner point of view: core bug, security release out, update now. The mechanics differ. XSS2Shell
				started on the login page. This one starts in the Media Library.
&lt;/p&gt; &lt;h2&gt;How the Postscript upload RCE fits together&lt;/h2&gt; &lt;p&gt;
You do not need an exploit walkthrough to defend the site. The shape is enough.
&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;strong&gt;Upload.&lt;/strong&gt; A user with &lt;code&gt;upload_files&lt;/code&gt; adds a malicious Postscript file
					through the normal media flow WordPress already allows.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Server-side processing.&lt;/strong&gt; With Imagick available, WordPress (or the image stack
					around it) asks Ghostscript to handle Postscript content.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Ghostscript weakness.&lt;/strong&gt; Certain embedded files inside that Postscript are handled
					badly. That is the RCE step. It runs as the same system user PHP runs as, often  &lt;code&gt;www-data&lt;/code&gt;.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Aftermath.&lt;/strong&gt; From there an attacker can plant PHP, read  &lt;code&gt;wp-config.php&lt;/code&gt;, create admin users, or drop must-use plugins. Same cleanup story as any
					other webshell.
&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;
WordPress called out “certain installations.” That is the Imagick + Ghostscript prerequisite, not a
				vague “maybe you are fine.” If both are present and you still have unpatched core, assume you are in
				scope.
&lt;/p&gt; &lt;h2&gt;Patched versions for WordPress 7.0.4 and the backports&lt;/h2&gt; &lt;p&gt;
WordPress 7.0.4 was the first fix on the 7.0 branch for this specific vulnerability. The versions below record that original patch, not the releases to stop at today:
&lt;/p&gt; &lt;ul&gt; &lt;li&gt;7.0.x: 7.0.4&lt;/li&gt; &lt;li&gt;6.9.x: 6.9.7&lt;/li&gt; &lt;li&gt;6.8.x: 6.8.8&lt;/li&gt; &lt;li&gt;6.7.x: 6.7.7&lt;/li&gt; &lt;li&gt;6.6.x: 6.6.7&lt;/li&gt; &lt;li&gt;…and the same pattern back through 4.7.35&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;
Full affected and patched lists are in the  &lt;a href=&quot;https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-8vr3-7mxf-gx8w&quot; rel=&quot;noopener noreferrer&quot;&gt;GitHub advisory&lt;/a&gt;. If &lt;strong&gt;Dashboard &amp;gt; Updates&lt;/strong&gt; offers a security release, take it. Do not wait for a “convenient” maintenance
				window if Authors can already upload.
&lt;/p&gt; &lt;h2&gt;What to do about WordPress 7.0.4 today&lt;/h2&gt; &lt;p&gt;As checked on 9th October 2026, the &lt;a href=&quot;https://wordpress.org/news/2026/10/wordpress-7-1-3-maintenance-and-security-release/&quot; rel=&quot;noopener noreferrer&quot;&gt;WordPress 7.1.3 security release&lt;/a&gt; includes additional fixes. Use the latest available release rather than installing 7.0.4 as a final destination. Only the latest WordPress release is actively supported; older security backports do not promise continuing support.&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;strong&gt;Update WordPress&lt;/strong&gt; to the newest release available for your installation, then confirm it under &lt;strong&gt;Dashboard &amp;gt; Updates&lt;/strong&gt;. The original 7.0.4 fix does not include later security patches.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Audit who can upload.&lt;/strong&gt; &lt;strong&gt;Users &amp;gt; All Users&lt;/strong&gt;. Look for Authors, Editors, and any custom
					role with Media Library access you forgot about. Remove accounts that no longer need a login.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Review recent media.&lt;/strong&gt; Especially Postscript / EPS-style uploads from the last few
					weeks if you have Author accounts you do not fully trust. Delete anything you did not expect.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;If you were late:&lt;/strong&gt; review Administrator users, unexpected plugins (including  &lt;code&gt;mu-plugins&lt;/code&gt;), and Application Passwords. Change passwords for remaining admins. For a
					proper pass, see  &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt;WordPress malware removal&lt;/a&gt; and  &lt;a href=&quot;https://bugshield.co.uk/knowledge-base/fixing-a-hacked-site&quot;&gt;Fixing a Hacked Site&lt;/a&gt;.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Take a clean backup&lt;/strong&gt; after you patch, so you are not rolling back onto a known-bad
					core build.
&lt;/li&gt; &lt;/ol&gt; &lt;h2&gt;Hosting notes: Imagick, Ghostscript, and hard choices&lt;/h2&gt; &lt;p&gt;
Some teams will ask whether they should remove Ghostscript or disable Imagick. That can reduce exposure
				to this class of bug, and it can also break PDF thumbnails, EPS handling, and other media features your
				editors rely on. Patching WordPress is the first move. Server-side surgery is a second conversation with
				whoever runs the stack.
&lt;/p&gt; &lt;p&gt;
If you manage your own VPS, our  &lt;a href=&quot;https://bugshield.co.uk/blog/set-up-a-wordpress-server&quot;&gt;WordPress server setup&lt;/a&gt; checklist is the place to keep
				“what image tools are installed” written down, not guessed under pressure.
&lt;/p&gt; &lt;h2&gt;WordPress 7.0.4 and BugShield&lt;/h2&gt; &lt;p&gt;
Core security releases are the boring kind of urgent. On Shield plans we apply WordPress updates as part
				of  &lt;a href=&quot;https://bugshield.co.uk/wordpress-plugin-update-service&quot;&gt;managed updates&lt;/a&gt;, next to  &lt;a href=&quot;https://bugshield.co.uk/monitoring&quot;&gt;monitoring&lt;/a&gt; and  &lt;a href=&quot;https://bugshield.co.uk/backups&quot;&gt;backups&lt;/a&gt;. Shield Pro adds malware scanning when you need a second pair of eyes on
				files after a scare.
&lt;/p&gt; &lt;p&gt;
If you only need this one patch handled, or the site already looks compromised,  &lt;a href=&quot;https://bugshield.co.uk/one-off&quot;&gt;request a one-off fix&lt;/a&gt; or go straight to  &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt;malware removal&lt;/a&gt;. And if you are still catching up on last week’s
				core issue, the  &lt;a href=&quot;https://bugshield.co.uk/blog/wordpress-xss2shell&quot;&gt;XSS2Shell post&lt;/a&gt; and free  &lt;a href=&quot;https://bugshield.co.uk/tools/xss2shell&quot;&gt;XSS2Shell checker&lt;/a&gt; are still worth a pass. August has been busy.
&lt;/p&gt; &lt;p&gt;
Install current WordPress security updates, then review who can upload files and investigate any evidence of misuse. An update closes the flaw; it cannot establish whether the site was compromised before the fix.
&lt;/p&gt;   &lt;h2&gt; Quick answers about WordPress 7.0.4 &lt;/h2&gt;    &lt;h3&gt; Which WordPress sites are exposed to CVE-2026-65640?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;The vulnerable path needs Imagick and Ghostscript on the server, plus a WordPress user who can upload files. On a default site that includes Authors, Editors and Administrators, although custom roles may also have upload access.&lt;/p&gt;  &lt;h3&gt; Do I need to move to WordPress 7.0.4 if my site uses WordPress 6.x?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;The original fix was also backported to older branches, so 7.0.4 was not the only patched version. Those historical patches are not current update targets. Install the latest available WordPress release, testing compatibility first.&lt;/p&gt;  &lt;h3&gt; Can a Contributor exploit the Postscript upload issue?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Contributors cannot upload media on a default WordPress installation. Check any custom roles or membership plugins, because they may grant the upload_files capability to users who would not normally have it.&lt;/p&gt;  &lt;h3&gt; Should I remove Imagick or Ghostscript from the server?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Patch WordPress first. Removing either tool may affect PDF thumbnails, EPS handling and other media features, so discuss any server change with the person who manages your hosting.&lt;/p&gt;  &lt;h3&gt; What should I review after installing the security update?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Check who can upload files, review recent media, and look for unfamiliar administrators, plugins or Application Passwords. Once you are comfortable the site is clean, take a fresh backup of the patched version.&lt;/p&gt;         &lt;p&gt;Originally published on &lt;a href=&quot;https://bugshield.co.uk/blog/wordpress-7-0-4-postscript-rce&quot;&gt;BugShield&lt;/a&gt;.&lt;/p&gt;</content:encoded><pubDate>Wed, 12 Aug 2026 00:00:00 GMT</pubDate><atom:updated>2026-10-09T00:00:00.000Z</atom:updated><category>Security</category></item><item><title>WordPress plugin supply chain attack: BdThemes plugins created rogue admins</title><link>https://bugshield.co.uk/blog/wordpress-plugin-supply-chain-attack</link><guid isPermaLink="true">https://bugshield.co.uk/blog/wordpress-plugin-supply-chain-attack</guid><description>A WordPress plugin supply chain attack hit BdThemes in August 2026. See which plugins were affected, how hidden admins were created, and how to check your site.</description><content:encoded>&lt;p&gt;
A &lt;strong&gt;WordPress plugin supply chain attack&lt;/strong&gt; hit BdThemes in August 2026. The plugin files on
				WordPress.org stayed clean. A promotional JSON feed did not. When an administrator signed in, the
				compromised feed could create additional administrator accounts without their knowledge. If you run
				Element Pack, Prime Slider, or another BdThemes plugin, check the site even if nothing looks wrong.
&lt;/p&gt;       Using a BdThemes plugin?    
Cleaning the vendor feed does not clean a site that already got a hidden admin or webshell. If you
			would like a developer to investigate, BugShield offers &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt;WordPress malware removal&lt;/a&gt; from £99.99.
  &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt; Get your site checked  &lt;/a&gt;    &lt;h2&gt;What a WordPress plugin supply chain attack actually is&lt;/h2&gt; &lt;p&gt;
Most people picture a supply chain attack as “someone uploaded a bad plugin update.” That does happen.
				A ZIP on WordPress.org gets swapped, sites auto-update, and the malware arrives with a version bump.
&lt;/p&gt; &lt;p&gt;
The BdThemes case is the other flavour, and it is worse in one specific way. Nothing in the plugin
				repository had to change. The plugins already trusted a remote promotional feed. Attackers poisoned
				that feed. Every time a logged-in admin opened wp-admin, the dashboard fetched the poisoned JSON and
				ran attacker JavaScript in the admin’s own browser session.
&lt;/p&gt; &lt;p&gt;
You did not click a phishing link. You did not install a random ZIP from an email. Logging into
				wp-admin was enough. That is why this WordPress plugin supply chain attack spread quietly.
&lt;/p&gt; &lt;h2&gt;What happened with BdThemes&lt;/h2&gt; &lt;p&gt;
BdThemes makes Elementor add-ons a lot of sites already have installed: Element Pack, Prime Slider,
				Pixel Gallery, Ultimate Post Kit, Ultimate Store Kit, plus a couple of smaller tools. Element Pack
				alone sits north of 100,000 active installs on  &lt;a href=&quot;https://wordpress.org/plugins/bdthemes-element-pack-lite/&quot; rel=&quot;noopener noreferrer&quot;&gt;WordPress.org&lt;/a&gt;.
&lt;/p&gt; &lt;p&gt;
Those plugins share a banner component (researchers call it Biggopti) that pulls “summer sale” style
				notices from a vendor API. The API was not a clever application server. It was static JSON in object
				storage, sitting behind Cloudflare. Someone got write access to that bucket and replaced the
				legitimate notices with a payload.
&lt;/p&gt; &lt;p&gt; &lt;a href=&quot;https://www.wordfence.com/blog/2026/08/psa-supply-chain-compromise-in-bdthemes-ecosystem-via-poisoned-api-response/&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;
Wordfence
&lt;/a&gt; 
was notified on 7th August 2026 after seeing the traffic in the wild. The WordPress Plugins team then
				closed the affected listings pending review. By 8th August the poisoned endpoints were serving clean
				JSON again.  &lt;a href=&quot;https://www.bleepingcomputer.com/news/security/bdthemes-plugins-supply-chain-hack-creates-rogue-wordpress-admins/&quot; rel=&quot;noopener noreferrer&quot;&gt;
BleepingComputer
&lt;/a&gt; 
has a useful news round-up if you want the timeline in one place.
&lt;/p&gt; &lt;p&gt;
Cleaning the feed is not the same as cleaning your site. Anything planted between late June and 8th
				August is still there until someone looks.
&lt;/p&gt; &lt;h2&gt;Which plugins were in the blast radius&lt;/h2&gt; &lt;p&gt;
If any of these are installed, treat the site as in-scope. Free or premium does not matter. The
				banner code is what mattered:
&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Element Pack Addons for Elementor (&lt;code&gt;bdthemes-element-pack-lite&lt;/code&gt;)&lt;/li&gt; &lt;li&gt;Prime Slider Addons for Elementor (&lt;code&gt;bdthemes-prime-slider-lite&lt;/code&gt;)&lt;/li&gt; &lt;li&gt;Pixel Gallery Addons for Elementor (&lt;code&gt;pixel-gallery&lt;/code&gt;)&lt;/li&gt; &lt;li&gt;Ultimate Post Kit Addons for Elementor (&lt;code&gt;ultimate-post-kit&lt;/code&gt;)&lt;/li&gt; &lt;li&gt;Ultimate Store Kit (&lt;code&gt;ultimate-store-kit&lt;/code&gt;)&lt;/li&gt; &lt;li&gt;Live Copy Paste for Elementor (&lt;code&gt;live-copy-paste&lt;/code&gt;)&lt;/li&gt; &lt;li&gt;Smart Admin Assistant (&lt;code&gt;smart-admin-assistant&lt;/code&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;
Wordfence scored the underlying XSS as medium (CVSS 5.4) and listed it as unpatched when they
				published. That sounds mild until you remember where it ran: inside an already-authenticated
				administrator session, on every wp-admin page load.
&lt;/p&gt; &lt;h2&gt;How the attack created rogue WordPress admins&lt;/h2&gt; &lt;p&gt;
You do not need to understand every technical detail to protect your site. The important part is
				knowing how the attack reached WordPress and what it changed.
&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;strong&gt;A coding gap in the banner.&lt;/strong&gt; A field from the remote JSON was dropped into an HTML  &lt;code&gt;id&lt;/code&gt; attribute without escaping. That bug landed in March 2026. Later releases
					sanitised the banner body and still left the &lt;code&gt;id&lt;/code&gt; open.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Poisoned JSON instead of a plugin update.&lt;/strong&gt; With write access to the vendor bucket,
					attackers did not need to touch WordPress.org. The next admin page load fetched their payload.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;JavaScript in your admin session.&lt;/strong&gt; The script used the logged-in administrator’s
					own nonce to create a new Administrator user. One variant used predictable usernames starting
					with &lt;code&gt;bd_&lt;/code&gt; and an &lt;code&gt;@wordpress.org&lt;/code&gt; email. Another hid the new account from
					the Users screen.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;A fake plugin, then a backdoor.&lt;/strong&gt; A ZIP with a boring name (researchers saw
					things like &lt;code&gt;wp-smart-thumbnails&lt;/code&gt;) landed through the normal plugin uploader. Inside
					it: a webshell. That then dropped must-use plugins for persistence, including a magic-login
					style backdoor.
&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;
If that last stretch sounds familiar, it should.  &lt;a href=&quot;https://bugshield.co.uk/blog/wordpress-xss2shell&quot;&gt;WordPress XSS2Shell&lt;/a&gt; is a different bug, in WordPress core,
				but the idea is the same: XSS in an admin context is how you turn “a script on a page” into “they
				own the site.”
&lt;/p&gt; &lt;h2&gt;Why file scans missed this WordPress plugin supply chain attack&lt;/h2&gt; &lt;p&gt;
Integrity checkers compare plugin files with WordPress.org. These files matched. No update was
				required. No file on disk had to change for the first stage to fire.
&lt;/p&gt; &lt;p&gt;
That is the part that should make site owners sit up. A lot of “we are fine” habits assume malware
				arrives as a dirty PHP file. Here the first stage lived in a JSON response the plugin asked for on
				purpose. File hashes stay green. The Users list can stay green too, because one of the persistence
				modules hooked database queries and hid the rogue accounts.
&lt;/p&gt; &lt;p&gt;
If you only glance at &lt;strong&gt;Dashboard &amp;gt; Users&lt;/strong&gt;, you can miss the whole thing. Check the database, or use
				WP-CLI, or look at the &lt;code&gt;wp_users&lt;/code&gt; table from the host. Do not trust the screen that the
				malware was written to lie to.
&lt;/p&gt; &lt;h2&gt;How to check your site after the BdThemes incident&lt;/h2&gt; &lt;p&gt;
Wordfence’s earliest possible campaign date is 23rd June 2026, based on timestamps in the poisoned
				notices. The feed was clean again on 8th August. If a BdThemes plugin was active in that window, and
				an administrator used wp-admin, do this checklist. None of it needs a scanner licence.
&lt;/p&gt; &lt;h3&gt;1. Look for users you did not create&lt;/h3&gt; &lt;p&gt;
Hunt for Administrator accounts you do not recognise, especially:
&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Usernames starting with &lt;code&gt;bd_&lt;/code&gt; followed by six letters or numbers&lt;/li&gt; &lt;li&gt;Emails on &lt;code&gt;@wordpress.org&lt;/code&gt; or &lt;code&gt;@developer.wordpress.org&lt;/code&gt; that you did not add&lt;/li&gt; &lt;li&gt;Admins that appear in the database but not in wp-admin&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;
WP-CLI is the honest view: &lt;code&gt;wp user list --role=administrator&lt;/code&gt;. If you do not have SSH,
				phpMyAdmin or your host’s database tool works. Sort &lt;code&gt;wp_users&lt;/code&gt; by &lt;code&gt;user_registered&lt;/code&gt; 
and look at anything from late June onwards.
&lt;/p&gt; &lt;h3&gt;2. Look at plugins, including ones you never activated&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Folders you did not install, with friendly names like &lt;code&gt;wp-smart-thumbnails&lt;/code&gt;&lt;/li&gt; &lt;li&gt;A file named &lt;code&gt;emer-run.php&lt;/code&gt; anywhere under &lt;code&gt;wp-content&lt;/code&gt;&lt;/li&gt; &lt;li&gt;
Must-use plugins under &lt;code&gt;wp-content/mu-plugins&lt;/code&gt;, especially names like  &lt;code&gt;class-wp-token-validate.php&lt;/code&gt;, &lt;code&gt;class-wp-query-*.php&lt;/code&gt;, or  &lt;code&gt;wp-cache-optimizer.php&lt;/code&gt; &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;
Must-use plugins load automatically. They do not show up in the normal Plugins screen the way a
				regular plugin does. If you never use that folder, it should be empty or only contain what you put
				there.
&lt;/p&gt; &lt;h3&gt;3. Check the options table&lt;/h3&gt; &lt;p&gt;
Researchers flagged two database options used as compromise flags: &lt;code&gt;fz_emer_login_tokens&lt;/code&gt; 
and &lt;code&gt;fz_emer_done_v1&lt;/code&gt;. If either exists, treat the site as compromised even if the
				dashboard looks calm.
&lt;/p&gt; &lt;h3&gt;4. Do not stop at “the plugin is closed now”&lt;/h3&gt; &lt;p&gt;
WordPress.org closing the listing stops new installs. It does not uninstall the plugin, and it does
				not remove a backdoor that already landed. Same for the cleaned API. That only stops new infections
				from this particular feed.
&lt;/p&gt; &lt;h2&gt;What to do if you find a rogue admin or webshell&lt;/h2&gt; &lt;p&gt;
If anything on that list shows up, stop poking at random files. Half-cleaning a backdoor is how it
				comes back next week.
&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;strong&gt;Take a backup of the current mess&lt;/strong&gt; before you delete anything, so a cleaner can
					still see what was there. Then keep it off the public site.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Remove the rogue users from the database&lt;/strong&gt;, not only from the Users screen. Reset
					passwords for every remaining Administrator. Rotate hosting, FTP, database, and application
					passwords too. The  &lt;a href=&quot;https://bugshield.co.uk/security&quot;&gt;Password Vault&lt;/a&gt; exists so you are not doing that over email.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Delete the fake plugin and any must-use droppers.&lt;/strong&gt; Search the whole  &lt;code&gt;wp-content&lt;/code&gt; tree for &lt;code&gt;emer-run.php&lt;/code&gt;, not just the plugins folder.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Clear those database options&lt;/strong&gt; if they are present, after you have a copy.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Review who is still signed in.&lt;/strong&gt; WordPress sessions, application passwords, and
					any “magic login” style URL the backdoor used. Our own  &lt;a href=&quot;https://bugshield.co.uk/blog/bugshield-account-security-2fa-active-sessions&quot;&gt;2FA and Active Sessions&lt;/a&gt; post
					is about the BugShield account, but the habit is the same: a strange session is a warning, not
					the whole cleanup.
&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;
If that already feels like a lot, it is. This is the job in  &lt;a href=&quot;https://bugshield.co.uk/knowledge-base/fixing-a-hacked-site&quot;&gt;Fixing a Hacked Site&lt;/a&gt;, and it is the same work we
				did in the  &lt;a href=&quot;https://bugshield.co.uk/case-studies/hacked-wordpress-site-cleaned-and-secured&quot;&gt;hacked WordPress site case study&lt;/a&gt;.
				A proper  &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt;malware removal&lt;/a&gt; pass covers files, the database, and the
				entry point. Deleting one user and hoping is not that.
&lt;/p&gt; &lt;h2&gt;This keeps happening&lt;/h2&gt; &lt;p&gt;
BdThemes is not a one-off mood. The same few months brought CDN and update-flow compromises against
				other well-known WordPress products, including  &lt;a href=&quot;https://www.bleepingcomputer.com/news/security/optinmonster-wordpress-plugin-hacked-in-cdn-supply-chain-attack/&quot; rel=&quot;noopener noreferrer&quot;&gt;
OptinMonster
&lt;/a&gt;
. Wordfence tied the command-and-control used here to the same actor behind that campaign and the
				Advanced Responsive Video Embedder incident.
&lt;/p&gt; &lt;p&gt;
The pattern is getting boring, which is the problem. Popular plugins talk to vendor APIs for
				licence checks, banners, changelog nags, and “news.” Those requests look legitimate. They use HTTPS.
				They come from a domain the plugin author owns. File integrity tools are not watching that JSON.
&lt;/p&gt; &lt;p&gt;
So a WordPress plugin supply chain attack no longer has to mean “the ZIP on WordPress.org went
				bad.” It can mean “the plugin phoned home, and home was having a worse day than you were.”
&lt;/p&gt; &lt;h2&gt;What we take from it at BugShield&lt;/h2&gt; &lt;p&gt;
No platform can guarantee that a vendor’s external systems will never be compromised. A popular
				plugin and a normal-looking dashboard should not stop us from investigating when new security
				information appears.
&lt;/p&gt; &lt;p&gt;
On Shield plans,  &lt;a href=&quot;https://bugshield.co.uk/wordpress-plugin-update-service&quot;&gt;managed plugin updates&lt;/a&gt; are not “click Update All and
				leave.” They sit next to  &lt;a href=&quot;https://bugshield.co.uk/monitoring&quot;&gt;monitoring&lt;/a&gt;,  &lt;a href=&quot;https://bugshield.co.uk/backups&quot;&gt;backups&lt;/a&gt;, and a human who can check users and  &lt;code&gt;mu-plugins&lt;/code&gt; when a campaign like this lands. Shield Pro adds malware scanning on top.
				If you only need the cleanup,  &lt;a href=&quot;https://bugshield.co.uk/one-off&quot;&gt;request a one-off fix&lt;/a&gt; or go straight to  &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt;malware removal&lt;/a&gt;.
&lt;/p&gt; &lt;p&gt;
If you ran a BdThemes plugin this summer, do the user and &lt;code&gt;mu-plugins&lt;/code&gt; check today. The
				feed is clean. That does not mean the site is.
&lt;/p&gt;   &lt;h2&gt; Quick answers about the BdThemes attack &lt;/h2&gt;    &lt;h3&gt; Which BdThemes plugins were linked to this supply chain attack?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;The reported list includes Element Pack, Prime Slider, Pixel Gallery, Ultimate Post Kit, Ultimate Store Kit, Live Copy Paste and Smart Admin Assistant. Free and premium editions should both be checked where the shared banner code was present.&lt;/p&gt;  &lt;h3&gt; Were the plugin files on WordPress.org infected?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;The first stage came from a poisoned promotional JSON feed rather than a changed plugin ZIP. That is why a normal file integrity check could show clean plugin files while an administrator&amp;apos;s browser still received the malicious script.&lt;/p&gt;  &lt;h3&gt; Does a clean vendor feed mean my site is safe now?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;No. Cleaning the feed stops that route from delivering new payloads, but it does not remove a rogue administrator, fake plugin or backdoor that was already added to a site.&lt;/p&gt;  &lt;h3&gt; What signs of compromise should I look for?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Check for administrators you did not create, especially usernames beginning with bd_, unfamiliar plugin folders, unexpected files under wp-content/mu-plugins, and the database options named in the article. Use the database or WP-CLI if the Users screen looks incomplete.&lt;/p&gt;  &lt;h3&gt; What should I do if I find a rogue administrator or webshell?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Keep a secure copy for investigation, then arrange a full cleanup of the users, files, database and original entry point. Reset administrator passwords and rotate hosting, database and other site credentials as part of that work.&lt;/p&gt;         &lt;p&gt;Originally published on &lt;a href=&quot;https://bugshield.co.uk/blog/wordpress-plugin-supply-chain-attack&quot;&gt;BugShield&lt;/a&gt;.&lt;/p&gt;</content:encoded><pubDate>Wed, 12 Aug 2026 00:00:00 GMT</pubDate><atom:updated>2026-09-02T00:00:00.000Z</atom:updated><category>Security</category></item><item><title>WordPress XSS2Shell: what it is, who is at risk, and how to check</title><link>https://bugshield.co.uk/blog/wordpress-xss2shell</link><guid isPermaLink="true">https://bugshield.co.uk/blog/wordpress-xss2shell</guid><description>WordPress XSS2Shell (CVE-2026-64638) is a login XSS that can lead to RCE. See who is at risk, patched versions, and check your site with our free tool.</description><content:encoded>&lt;p&gt; &lt;strong&gt;WordPress XSS2Shell&lt;/strong&gt; (CVE-2026-64638) is the kind of WordPress bug you want closed the same day
				it lands: XSS on the login page that can stretch into remote code execution if an admin gets pulled into
				the chain. Here is what it is, who is at risk, how to check your site, and what to do next. Our customers
				get WordPress security updates applied quickly. This post shares the same steps for everyone else.
&lt;/p&gt;       Free WordPress XSS2Shell checker    
Check the public login-page response for XSS2Shell behaviour, with version detection as a fallback.
  &lt;a href=&quot;https://bugshield.co.uk/tools/xss2shell&quot;&gt; Open the XSS2Shell checker  &lt;/a&gt;    &lt;h2&gt;What WordPress XSS2Shell is&lt;/h2&gt; &lt;p&gt;
WordPress XSS2Shell is built into WordPress itself, not a random plugin problem. That is the uncomfortable part. Default
				WordPress installs were in scope. You did not need a shady extension sitting next to WooCommerce for this
				one to apply.
&lt;/p&gt; &lt;p&gt;
It starts on the ordinary login screen at &lt;code&gt;wp-login.php&lt;/code&gt;. Someone posts a username that does
				not exist. WordPress helpfully puts that username into the error message. With the right payload, enough
				dangerous markup survives the first clean-up and later gets treated as allowed HTML. Your browser then
				renders attacker-controlled elements on a page that still looks like your site’s login page.
&lt;/p&gt; &lt;p&gt;
That alone is XSS in the WordPress origin, which is already bad. The research that named XSS2Shell went
				further. If a logged-in &lt;strong&gt;administrator&lt;/strong&gt; walks into the trap, an attacker can create an
				Application Password as that admin, talk to the REST API, upload a plugin ZIP, and run PHP as the web
				server user.
&lt;/p&gt; &lt;p&gt;
When people write “full remote code execution on the underlying server,” this is what they mean. Usually
				that shell is &lt;code&gt;www-data&lt;/code&gt; (or whatever user PHP runs as on your host). That is enough to read  &lt;code&gt;wp-config.php&lt;/code&gt;, dump the database, and plant a backdoor that is easy to miss.
&lt;/p&gt; &lt;h2&gt;Who is at risk from WordPress XSS2Shell&lt;/h2&gt; &lt;p&gt;
Anyone still on an unpatched WordPress build when this shipped. The XSS piece does not need a WordPress
				account. Getting all the way to RCE does need an admin session in the mix, usually through a phishing
				link while someone is already signed into wp-admin.
&lt;/p&gt; &lt;p&gt;
An attacker still needs an administrator to interact with the malicious page, but that does not make
				the issue harmless. Admins click links, shared logins are common, and office laptops often stay signed
				in. These everyday habits make the risk realistic, so make sure your site is running a patched
				WordPress version.
&lt;/p&gt; &lt;h2&gt;How the WordPress XSS2Shell attack works&lt;/h2&gt; &lt;p&gt;You do not need the full research write-up to defend yourself. This is the shape of it:&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;strong&gt;Failed login XSS.&lt;/strong&gt; An attacker submits a crafted username to your login page.
					WordPress reflects it into the error UI.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Attacker code on your login page.&lt;/strong&gt; The injected markup works with WordPress’s own
					scripts, so malicious JavaScript runs under your domain.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Admin API access.&lt;/strong&gt; If an administrator hits the trap while logged in, an Application
					Password can be created and handed to the attacker.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Plugin upload, then PHP.&lt;/strong&gt; With that access, a ZIP lands under  &lt;code&gt;wp-content/plugins&lt;/code&gt;. Those PHP files are reachable even if nobody clicks Activate.
&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;
The takeaway is simple: skip WordPress updates, and you leave that first door on the latch.
&lt;/p&gt; &lt;h2&gt;What to do about WordPress XSS2Shell today&lt;/h2&gt; &lt;ol&gt; &lt;li&gt; &lt;strong&gt;Update WordPress&lt;/strong&gt; to the newest release available for your installation. Version 7.0.3 was the first fix on that branch for XSS2Shell, not a current update target. Take a backup and arrange prompt testing and installation of the update.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Confirm what is actually running.&lt;/strong&gt; Check &lt;strong&gt;Dashboard &amp;gt; Updates&lt;/strong&gt; or the admin footer.
					Caches and managed WordPress panels sometimes tell a happier story than the files on disk. Or use
					our &lt;a href=&quot;https://bugshield.co.uk/tools/xss2shell&quot;&gt;free WordPress XSS2Shell checker&lt;/a&gt;.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;If you were late to the update&lt;/strong&gt;, do a quick tidy: revoke Application Passwords you do
					not recognise, glance at Administrator users, and peek under &lt;code&gt;wp-content/plugins&lt;/code&gt; for
					folders you never installed. Change admin passwords if anything feels off. If you want a proper cleanup
					rather than a DIY scan, our  &lt;a href=&quot;https://bugshield.co.uk/wordpress-malware-removal&quot;&gt;WordPress malware removal&lt;/a&gt; service covers that.
&lt;/li&gt; &lt;li&gt; &lt;strong&gt;Take a clean backup after you patch&lt;/strong&gt;, so a later cleanup does not restore from a copy
					made while things were still messy.
&lt;/li&gt; &lt;/ol&gt; &lt;h2&gt;Patched WordPress versions for XSS2Shell&lt;/h2&gt; &lt;p&gt;
WordPress fixed XSS2Shell in &lt;strong&gt;7.0.3&lt;/strong&gt; and pushed the fix back through maintained branches
				to 4.7. Sitting on 6.8 or 6.9 is not enough. You need the patch level for that branch.
&lt;/p&gt; &lt;p&gt;These are historical minimums for XSS2Shell. Later releases fix additional vulnerabilities, including the &lt;a href=&quot;https://wordpress.org/news/2026/10/wordpress-7-1-3-maintenance-and-security-release/&quot; rel=&quot;noopener noreferrer&quot;&gt;WordPress 7.1.3 security release&lt;/a&gt;. Install the latest available release. Original patch examples:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;7.0.x: 7.0.3&lt;/li&gt; &lt;li&gt;6.9.x: 6.9.6&lt;/li&gt; &lt;li&gt;6.8.x: 6.8.7&lt;/li&gt; &lt;li&gt;6.7.x: 6.7.6&lt;/li&gt; &lt;li&gt;Older maintained branches continue down to 4.7.34&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;
The full table is on the  &lt;a href=&quot;https://bugshield.co.uk/tools/xss2shell&quot;&gt;WordPress XSS2Shell checker&lt;/a&gt;. If your host manages WordPress updates,
				it is still worth confirming that the latest security release has been installed.
&lt;/p&gt; &lt;h2&gt;Free WordPress XSS2Shell checker&lt;/h2&gt; &lt;p&gt;
The free checker sends a non-destructive failed-login probe and looks for the response associated with this flaw. It uses a publicly detected WordPress version as a fallback. Only check websites you own or have permission to assess.
&lt;/p&gt; &lt;p&gt;
The check does not sign in, create users, upload plugins or execute the later remote-code attack. A result indicating no detected vulnerability applies only to this specific check. It cannot prove that the website is free of other vulnerabilities or that a past compromise never occurred.
&lt;/p&gt; &lt;h2&gt;What “Unknown” should mean to you&lt;/h2&gt; &lt;p&gt;
An Unknown result means the check did not produce a usable answer. A firewall, hidden login address or connection failure can prevent completion. Confirm the installed version under &lt;strong&gt;Dashboard &amp;gt; Updates&lt;/strong&gt;, or ask your host to verify it. A missing result is not evidence that the site is protected.
&lt;/p&gt; &lt;h2&gt;After you patch: a short compromise checklist&lt;/h2&gt; &lt;p&gt;
If the site sat unpatched for a while after WordPress XSS2Shell went public, a five-minute review is worth
				it:
&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Application Passwords: revoke anything you do not recognise on each admin.&lt;/li&gt; &lt;li&gt;Users: remove mystery Administrator accounts; check your own admin email still looks right.&lt;/li&gt; &lt;li&gt;Plugins: delete folders you did not put there, including inactive ones.&lt;/li&gt; &lt;li&gt;Must-use plugins under &lt;code&gt;wp-content/mu-plugins&lt;/code&gt;, if you use that folder.&lt;/li&gt; &lt;li&gt;Odd file dates around the disclosure window, if your host or backups show them.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;
If something looks wrong, stop poking and get a human on the site. Half-cleaning a web shell usually means
				you get to clean it again later.
&lt;/p&gt; &lt;h2&gt;WordPress XSS2Shell and BugShield&lt;/h2&gt; &lt;p&gt;
Moments like WordPress XSS2Shell are why “we will update next month” keeps ending badly. BugShield is
				there for the days something actually breaks, and for the quieter work that keeps a site watched:  &lt;a href=&quot;https://bugshield.co.uk/monitoring&quot;&gt;monitoring&lt;/a&gt;, &lt;a href=&quot;https://bugshield.co.uk/backups&quot;&gt;backups&lt;/a&gt;, and  &lt;a href=&quot;https://bugshield.co.uk/security&quot;&gt;security habits&lt;/a&gt; in one place, with an encrypted Password Vault so you are not
				emailing logins around during an incident.
&lt;/p&gt; &lt;p&gt;
Need someone to dig through a site that may have been exposed?  &lt;a href=&quot;https://bugshield.co.uk/one-off&quot;&gt;Request a one-off fix&lt;/a&gt; or look at a  &lt;a href=&quot;https://bugshield.co.uk/pricing&quot;&gt;Shield plan&lt;/a&gt;. Only need the XSS2Shell check right now?
&lt;/p&gt; &lt;p&gt; &lt;a href=&quot;https://bugshield.co.uk/tools/xss2shell&quot;&gt;Check your site for WordPress XSS2Shell&lt;/a&gt; &lt;/p&gt;   &lt;h2&gt; Quick answers about WordPress XSS2Shell &lt;/h2&gt;    &lt;h3&gt; Is WordPress XSS2Shell a plugin vulnerability?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;No. XSS2Shell is a WordPress core vulnerability, so a site could be exposed even if all of its plugins were fully updated.&lt;/p&gt;  &lt;h3&gt; Can XSS2Shell be exploited without logging in?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;The login-page XSS can be triggered without an account. Turning that into remote code execution also needs a logged-in administrator to encounter the malicious content.&lt;/p&gt;  &lt;h3&gt; Which WordPress versions contain the XSS2Shell fix?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;The fix arrived in WordPress 7.0.3 and matching security releases for older branches, including backports through 4.7.34. These are historical patch levels. Install the latest available WordPress release to include subsequent security fixes.&lt;/p&gt;  &lt;h3&gt; What does Unknown mean in the free XSS2Shell checker?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Unknown means the check did not produce a usable answer, for example because access was blocked or the connection failed. It is not evidence of protection. Confirm the installed version in your WordPress dashboard or ask your host to check it.&lt;/p&gt;  &lt;h3&gt; Do I need to check anything after updating WordPress?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;If the site remained unpatched after the issue became public, review Application Passwords, administrator accounts, plugins and must-use plugins. Updating closes the vulnerability, but it cannot undo changes that may already have happened.&lt;/p&gt;         &lt;p&gt;Originally published on &lt;a href=&quot;https://bugshield.co.uk/blog/wordpress-xss2shell&quot;&gt;BugShield&lt;/a&gt;.&lt;/p&gt;</content:encoded><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate><atom:updated>2026-10-09T00:00:00.000Z</atom:updated><category>Security</category></item><item><title>Account security first: 2FA and Active Sessions on BugShield</title><link>https://bugshield.co.uk/blog/bugshield-account-security-2fa-active-sessions</link><guid isPermaLink="true">https://bugshield.co.uk/blog/bugshield-account-security-2fa-active-sessions</guid><description>WordPress security is not only plugins and scans. Optional authenticator 2FA and Active Sessions help lock down the BugShield account that holds your sites and vault.</description><content:encoded>&lt;p&gt;
WordPress security includes protecting the account you use to manage your site. Your BugShield account
				provides access to your domains, fix requests, and encrypted  &lt;a href=&quot;https://bugshield.co.uk/security&quot;&gt;Password Vault&lt;/a&gt;, which
				is why two-factor authentication and active-session controls matter.
&lt;/p&gt;   &lt;h2&gt;Security starts with the BugShield account&lt;/h2&gt; &lt;p&gt;
BugShield exists so you can hand a broken site to a developer without emailing passwords into thin
				air. Credentials live in an encrypted vault tied to the site. Fixes are tracked. Access is logged.
&lt;/p&gt; &lt;p&gt;
None of that holds up if your BugShield login is easy to borrow. A strong password is still the
				foundation. What we have shipped now is a way to make that login harder to steal, without forcing
				every account into a heavier routine on day one.
&lt;/p&gt; &lt;h2&gt;Optional two-factor authentication&lt;/h2&gt; &lt;p&gt;
Two-factor authentication is available under &lt;strong&gt;Settings &amp;gt; Security&lt;/strong&gt;, and it stays off
				until you decide otherwise. When you turn it on, you pair BugShield with an authenticator app you already trust (Google
				Authenticator, Authy, 1Password, or any standard TOTP app), confirm with a six-digit code, and keep a
				set of one-time backup codes somewhere safe for the day your phone is not nearby.
&lt;/p&gt; &lt;p&gt;
From then on, signing in means your password plus a code from the app. Lose the phone and you still
				have those backup codes. We deliberately skip SMS. Text messages are easier to intercept, and
				authenticator apps are simply the clearer standard for protecting an account that holds this much.
&lt;/p&gt; &lt;p&gt;
If you change your mind later, you can turn 2FA off again with your password and a valid code. Some
				people will enable it the same afternoon. Others will wait until their sites and vault are set up.
				Both are fine. The protection is there whenever you want it.
&lt;/p&gt; &lt;h2&gt;Active Sessions&lt;/h2&gt; &lt;p&gt;
Active Sessions is for the other half of the problem: not just how you sign in, but where you are
				still signed in.
&lt;/p&gt; &lt;p&gt;
Active Sessions shows the browsers and devices signed in to your account, along with their approximate
				location and recent activity. Your current device is clearly labelled, and you can securely sign out
				an older or unfamiliar session whenever needed.
&lt;/p&gt; &lt;p&gt;
Left yourself logged in on a shared laptop? You can sign out that session without needing to reset
				your password. Spot a login you do not recognise? Revoke it straight away, and change your
				password too. That second step matters. A strange session is a warning, not a full clean-up on its
				own.
&lt;/p&gt; &lt;p&gt;
Locations are approximate and are intended to help you recognise familiar sign-ins rather than show
				an exact position.
&lt;/p&gt; &lt;h2&gt;How this fits the rest of BugShield security&lt;/h2&gt; &lt;p&gt;These updates sit with the rest of how we look after WordPress:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;
An encrypted  &lt;a href=&quot;https://bugshield.co.uk/security&quot;&gt;Password Vault&lt;/a&gt;  for site credentials, with access logging
&lt;/li&gt; &lt;li&gt;
Controlled developer access during a  &lt;a href=&quot;https://bugshield.co.uk/one-off&quot;&gt;fix&lt;/a&gt;, instead of
					passwords floating around inboxes
&lt;/li&gt; &lt;li&gt; &lt;a href=&quot;https://bugshield.co.uk/monitoring&quot;&gt;Monitoring&lt;/a&gt;,  &lt;a href=&quot;https://bugshield.co.uk/backups&quot;&gt;backups&lt;/a&gt;, and  &lt;a href=&quot;https://bugshield.co.uk/maintenance&quot;&gt;maintenance plans&lt;/a&gt;  that catch problems early
&lt;/li&gt; &lt;li&gt;Clear activity history so you can see what happened on a site&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;
2FA and session control tighten the front door. The vault, monitoring, and fix workflow protect what
				sits behind it. The idea is simple: everything that touches your website should be handled securely,
				starting with the BugShield account that owns it.
&lt;/p&gt; &lt;h2&gt;A small habit worth building&lt;/h2&gt; &lt;p&gt;
Next time you are in the dashboard, open Security settings. If authenticator 2FA feels right for how
				you work, turn it on and store the backup codes somewhere you will actually find them. While you are
				there, glance at Active Sessions and sign out anything that does not look like you.
&lt;/p&gt; &lt;p&gt;
If you run an  &lt;a href=&quot;https://bugshield.co.uk/wordpress-care-plans-for-agencies&quot;&gt;agency&lt;/a&gt;  or look after several client sites, this is especially worth doing. The more sites and credentials
				sit behind one login, the more that login is worth protecting.
&lt;/p&gt; &lt;p&gt;
Website security is not only plugins and scans. It is also who can open the door. We will keep
				hardening that door as BugShield grows. To review these options,  &lt;a href=&quot;https://app.bugshield.co.uk/auth/login&quot; rel=&quot;noopener noreferrer&quot;&gt;sign in to BugShield&lt;/a&gt;  and open Security settings.
&lt;/p&gt;   &lt;h2&gt; Quick answers about BugShield account security &lt;/h2&gt;    &lt;h3&gt; Is two-factor authentication required on BugShield?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;No. Authenticator-based two-factor authentication is optional, and you can enable it from Settings &amp;gt; Security whenever you are ready.&lt;/p&gt;  &lt;h3&gt; Which type of authenticator app can I use?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;You can use any authenticator app that supports standard time-based one-time passwords, often shortened to TOTP. BugShield does not rely on text-message codes.&lt;/p&gt;  &lt;h3&gt; What happens if I lose the phone used for 2FA?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Use one of the one-time backup codes created when you enabled 2FA. Keep those codes somewhere secure and separate from the device that holds your authenticator app.&lt;/p&gt;  &lt;h3&gt; What information appears under Active Sessions?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Active Sessions shows the browsers and devices currently signed into your account, when each was last active and an approximate location. Your current device is clearly labelled.&lt;/p&gt;  &lt;h3&gt; What should I do if I do not recognise a session?  &lt;i&gt;&lt;/i&gt;  &lt;/h3&gt; &lt;p&gt;Sign out that session, then change your BugShield password. The location is only an estimate, but an unfamiliar device or activity time is still worth checking.&lt;/p&gt;         &lt;p&gt;Originally published on &lt;a href=&quot;https://bugshield.co.uk/blog/bugshield-account-security-2fa-active-sessions&quot;&gt;BugShield&lt;/a&gt;.&lt;/p&gt;</content:encoded><pubDate>Fri, 07 Aug 2026 00:00:00 GMT</pubDate><atom:updated>2026-09-02T00:00:00.000Z</atom:updated><category>Security</category></item></channel></rss>