☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Mautic logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 7.1 🐛 CWE-89
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2026-4776

CVE-2026-4776 SQL Injection in Mautic
📅 PUBLISHED: 2026-05-29 08:16 UTC 🔄 UPDATED: 2026-09-23 20:23 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: LIKELY — 2 independent sources confirm fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.22%
👁️
0.22% probability
5.6× 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.
Country: United States License: Open Source
Patch available — upgrade to latest release
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
7.1
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2026-4776 is a critical SQL injection vulnerability in Mautic's API contact filtering mechanism. The flaw arises from insufficient recursive sanitization of nested query parameters, allowing an authenticated API user to bypass input filtering and inject arbitrary SQL commands. With a CVSS score of 7.1, this vulnerability poses a high risk to confidentiality, integrity, and availability. No public proof-of-concept (PoC) or patch is currently available, and the EPSS score is 0.0%, indicating low exploitation likelihood at this time. However, given the nature of the vulnerability, it is imperative to implement mitigations immediately.

⚡ 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

CVSS Breakdown & Threat Level

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

Threat Level: High. An authenticated attacker can execute arbitrary SQL commands, potentially leading to data exfiltration, modification, or denial of service.

Deep Dive & Mechanics

The vulnerability exists in Mautic's API endpoint that handles contact filtering. The API accepts nested query parameters to filter contacts based on various criteria. The input sanitization function recursively processes these parameters but fails to properly sanitize deeply nested structures. An attacker can craft a malicious payload that bypasses the sanitization by nesting SQL injection strings within multiple layers of parameters.

Root Cause: The recursive sanitization function does not handle all possible nesting depths or combinations of parameter types. Specifically, it fails to escape or validate strings within arrays or objects that are passed as query parameters.

Attack Vector: An authenticated API user sends a specially crafted HTTP request to the contact filtering endpoint. The request includes nested parameters containing SQL injection payloads. The server processes these parameters without proper sanitization, allowing the injection to execute.

Impact: Successful exploitation can lead to:

  • Unauthorized access to sensitive data (e.g., user credentials, contact details)
  • Modification or deletion of database records
  • Potential escalation to remote code execution (RCE) if the database user has sufficient privileges

Vulnerable vs. Patched Code

Since no patch is available, the following is a hypothetical comparison based on the vulnerability description.

Vulnerable Code (PHP-like pseudocode):

function sanitizeInput($input) {
    if (is_array($input)) {
        foreach ($input as $key => $value) {
            $input[$key] = sanitizeInput($value);
        }
        return $input;
    } else {
        // Only sanitizes top-level strings
        return addslashes($input);
    }
}

// API endpoint
$filters = $_GET['filters'];
$sanitizedFilters = sanitizeInput($filters);
$query = "SELECT * FROM contacts WHERE " . buildWhereClause($sanitizedFilters);

Patched Code (Hypothetical):

function sanitizeInput($input) {
    if (is_array($input)) {
        foreach ($input as $key => $value) {
            $input[$key] = sanitizeInput($value);
        }
        return $input;
    } else {
        // Use parameterized queries or prepared statements
        return $input; // Not directly used in SQL
    }
}

// API endpoint using prepared statements
$filters = $_GET['filters'];
$sanitizedFilters = sanitizeInput($filters);
$stmt = $pdo->prepare("SELECT * FROM contacts WHERE " . buildWhereClausePlaceholders($sanitizedFilters));
$stmt->execute($sanitizedFilters);

Exploitation & Lab Setup

Red Team (Offensive)

Prerequisites:

  • Valid API credentials (username/password or API key)
  • Network access to the Mautic instance

