Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Servlet skips LDAP auth (PR:N), reachable over HTTP (AV:N) with a single crafted request (AC:L), and stacked-query SQLi yields full DB read/write/execute (C:H/I:H/A:H).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Lifecycle Timeline
4DescriptionCVE.org
Metacat is data repository software that helps researchers preserve, share, and discover data. Versions 2.0.0 and and above contain an unauthenticated SQL injection in the /harvesterRegistration endpoint. HarvesterRegistration.dbInsert() builds an INSERT against HARVEST_SITE_SCHEDULE via string concatenation, using a quoteString() helper that performs raw single-quote wrapping without escaping. Three request parameters reach the sink: unit, contactEmail, and documentListURL. The servlet does not verify a real LDAP identity. Allowing the vulnerable insert to proceed. Since the PostgreSQL backend permits stacked queries via Statement.executeUpdate(), this vulnerability allows full read/write/execute access in the Metacat database context. The vulnerability was remediated in Metacat 3.0.0.
Articles & Coverage 1
AnalysisAI
Unauthenticated SQL injection in NCEAS Metacat 2.0.0 through pre-3.0.0 allows remote attackers to read, modify, and execute arbitrary statements against the PostgreSQL backend by sending crafted parameters to the /harvesterRegistration endpoint. The flaw stems from string-concatenated INSERTs in HarvesterRegistration.dbInsert() combined with a missing LDAP identity check, and because the backend permits stacked queries via Statement.executeUpdate() the injection escalates to full database compromise. No public exploit identified at time of analysis, but the CVSS 9.8 vector and trivial trigger via three reachable parameters (unit, contactEmail, documentListURL) make exploitation straightforward once the endpoint is reachable.
Technical ContextAI
Metacat is a Java-based metadata and data repository operated primarily by ecological and earth-science researchers, fronted by a Java servlet container and backed by PostgreSQL (CPE cpe:2.3:a:nceas:metacat). The /harvesterRegistration servlet feeds user-supplied unit, contactEmail, and documentListURL parameters into HarvesterRegistration.dbInsert(), which constructs the INSERT against HARVEST_SITE_SCHEDULE through plain Java string concatenation. The only sanitization is a quoteString() helper that wraps values in single quotes without escaping embedded quotes, so any apostrophe terminates the literal and lets attacker-controlled SQL append. This is a textbook CWE-89 (Improper Neutralization of Special Elements used in an SQL Command); because PostgreSQL's JDBC driver allows multiple semicolon-separated statements through executeUpdate(), a single injected payload can chain DDL, DML, and PostgreSQL-specific functions (e.g. COPY ... FROM PROGRAM on suitably privileged roles), giving full read/write/execute access in the database role context.
RemediationAI
Vendor-released patch: Metacat 3.0.0 - upgrade per the GitHub Security Advisory at https://github.com/NCEAS/metacat/security/advisories/GHSA-wrc6-rc34-hrcg, which corresponds to commit 820d595309b399fdbdf4983bd1b1dd795773472a that removes the entire vulnerable harvesterClient code path. If upgrading is not immediately possible, block external access to the /harvesterRegistration URL at the reverse proxy or servlet filter (trade-off: any legitimate site-harvest registration workflow will break, but most operational deployments rarely use this interactively), and as a defense-in-depth step ensure the Metacat database role has the minimum privileges required (no SUPERUSER, no pg_read_server_files, no COPY FROM PROGRAM) so that a successful injection cannot escalate to OS command execution. Disabling PostgreSQL stacked queries is not a viable mitigation since the JDBC driver and Metacat both rely on standard executeUpdate semantics.
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-89 – SQL Injection
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-36795