CVE-2026-0950

Spectra Gutenberg Blocks <= 2.19.17 - Unauthenticated Information Disclosure in Sensitive Data

mediumExposure of Sensitive Information to an Unauthorized Actor
5.3
CVSS Score
5.3
CVSS Score
medium
Severity
2.19.18
Patched in
1d
Time to patch

Description

The Spectra Gutenberg Blocks – Website Builder for the Block Editor plugin for WordPress is vulnerable to Information Disclosure in all versions up to, and including, 2.19.17. This is due to the plugin failing to check `post_password_required()` before rendering post excerpts in the `render_excerpt()` function and the `uagb_get_excerpt()` helper function. This makes it possible for unauthenticated attackers to read excerpts of password-protected posts by simply viewing any page that contains a Spectra Post Grid, Post Masonry, Post Carousel, or Post Timeline block.

CVSS Vector Breakdown

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Low
Confidentiality
None
Integrity
None
Availability

Technical Details

Affected versions<=2.19.17
PublishedFebruary 2, 2026
Last updatedFebruary 3, 2026

Source Code

WordPress.org SVN
Research Plan
Unverified

# Exploitation Research Plan: CVE-2026-0950 ## 1. Vulnerability Summary The **Spectra Gutenberg Blocks** plugin (up to version 2.19.17) contains an unauthenticated information disclosure vulnerability. The plugin provides several "Post" blocks (Grid, Masonry, Carousel, Timeline) that display lists …

Show full research plan

Exploitation Research Plan: CVE-2026-0950

1. Vulnerability Summary

The Spectra Gutenberg Blocks plugin (up to version 2.19.17) contains an unauthenticated information disclosure vulnerability. The plugin provides several "Post" blocks (Grid, Masonry, Carousel, Timeline) that display lists of WordPress posts. When rendering these blocks, the plugin manually retrieves and displays post excerpts via the functions render_excerpt() and uagb_get_excerpt().

The vulnerability exists because these functions do not call the native WordPress function post_password_required(). Consequently, even if a post is password-protected, its excerpt is rendered and served to unauthenticated visitors on any page where a Spectra Post block is configured to show excerpts.

2. Attack Vector Analysis

  • Endpoint: Any frontend Page or Post containing one of the following Spectra blocks:
    • Post Grid (uagb/post-grid)
    • Post Masonry (uagb/post-masonry)
    • Post Carousel (uagb/post-carousel)
    • Post Timeline (uagb/post-timeline)
  • HTTP Method: GET
  • Authentication: None (Unauthenticated).
  • Preconditions:
    1. A post exists that is Password Protected.
    2. This post has an excerpt (either a "Manual Excerpt" defined in the editor or an automatically generated one).
    3. A Spectra Post block is placed on a publicly accessible page and configured to display the password-protected post.
    4. The block's "Show Excerpt" setting is enabled (default behavior for many templates).

3. Code Flow

  1. Entry Point: An unauthenticated user requests a page containing a Spectra block (e.g., Post Grid).
  2. Block Rendering: WordPress executes the block's render_callback. For Spectra, this often points to a class method like UAGB_Post::render_html (inferred) or similar logic in classes/class-uagb-post.php.
  3. Post Loop: The plugin queries posts based on block attributes and iterates through them.
  4. Vulnerable Sink: Inside the loop, the plugin calls uagb_get_excerpt() or render_excerpt().
    • These functions typically use $post->post_excerpt or get_the_excerpt($post->ID).
    • In a secure implementation, the code should check if ( post_password_required( $post_id ) ) { return ''; }.
    • Because this check is missing, the excerpt content is appended to the block's HTML output.
  5. Response: The excerpt is sent to the browser in the final HTML.

4. Nonce Acquisition Strategy

No nonce is required for this exploit.
The vulnerability is triggered during standard frontend page rendering (Server-Side Rendering of Gutenberg blocks). Since the goal is to view a publicly accessible page to leak "protected" information, no authenticated actions or AJAX/REST requests are necessary.

5. Exploitation Strategy

Step 1: Create Protected Content

Create a post that is password protected and contains a sensitive excerpt.

Step 2: Create a Landing Page

Create a public page containing a Spectra Post Grid block configured to display the protected post.

Step 3: Trigger the Leak

Perform a simple GET request to the Landing Page and grep for the secret excerpt content.

Payload:

GET /landing-page/ HTTP/1.1
Host: localhost

Expected Response:
The HTML will contain a div or p tag with a class like uagb-post__excerpt containing the "hidden" excerpt text.

6. Test Data Setup

  1. Create Protected Post:
    wp post create --post_type=post --post_title="Sensitive Post" --post_content="This is the full secret content." --post_excerpt="CONFIDENTIAL_LEAK_DATA" --post_status=publish --post_password="Password123"
    
  2. Create Landing Page with Spectra Block:
    The Post Grid block needs to be inserted. Since manual block JSON is complex, we will use a simple query:
    # Note: Attributes must include displayPostExcerpt: true
    wp post create --post_type=page --post_title="Spectra Page" --post_status=publish --post_content='<!-- wp:uagb/post-grid {"displayPostExcerpt":true,"postsToShow":1} /-->'
    
  3. Ensure Plugin is Active:
    wp plugin activate ultimate-addons-for-gutenberg
    

7. Expected Results

  • Success: The unauthenticated GET request to /spectra-page/ returns HTML containing the string CONFIDENTIAL_LEAK_DATA.
  • Normal WordPress Behavior: If a post is password-protected, the_excerpt() should return a string like "There is no excerpt because this is a protected post." or be empty. Spectra's failure to check post_password_required() bypasses this protection.

8. Verification Steps

  1. Navigate to the page using the http_request tool:
    {
      "method": "GET",
      "url": "http://localhost:8080/spectra-page/"
    }
    
  2. Check for the presence of the excerpt in the response body.
  3. Verify the post is actually password protected:
    wp post get $(wp post list --post_type=post --title="Sensitive Post" --field=ID) --field=post_password
    

9. Alternative Approaches

If the <!-- wp:uagb/post-grid ... --> block does not render correctly via CLI creation:

  1. Use browser_navigate to http://localhost:8080/wp-admin/.
  2. Log in and manually create a page using the Gutenberg editor.
  3. Add the "Post Grid" block from the Spectra category.
  4. Ensure "Show Excerpt" is toggled ON in the right-hand settings sidebar.
  5. Publish and then visit the page unauthenticated.

If the excerpt is automatically generated (not manual), check if the first ~20 words of the post_content ("This is the full secret content") appear in the output. The vulnerability applies to both manual and auto-excerpts.

Check if your site is affected.

Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.