
È stata scoperta una vulnerabilità di SQL injection in Frappe Framework v15.72.4, tramite il parametro fieldname nell'endpoint API frappe.client.get_value.
📌 Riepilogo
È stata scoperta una vulnerabilità di iniezione SQL cieca basata sul tempo nell'endpoint API frappe.client.get_value in Frappe Framework v15.72.4 (presente anche nel codebase di ERPNext v15.67.0). Un utente autenticato con accesso all'API di reporting/client può iniettare SQL tramite il parametro fieldname. Inserendo funzioni di ritardo temporale (ad es., sleep(15)) nel parametro fieldname, un attaccante può confermare l'iniezione tramite ritardi misurabili nella risposta — consentendo denial of service, divulgazione di informazioni (tramite tecniche cieche) e manipolazione dei dati.
Tipo di vulnerabilità: SQL Injection (cieca basata sul tempo) (CWE‑89)
Prodotti interessati: Frappe Framework / ERPNext
Versioni interessate (segnalate):
Componente interessato: metodo API frappe.client.get_value (frappe/client.py)
Endpoint vulnerabile:
/api/method/frappe.client.get_value
Esempio di query vulnerabile:
/api/method/frappe.client.get_value?doctype=Report&fieldname=ref_doctype+%2F+sleep(15)+&filters=Profit+and+Loss+Statement&_=1752174156893
Parametro vulnerabile: fieldname (sanitizzato in modo improprio / concatenato in SQL)
Tipo di attacco: Remoto (richiede autenticazione e accesso all'API di reporting)
Gravità: Alta (la SQLi cieca basata sul tempo consente esfiltrazione di dati, DoS e manipolazione)
Punteggio CVSS v3.1 stimato: 8.0 (Alto) — stima basata su un'iniezione SQL remota che richiede autenticazione e consente divulgazione di dati e DoS; la valutazione ufficiale dovrebbe essere eseguita dagli enti assegnanti (assigners).
Stato: Non risolto (come da segnalazione)
Scoperto da: Mohammed Aloli (GitHub: https://github.com/MoAlali)
Data della scoperta: Non specificata nella segnalazione
CVE ID: CVE-2025-56380
Effettuare test solo in ambienti autorizzati / di laboratorio. NON eseguire contro sistemi di cui non si è proprietari o per i quali non si ha il permesso esplicito di testare.
Richiesta PoC (esempio):

GET /api/method/frappe.client.get_value?doctype=Report&fieldname=ref_doctype+%2F+sleep(15)+&filters=Profit+and+Loss+Statement&_=1752174156893
Passaggi per la conferma
+%2F+sleep(15)+& e osservare che la risposta torna immediata — confermando che l'iniezione causa il ritardo temporale.Note: Sostituire sleep(15) con altre funzioni temporali o valori di tempo adatti al DBMS sottostante (ad es., pg_sleep(n) per PostgreSQL) a seconda del motore di database. Il PoC dimostra l'iniezione cieca tramite timing; payload più complessi potrebbero essere usati per estrarre i dati bit per bit.
Vettore di attacco: Un utente autenticato crea richieste GET a /api/method/frappe.client.get_value con un parametro fieldname malizioso contenente payload SQL (funzioni di ritardo temporale).
Impatto:
fieldname e tutti gli input forniti dall'utente non vengano mai concatenati direttamente in SQL. Utilizzare query parametrizzate o API ORM che legano correttamente i parametri.sleep, pg_sleep, benchmark, /, ;).frappe.client.get_value e il percorso del codice che gestisce fieldname/filtri, sostituire la concatenazione non sicura con API sicure e rilasciare una patch di sicurezza. Gli operatori dovrebbero applicare gli aggiornamenti tempestivamente.https://github.com/MoAlali — X: https://x.com/alaliksa_ — LinkedIn: https://www.linkedin.com/in/mohammedaloli/https://github.com/frappe/frappe , https://github.com/frappe/erpnexthttps://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.htmlScoperto da Mohammed Aloli
Queste informazioni sono fornite esclusivamente a scopo difensivo e di remediation. Non tentare di sfruttare questa vulnerabilità contro sistemi di cui non si è proprietari o per i quali non si ha esplicita autorizzazione al test. Gli operatori dovrebbero dare priorità all'applicazione delle patch, applicare correzioni di codifica sicura e seguire le indicazioni di mitigazione sopra riportate.