[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$flp7-zcuYsghtNaXhcTOXqiQn7p9P6XKqGSbXJ7H5CTQ":3},{"id":4,"url_slug":5,"title":6,"description":7,"plugin_slug":8,"theme_slug":9,"affected_versions":10,"patched_in_version":11,"severity":12,"cvss_score":13,"cvss_vector":14,"vuln_type":15,"published_date":16,"updated_date":17,"references":18,"days_to_patch":20,"patch_diff_files":21,"patch_trac_url":9,"research_status":29,"research_verified":30,"research_rounds_completed":31,"research_plan":32,"research_summary":33,"research_vulnerable_code":34,"research_fix_diff":35,"research_exploit_outline":36,"research_model_used":37,"research_started_at":38,"research_completed_at":39,"research_error":9,"poc_status":9,"poc_video_id":9,"poc_summary":9,"poc_steps":9,"poc_tested_at":9,"poc_wp_version":9,"poc_php_version":9,"poc_playwright_script":9,"poc_exploit_code":9,"poc_has_trace":30,"poc_model_used":9,"poc_verification_depth":9,"poc_exploit_code_gated":30,"source_links":40},"CVE-2026-0894","content-blocks-custom-post-widget-authenticated-author-stored-cross-site-scripting-via-contentblock-shortcode","Content Blocks (Custom Post Widget) \u003C= 3.3.9 - Authenticated (Author+) Stored Cross-Site Scripting via content_block Shortcode","The Content Blocks (Custom Post Widget) plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the plugin's content_block shortcode in all versions up to, and including, 3.3.9 due to insufficient input sanitization and output escaping on user supplied values consumed from user-created content blocks. This makes it possible for authenticated attackers, with contributor-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page.","custom-post-widget",null,"\u003C=3.3.9","3.4.1","medium",6.4,"CVSS:3.1\u002FAV:N\u002FAC:L\u002FPR:L\u002FUI:N\u002FS:C\u002FC:L\u002FI:L\u002FA:N","Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')","2026-04-17 21:21:37","2026-04-18 09:26:54",[19],"https:\u002F\u002Fwww.wordfence.com\u002Fthreat-intel\u002Fvulnerabilities\u002Fid\u002F246dee15-82e0-4630-8d95-d2419e9eaef8?source=api-prod",1,[22,23,24,25,26,27,28],"assets\u002Fjs\u002Fclipboard.js","assets\u002Fjs\u002Fclipboard.min.js","custom-post-widget.php","meta-box.php","popup.php","post-type.php","readme.txt","researched",false,3," look at `custom-post-widget.php` line 154 again.\n    *   `$content = apply_filters( 'the_content', $post->post_content );`\n    *   This is the code for `cpw_content_block` shortcode.\n    *   If the vulnerability is in the *other* shortcode `content_block` (defined in `shortcode.php`), and that one *doesn't* use `apply_filters`.\n\n    *   Let's assume the `title_tag` injection is the primary vector because it allows an Author to use a perfectly safe Post Title as the body of an injected `\u003Cscript>` tag.\n\n    1.  Vulnerability Summary.\n    2.  Attack Vector Analysis (Author+).\n    3.  Code Flow (Inferred `shortcode.php`).\n    4.  Nonce Strategy (None for shortcode usage).\n    5.  Exploitation Strategy (Step-by-step).\n    6.  Test Data Setup.\n    7.  Expected Results.\n    8.  Verification.\n\n    I will use `title_tag` as the primary exploit candidate and `class` as the alternative.\n\n    One more check: \"insufficient input sanitization and output escaping on user supplied values **consumed from user-created content blocks**.\"\n    This wording is very specific.\n    If the Author creates a block and fills in the `_content_block_information` field.\n    If the short","The Content Blocks plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the `content_block` shortcode. An authenticated attacker can manipulate the `markup` attribute to inject unauthorized HTML tags such as `\u003Cscript>`, which causes the content of a linked content block to be executed as JavaScript in the victim's browser.","\u002F\u002F shortcode.php line 31\n$markup = sanitize_text_field ( $params['markup'] );\n\n---\n\n\u002F\u002F shortcode.php line 69\n$content = '\u003C' . $markup . ' class=\"' . $class . '\" id=\"custom_post_widget-' . $id . '\">';\nif ( $show_post_title == 'yes' ) {\n    $content .= '\u003C' . $title_tag . ' class=\"custom_post_widget_title\">' . $post -> post_title . '\u003C\u002F' . $title_tag . '>';\n}\n$content .= apply_filters( 'the_content', $post -> post_content );\n\n\u002F\u002F ...\n\n$content .= '\u003C\u002F' . $markup . '>';","diff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Fcustom-post-widget\u002F3.3.9\u002Fshortcode.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Fcustom-post-widget\u002F3.4.1\u002Fshortcode.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Fcustom-post-widget\u002F3.3.9\u002Fshortcode.php\t2024-09-06 11:09:32.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Fcustom-post-widget\u002F3.4.1\u002Fshortcode.php\t2026-01-27 13:29:16.000000000 +0000\n@@ -1,5 +1,7 @@\n \u003C?php\n \n+if ( ! defined( 'ABSPATH' ) ) exit;\n+\n \u002F\u002F Add the ability to display the content block in a reqular post using a shortcode\n function custom_post_widget_shortcode ( $atts ) {\n \t$params = shortcode_atts ( array (\n@@ -28,7 +30,11 @@\n \tif ( ! in_array( $title_tag, $allowed_tags ) ) {\n \t\t$title_tag = 'h3'; \u002F\u002F Default to 'h3' if the specified tag is not allowed\n \t}\n-\t$markup = sanitize_text_field ( $params['markup'] );\n+\t$markup = strtolower( sanitize_text_field( $params['markup'] ) );\n+\t$allowed_markup_tags = array( 'div', 'section', 'article', 'aside', 'header', 'footer', 'main', 'span', 'p' );\n+\tif ( ! in_array( $markup, $allowed_markup_tags, true ) ) {\n+\t\t$markup = 'div';\n+\t}\n \t$template = sanitize_text_field ( $params['template'] );\n \n \tif ( $slug ) {","1. Login as an authenticated user with Contributor-level access or higher.\n2. Create a new 'Content Block' post (post_type: `content_block`). Set the content of this block to the JavaScript payload (e.g., `alert(origin)`). Note the post ID of this block.\n3. Create or edit a standard post or page.\n4. Insert the shortcode `[content_block id=YOUR_BLOCK_ID markup=\"script\"]` into the editor.\n5. Publish or preview the post. \n6. The plugin's shortcode handler will output the block content wrapped in `\u003Cscript>` tags instead of the intended `\u003Cdiv>` tags, causing the browser to execute the content as JavaScript.","gemini-3-flash-preview","2026-04-20 13:14:09","2026-04-20 13:15:10",{"type":41,"vulnerable_version":42,"fixed_version":11,"vulnerable_browse":43,"vulnerable_zip":44,"fixed_browse":45,"fixed_zip":46,"all_tags":47},"plugin","3.3.9","https:\u002F\u002Fplugins.trac.wordpress.org\u002Fbrowser\u002Fcustom-post-widget\u002Ftags\u002F3.3.9","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fcustom-post-widget.3.3.9.zip","https:\u002F\u002Fplugins.trac.wordpress.org\u002Fbrowser\u002Fcustom-post-widget\u002Ftags\u002F3.4.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fcustom-post-widget.3.4.1.zip","https:\u002F\u002Fplugins.trac.wordpress.org\u002Fbrowser\u002Fcustom-post-widget\u002Ftags"]