CVE-2026-50180
HighCVSS 8.7Exploitation Probability (EPSS)
Low risk48th 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- CVE-2026-55615Critical
Langroid before version 0.65.5 has a vulnerability in the Neo4jChatAgent component that allows Cypher query injection. An attacker can influence the query via prompt injection, enabling reading or destroying all graph data, and with APOC or dbms.security procedures enabled, achieving OS command and filesystem access.
- CVE-2026-54769Critical
Langroid versions prior to 0.65.2 contain a critical sandbox escape vulnerability leading to Remote Code Execution (RCE) in its `TableChatAgent` and `VectorStore` components. When evaluating LLM-generated tool messages with `full_eval=True`, the `eval()` function fails to remove `__builtins__` from the globals dictionary, allowing access to system functions like `__import__('os').system()`. An attacker can exploit this by providing a crafted prompt to achieve unauthenticated RCE on the host.
- CVE-2026-54760Critical
In Langroid framework prior to version 0.65.1, a SQL injection vulnerability was found in the `SQLChatAgent` component. Despite default dangerous operations being disabled, the protection mechanism using a regex blocklist and SELECT allowlist can be bypassed with crafted PostgreSQL queries, enabling server file reads.
- CVE-2026-25879Critical
Langroid SQLChatAgent before version 0.63.0 executes SQL generated by an LLM, which is influenceable by prompt injection. An attacker can coerce execution of dangerous operations like COPY ... FROM PROGRAM, leading to remote code execution on the database host.
- CVE-2026-54771High
A vulnerability in Langroid framework prior to version 0.65.3 allows untrusted users to directly invoke tools via raw JSON payloads, even when tools are registered with `use=False, handle=True`.
- CVE-2026-50181High
In the Langroid framework, the ReadFileTool and WriteFileTool do not validate that the file path stays within the working directory (curr_dir). This allows an attacker to read and write files outside the allowed directory using path traversal sequences like ../.
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.

