Atomic Edge analysis of CVE-2026-9008: A missing authorization vulnerability in the Page-list plugin for WordPress versions up to and including 6.2 allows authenticated attackers with contributor-level access or higher to disclose sensitive information from private and draft pages, as well as arbitrary post meta, via the [pagelist_ext] shortcode. The vulnerability carries a CVSS score of 4.3 (Medium).
The root cause lies in the pagelist_unqprfx_ext_shortcode() function defined in /page-list/inc/shortcode-pagelist-ext.php (lines 29-57 of the vulnerable code). The function accepted user-supplied post_status, post_type, and show_meta_key attributes directly from the shortcode without proper authorization checks. It passed these into get_pages() and get_post_meta() calls. When the current post had no child pages, the query re-issued with child_of => 0, expanding the scope to all pages on the site matching the supplied status and type. No capability check verified that the rendering user had permission to read the matched objects.
An attacker with contributor-level access or above can craft a post containing the shortcode [pagelist_ext post_status=’private,draft’ post_type=’page’ show_meta_key=’_some_meta’] and preview it. The shortcode processes these attributes without checking if the user can read private or draft pages. The get_pages() call retrieves all pages matching the status (including non-public ones), and get_post_meta() disclosure occurs for protected meta keys if the user lacks edit_others_posts capability. The WordPress AJAX handler (admin-ajax.php) with action=heartbeat or a simple preview triggers the vulnerable function.
The patch hardens three areas: (1) post_status is no longer accepted from shortcode; it is hardcoded to ‘publish’. (2) show_meta_key now requires edit_posts capability and the meta key must be registered with show_in_rest=true and not be protected. (3) The per-page read_post fallback loop was removed as unnecessary since only published pages are now retrieved. The complete removal of the post_status parameter from shortcode defaults and all wp_list_pages calls across four shortcode files prevents non-public statuses from being passed to database queries.
Exploitation allows an authenticated contributor to read titles, body content, excerpts, and arbitrary post meta of private, draft, pending, future, or even trashed pages that should be invisible to them. This constitutes a moderate information disclosure vulnerability. It does not lead to remote code execution or privilege escalation, but it can expose sensitive content such as unreleased products, internal documentation, or confidential metadata.







