Classified Listing – AI-Powered Classified ads & Business Directory <= 5.4.2 - Missing Authorization
Description
The Classified Listing – AI-Powered Classified ads & Business Directory plugin for WordPress is vulnerable to unauthorized access due to a missing capability check on a function in versions up to, and including, 5.4.2. This makes it possible for authenticated attackers, with subscriber-level access and above, to perform an unauthorized action.
CVSS Vector Breakdown
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:NTechnical Details
<=5.4.2What Changed in the Fix
Changes introduced in v5.4.3
Source Code
WordPress.org SVN# Exploitation Research Plan - CVE-2026-57355 ## 1. Vulnerability Summary The **Classified Listing – AI-Powered Classified ads & Business Directory** plugin (up to 5.4.2) is vulnerable to **Missing Authorization** in its administrative notice handling logic. Specifically, the `Rtcl\Controllers\Admi…
Show full research plan
Exploitation Research Plan - CVE-2026-57355
1. Vulnerability Summary
The Classified Listing – AI-Powered Classified ads & Business Directory plugin (up to 5.4.2) is vulnerable to Missing Authorization in its administrative notice handling logic. Specifically, the Rtcl\Controllers\Admin\NoticeController class hooks the update_rating_status function to admin_init. Because admin_init fires for every user accessing the WordPress dashboard (including low-privileged Subscribers), and because this function likely lacks a current_user_can('manage_options') check, authenticated attackers can perform unauthorized actions such as dismissing site-wide plugin notices or modifying plugin-wide "rating" metadata.
2. Attack Vector Analysis
- Endpoint:
/wp-admin/index.php(or any admin-area URL that triggersadmin_init). - HTTP Method:
GET - Action Hook:
admin_initcallsRtcl\Controllers\Admin\NoticeController::update_rating_status. - Payload Parameters:
rtcl_skip: Set to1to trigger notice dismissal.rtcl_reminder: Set to1to delay the notice.rtcl_rated: Set to1to mark the plugin as rated._wpnonce: A required nonce with the action stringrtcl_notice_nonce.
- Authentication: Required (Subscriber or higher).
- Preconditions: The "Enjoying Classified Listing?" rating notice must be active or eligible to be displayed (triggered by the plugin being active for a certain duration).
3. Code Flow
- Entry Point: A Subscriber logs into the WordPress dashboard (
/wp-admin/). - Hook Execution:
wp-admin/admin.php(and others) triggeradmin_init. - Vulnerable Handler:
Rtcl\Controllers\Admin\NoticeController::__constructregistersupdate_rating_statustoadmin_init. - Missing Check:
update_rating_status(inferred) processes$_GET['rtcl_skip']and verifies the nonce$_GET['_wpnonce']using the actionrtcl_notice_nonce. - Unauthorized Action: If the nonce is valid, the function proceeds to
update_option()to dismiss the notice for the entire site, despite the user only having Subscriber permissions.
4. Nonce Acquisition Strategy
The nonce rtcl_notice_nonce is generated within the display_admin_notice() method of NoticeController.php. This notice is hooked to admin_notices, which is visible to Subscribers on their dashboard.
Steps to obtain the nonce:
- Log in as a Subscriber.
- Navigate to
/wp-admin/index.php. - Locate the rating notice in the HTML (class
.rtcl-review-notice). - Extract the
_wpnoncevalue from the "No Thanks" or "Already Rated!" links.
Automated Extraction (browser_eval):
// Locate the 'No Thanks' link which contains the dismissal parameters and nonce
const dismissalLink = document.querySelector('.rtcl-review-notice a[href*="rtcl_skip=1"]')?.href;
if (dismissalLink) {
const urlParams = new URLSearchParams(new URL(dismissalLink).search);
console.log(urlParams.get('_wpnonce'));
}
5. Exploitation Strategy
Step 1: Triggering the Site-Wide Dismissal
Once the nonce is acquired, the Subscriber sends a request to trigger the dismissal for all users.
- Tool:
http_request - Method:
GET - URL:
http://vulnerable-site.com/wp-admin/index.php?rtcl_skip=1&_wpnonce=[EXTRACTED_NONCE] - Headers:
Cookie: [Subscriber Session Cookies]
Step 2: Verification
As an Administrator, navigate to the dashboard. The rating notice, which should have been visible, will now be gone site-wide because the plugin option (e.g., rtcl_rating_notice_dismissed) has been updated.
6. Test Data Setup
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.