Exploitation Steps:

  1. Identify the vulnerable endpoint: Typically /api/contacts?filters[...]
  2. Craft a malicious payload: Nest SQL injection strings within multiple array levels. Example: filters[0][where][0][col]=id&filters[0][where][0][expr]=eq&filters[0][where][0][val]=1 UNION SELECT ...
  3. Send the request: Use curl or a scripting language.
    curl -X GET "https://target.com/api/contacts?filters[0][where][0][col]=id&filters[0][where][0][expr]=eq&filters[0][where][0][val]=1' UNION SELECT username,password FROM users--"
    -H "Authorization: Bearer <API_KEY>"
    
  4. Extract data: Analyze the response for injected data.

Note: No public exploit code is available. The above is a conceptual example.

Blue Team (Defensive)

Detection:

  • Monitor API logs for unusual nested parameter patterns.
  • Look for SQL keywords (UNION, SELECT, DROP) in query parameters.
  • Use a Web Application Firewall (WAF) to block SQL injection attempts.

Mitigation:

  • Implement input validation using a whitelist approach.
  • Use parameterized queries or prepared statements.
  • Apply the principle of least privilege to database users.
  • Monitor for anomalous database queries.

Indicators of Compromise (IOCs)

  • Network IOCs:

    • HTTP requests to /api/contacts with deeply nested parameters (e.g., filters[0][where][0][val])
    • Requests containing SQL keywords in parameter values
    • Unusual response sizes or error messages indicating SQL syntax errors
  • Host IOCs:

    • Database logs showing unexpected queries (e.g., UNION SELECT statements)
    • Web server logs with 500 errors from the API endpoint
    • Unauthorized data exports or modifications
  • File IOCs:

    • Modified Mautic source files (e.g., app/bundles/ApiBundle/Controller/)
    • Suspicious files in the web root (e.g., webshells)

Detection Engineering

YARA Rule

rule CVE_2026_4776_SQLi_Mautic {
    meta:
        description = "Detects SQL injection attempts targeting Mautic API contact filtering"
        author = "Valters IT"
        date = "2026-01-01"
        reference = "CVE-2026-4776"
    strings:
        $sqli1 = /filters\[.*\]\[.*\]\[.*\]\s*=\s*.*['\"]\s*(UNION|SELECT|DROP|INSERT|UPDATE|DELETE)/i
        $sqli2 = /filters\[.*\]\[.*\]\[.*\]\s*=\s*.*\bOR\b.*=.*/i
        $sqli3 = /filters\[.*\]\[.*\]\[.*\]\s*=\s*.*\bAND\b.*=.*/i
    condition:
        any of them
}

Sigma Rule

title: Mautic API SQL Injection Attempt
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects SQL injection attempts in Mautic API contact filtering
author: Valters IT
date: 2026-01-01
references:
    - CVE-2026-4776
logsource:
    category: webserver
    product: apache
    service: access_combined
detection:
    selection:
        cs-uri-query|contains|all:
            - 'filters['
            - ']'
        cs-uri-query|contains:
            - 'UNION'
            - 'SELECT'
            - 'DROP'
            - 'INSERT'
            - 'UPDATE'
            - 'DELETE'
    condition: selection
falsepositives:
    - Legitimate use of nested filters with similar patterns (rare)
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2026-4776 Mautic API SQL Injection Attempt"; flow:to_server,established; content:"/api/contacts"; http_uri; nocase; pcre:"/filters\[.*\]\[.*\]\[.*\]\s*=\s*.*['\"]\s*(UNION|SELECT|DROP|INSERT|UPDATE|DELETE)/i"; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Disable the vulnerable API endpoint if not required.
  2. Implement a Web Application Firewall (WAF) with rules to block SQL injection patterns.
  3. Restrict API access to trusted IP addresses only.

Long-term Fixes:

  1. Apply parameterized queries or prepared statements in all database interactions.
  2. Enhance input validation to recursively sanitize all nested parameters.
  3. Conduct a security audit of the entire API codebase.
  4. Monitor for patches from Mautic and apply them immediately.

Workaround:

  • Modify the sanitizeInput function to use a whitelist of allowed characters and reject any input containing SQL keywords.

Valters IT

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-4776/ · 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.