{"id":"CVE-2026-109979","kind":"vulnerability","aliases":["CVE-2026-109979"],"related":[],"title":"WordPress Related Posts plugin: contributors can read titles of private posts","description":"The Related Posts for WordPress plugin for WordPress is vulnerable to Sensitive Information Exposure in versions up to, and including, 3.0.0 via the 'rp4wp_create_link' parameter of the hidden 'rp4wp_link_related' admin page. The handle_create_link() handler verifies the nonce and that the current user can edit the parent post, but never checks that the attacker-supplied child post ID is one the user is allowed to read; LinkRepository::insert() stores the arbitrary child ID without validation, and ManageLinks::render() later calls LinkRepository::get_children() in its no-extra-args fast path, which falls through to array_map('get_post', $child_ids) — bypassing read_private_posts/read_post capability checks — and then echoes esc_html($child->post_title) in the parent's editor meta box. This makes it possible for authenticated attackers, with Contributor-level access and above, to read the titles of arbitrary non-public posts (drafts, pending, private, future, trashed) authored by higher-privileged users by linking those post IDs to a draft they own and then reading the resulting meta box.","summary":"The Related Posts for WordPress plugin up to and including 3.0.0 lets a Contributor-level user link arbitrary post IDs to their own draft through a hidden admin page. The editor meta box then displays the titles of drafts, private, pending, future and trashed posts they should not be able to read.","severity":"medium","cvss":4.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["package","self-hosted","wordpress","wordpress-plugins"],"not_affected_if":["no-contributor-accounts","plugin-not-installed","plugin-version-above-3.0.0"],"how_to_check":"- Check the installed version of the Related Posts for WordPress plugin (`wp plugin get related-posts-for-wp --field=version` or the Plugins screen); versions up to and including `3.0.0` are affected.\n- Confirm the plugin is active and that the hidden `rp4wp_link_related` admin page is reachable by Contributor-level accounts.","fix":"- Update the Related Posts for WordPress plugin to a version later than `3.0.0`; the sources do not name the fixed version.\n- Until updated, deactivate the plugin or restrict Contributor accounts on the site.","status":"open","published_at":"2026-10-28T07:16:45+00:00","first_seen_at":"2026-10-28T07:31:38+00:00","triaged_at":"2026-10-28T07:33:34+00:00","updated_at":"2026-10-28T07:33:34+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-28T07:33:34Z","model":"claude-haiku-5-5","output":{"fix":"- Update the Related Posts for WordPress plugin to a version later than `3.0.0`; the sources do not name the fixed version.\n- Until updated, deactivate the plugin or restrict Contributor accounts on the site.","reach":"internet","title":"WordPress Related Posts plugin: contributors can read titles of private posts","impact":"low","summary":"The Related Posts for WordPress plugin up to and including 3.0.0 lets a Contributor-level user link arbitrary post IDs to their own draft through a hidden admin page. The editor meta box then displays the titles of drafts, private, pending, future and trashed posts they should not be able to read.","category":"package","nicknames":[],"who_cares":["wordpress","wordpress-plugins","self-hosted"],"confidence":0.7,"needs_auth":"yes","worst_case":"Authenticated contributors read titles of private and draft posts by others","analyst_note":"","how_to_check":"- Check the installed version of the Related Posts for WordPress plugin (`wp plugin get related-posts-for-wp --field=version` or the Plugins screen); versions up to and including `3.0.0` are affected.\n- Confirm the plugin is active and that the hidden `rp4wp_link_related` admin page is reachable by Contributor-level accounts.","needs_analyst":false,"not_affected_if":["plugin-not-installed","no-contributor-accounts","plugin-version-above-3.0.0"],"who_is_affected":"Sites running the Related Posts for WordPress plugin at version 3.0.0 or earlier where users with Contributor role or above can log in and edit posts. The exposure needs the plugin's admin meta box to be used on a post the attacker can edit; sites without the plugin or without Contributor-level accounts are not exposed.","user_interaction":"no","needs_special_setup":"no","severity_if_unknown":"medium"},"cost_usd":0.000681,"input_tokens":3592,"output_tokens":644,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-109979':14A,17A '-2026':13A,16A '3.0.0':36B,99C 'abl':76B 'access':218C 'admin':54B,112C 'allow':148C 'arbitrari':44B,155C,226C 'arg':173C 'array':180C 'attack':138C,213C 'attacker-suppli':137C 'authent':212C 'author':236C 'box':59B,206C,258C 'bypass':186C 'call':164C 'capabl':190C 'check':134C,191C 'child':140C,156C,184C,197C 'children':167C 'contributor':5A,40B,216C 'contributor-level':39B,215C 'creat':103C,116C 'current':125C 'cve':12A,15A 'display':61B 'draft':50B,65B,231C,249C 'echo':194C 'edit':128C 'editor':57B,204C 'esc':195C 'exposur':92C 'extra':172C 'fall':177C 'fast':174C 'futur':68B,234C 'get':166C,182C 'handl':115C 'handler':118C 'hidden':53B,108C 'higher':239C 'higher-privileg':238C 'host':21B 'html':196C 'id':46B,142C,157C,185C,246C 'includ':35B,98C 'inform':91C 'insert':152C 'later':163C 'let':37B 'level':41B,217C 'link':43B,104C,110C,117C,243C 'linkrepositori':151C,165C 'make':208C 'managelink':161C 'map':181C 'meta':58B,205C,257C 'never':133C 'no-extra-arg':170C 'non':228C 'non-publ':227C 'nonc':121C 'one':144C 'packag':18B 'page':55B,113C 'paramet':105C 'parent':130C,202C 'path':175C 'pend':67B,232C 'plugin':4A,25B,31B,84C 'possibl':210C 'post':3A,11A,28B,45B,71B,81C,131C,141C,183C,198C,230C,245C 'posts/read_post':189C 'privat':10A,66B,188C,233C 'privileg':240C 'public':229C 'read':7A,78B,150C,187C,222C,254C 'relat':2A,27B,80C,111C 'render':162C 'result':256C 'rp4wp':102C,109C 'self':20B 'self-host':19B 'sensit':90C 'store':153C 'suppli':139C 'titl':8A,63B,199C,224C 'trash':70B,235C 'user':42B,126C,146C,241C 'valid':159C 'verifi':119C 'version':94C 'via':100C 'vulner':88C 'without':158C 'wordpress':1A,22B,24B,30B,83C,86C 'wordpress-plugin':23B","nicknames":[],"mitigations":[],"who_affected":"Sites running the Related Posts for WordPress plugin at version 3.0.0 or earlier where users with Contributor role or above can log in and edit posts. The exposure needs the plugin's admin meta box to be used on a post the attacker can edit; sites without the plugin or without Contributor-level accounts are not exposed.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-28T07:16:45+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N","cvss_by":"security@wordfence.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-109979","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-109979","severity":null,"published_at":"2026-10-28T07:16:45+00:00","modified_at":"2026-10-28T07:16:45+00:00","first_seen_at":"2026-10-28T07:31:38+00:00","fetched_at":"2026-10-28T07:31:38+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}