Severity by source
AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:N/A:N
Admin role required to access SQL Collection (PR:H); scope changes as query reaches PostgreSQL system catalogs (S:C); confidentiality high (password hashes); no integrity or availability impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
3DescriptionCVE.org
NocoBase is an AI-powered no-code/low-code platform for building business applications and enterprise solutions. In 2.0.59 and earlier, NocoBase @nocobase/plugin-collection-sql used the checkSQL() function in packages/plugins/@nocobase/plugin-collection-sql/src/server/utils.ts with an incomplete keyword blacklist that did not restrict PostgreSQL system catalog tables such as pg_shadow, pg_roles, and pg_stat_activity, allowing an admin-role user to read password hashes and database metadata through the SQL Collection feature. This vulnerability is fixed in 2.1.0-alpha.46.
AnalysisAI
PostgreSQL password hash disclosure in NocoBase 2.0.59 and earlier allows an authenticated administrator to extract pg_shadow credential hashes and database metadata by submitting raw SQL queries that reference system catalog tables omitted from the checkSQL() keyword blacklist. The SQL Collection plugin's blocklist-based validation failed to restrict pg_shadow, pg_roles, pg_stat_activity, and information_schema, and the commit diff confirms the bypass also worked via subquery wrapping (e.g., SELECT * FROM (SELECT usename, passwd FROM pg_shadow) AS passwords). No public exploit identified at time of analysis, and this CVE is not listed in CISA KEV; a vendor-released patch is available in v2.1.0-alpha.46.
Technical ContextAI
The affected component is @nocobase/plugin-collection-sql, a NocoBase plugin that allows administrators to define database-backed views using raw SQL through the 'SQL Collection' feature. Input is gated by the checkSQL() function in packages/plugins/@nocobase/plugin-collection-sql/src/server/utils.ts, which implements CWE-184 (Incomplete List of Disallowed Inputs) - a blocklist approach that originally omitted the PostgreSQL system catalog identifiers pg_shadow (password hashes), pg_authid, pg_auth_members, pg_roles, pg_stat_activity, pg_catalog, and the information_schema schema. The CVSS Scope:Changed metric reflects that the query crosses from the NocoBase application boundary into the PostgreSQL system catalog layer. A secondary bug - sql.trim().split(';').shift() could return undefined rather than an empty string - was also patched in the same commit, closing a potential edge-case bypass. The CPE cpe:2.3:a:nocobase:nocobase:*:*:*:*:*:*:*:* covers all NocoBase versions through 2.0.59. The vulnerability is PostgreSQL-specific; pg_shadow and related catalogs do not exist in MySQL or SQLite deployments.
RemediationAI
Upgrade to NocoBase 2.1.0-alpha.46 or later, which expands the checkSQL() blocklist to include pg_catalog, pg_shadow, pg_authid, pg_auth_members, pg_roles, pg_stat_activity, and information_schema, and closes the subquery bypass vector. The patched release is available at https://github.com/nocobase/nocobase/releases/tag/v2.1.0-alpha.46; the specific fix commit is https://github.com/nocobase/nocobase/commit/87c548969ce9258dd7f0d9571c9453ae10bc3fc4. If an immediate upgrade is not possible, disable the @nocobase/plugin-collection-sql plugin entirely - this removes the attack surface at the cost of SQL-backed collection functionality. As a partial mitigation, audit all existing SQL Collection definitions for references to pg_shadow, pg_roles, pg_stat_activity, information_schema, or subqueries that alias these tables, and delete any offending collections. Organizations with strict security requirements should note that blocklist-based SQL validation is inherently fragile against novel bypass patterns; consider restricting the PostgreSQL role used by NocoBase to a least-privilege account that cannot read pg_shadow even if a bypass is discovered.
More in PostgreSQL
View allPostgreSQL libpq functions PQescapeLiteral(), PQescapeIdentifier(), PQescapeString(), and PQescapeStringConn() improperl
An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl
Argument injection vulnerability in PostgreSQL 9.2.x before 9.2.4, 9.1.x before 9.1.9, and 9.0.x before 9.0.13 allows re
Unauthenticated arbitrary file write in Splunk Enterprise (below 10.2.4 and 10.0.7) and Splunk Cloud Platform (below 10.
PostgreSQL versions before 9.2.22, 9.3.18, 9.4.13, 9.5.8 and 9.6.4 are vulnerable to incorrect authentication flaw allow
The build_tablename function in pgsql.c in the PostgreSQL (aka pgsql) extension in PHP through 5.6.7 does not validate t
A vulnerability in the h2oai/h2o-3 REST API versions 3.46.0.4 allows unauthenticated remote attackers to execute arbitra
In PostgreSQL 9.3 through 11.2, the "COPY TO/FROM PROGRAM" function allows superusers and users in the 'pg_execute_serve
Unauthenticated SQL injection in Vendure Shop API allows remote attackers to execute arbitrary SQL commands against the
Parse Server is an open source http web server backend. Rated critical severity (CVSS 10.0), this vulnerability is remot
Hard-coded default PostgreSQL credentials shipped in the docker-compose.yaml of langgenius Dify through version 1.5.1 al
A vulnerability in the FinanceChatLlamaPack of the run-llama/llama_index repository, versions up to v0.12.3, allows for
Same weakness CWE-184 – Incomplete List of Disallowed Inputs
View allSame technique Information Disclosure
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-44800
GHSA-v8vm-cqh8-q87q