CVE Catalog

CVE-2026-50180

HighCVSS 8.7
Published: Updated: Translated: NVD NIST

Exploitation Probability (EPSS)

Low risk
0.69%

48th percentile - higher than 48% of all known CVEs

Summary

In Langroid library prior to version 0.64.0, the SQLChatAgent component has an imperfect _validate_query defense layer that fails to block all dangerous SQL primitives. The blocklist misses PostgreSQL file-reading functions (pg_read_file, pg_stat_file) and SQL Server/SQLite constructs, allowing an attacker to read files from the database host.

Risk Assessment

An attacker can exploit this vulnerability to read sensitive system files from the PostgreSQL host, even with the agent's strict default configuration (SELECT only). This could lead to data leakage of passwords, configurations, or private keys.

Recommendation

Immediately update Langroid to version 0.64.0 or later, which contains the fix. Additionally, consider implementing extra SQL query validation mechanisms on the application side.

Other vulnerabilities in Langroid

See all
Original NVD description (English source)

Langroid is a framework for building large-language-model-powered applications. Prior to version 0.64.0, `SQLChatAgent` in `langroid` ships a `_validate_query` defense-in-depth layer whose `_DANGEROUS_SQL_PATTERNS` regex blocklist enumerates dangerous SQL primitives by specific function name. The list misses the canonical PostgreSQL filesystem-disclosure family `pg_read_file()`, `pg_stat_file()`, `pg_ls_logdir()`, `pg_ls_waldir()`, `pg_current_logfile()` (and similar `SELECT`-shaped functions in the same family). It also leaves SQL Server `OPENDATASOURCE` and SQLite `ATTACH '<file>' AS x` (DATABASE keyword omitted) unblocked. An attacker able to shape the LLM's generated SQL (directly via prompt input or transitively via prompt-injection in data the LLM ingests) can read arbitrary files from the PostgreSQL host through ordinary `SELECT` queries, even with the agent's strict default configuration (`allow_dangerous_operations=False`, `allowed_statement_types=['SELECT']`). The payloads survive the statement-type allowlist (each is a `SELECT`) and pass through the regex blocklist (none of the function names match), then reach the live SQLAlchemy engine via `SQLChatAgent.run_query`. Version 0.64.0 contains a patch for the issue.

Vulnerability data from NVD (NIST) · CISA KEV · EPSS