GHSA-9WGH-M22W-9XJ8
Vulnerability from github – Published: 2026-06-05 15:52 – Updated: 2026-06-05 15:52Summary
The public shared-view relation endpoints accepted a caller-supplied column ID without verifying that the column was visible in the shared view, so anyone holding a share UUID could read links from any LTAR column on the view's table — including columns the view owner had hidden.
Details
publicMmList, publicHmList, and relDataList already ensured that the
requested column belonged to the view's model, but did not check the
view-column entry's show flag. All three handlers now also fetch the
shared view's column entries and reject the request unless the matching
entry has show=true. The four public relation routes covered by the fix
are:
GET /api/v2/public/shared-view/:uuid/rows/:rowId/mm/:columnId(many-to-many)GET /api/v2/public/shared-view/:uuid/rows/:rowId/hm/:columnId(has-many)GET /api/v2/public/shared-view/:uuid/rows/:rowId/{ln,om}/:columnId(links / one-to-many — both share the many-to-many handler)GET /api/v2/public/shared-view/:uuid/nested/:columnId(form/gallery picker)
Impact
Anyone holding a share UUID could enumerate the full set of linked records
for any hidden LTAR column on the view's table by calling the relation
endpoint directly, even when the same column was correctly omitted from the
public /rows response.
Credit
This issue was reported by @leduckhuong.
{
"affected": [
{
"database_specific": {
"last_known_affected_version_range": "\u003c= 2026.05.0"
},
"package": {
"ecosystem": "npm",
"name": "nocodb"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "2026.05.1"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2026-47279"
],
"database_specific": {
"cwe_ids": [
"CWE-284"
],
"github_reviewed": true,
"github_reviewed_at": "2026-06-05T15:52:54Z",
"nvd_published_at": null,
"severity": "MODERATE"
},
"details": "### Summary\nThe public shared-view relation endpoints accepted a caller-supplied column\nID without verifying that the column was visible in the shared view, so\nanyone holding a share UUID could read links from any LTAR column on the\nview\u0027s table \u2014 including columns the view owner had hidden.\n\n### Details\n`publicMmList`, `publicHmList`, and `relDataList` already ensured that the\nrequested column belonged to the view\u0027s model, but did not check the\nview-column entry\u0027s `show` flag. All three handlers now also fetch the\nshared view\u0027s column entries and reject the request unless the matching\nentry has `show=true`. The four public relation routes covered by the fix\nare:\n\n- `GET /api/v2/public/shared-view/:uuid/rows/:rowId/mm/:columnId` (many-to-many)\n- `GET /api/v2/public/shared-view/:uuid/rows/:rowId/hm/:columnId` (has-many)\n- `GET /api/v2/public/shared-view/:uuid/rows/:rowId/{ln,om}/:columnId`\n (links / one-to-many \u2014 both share the many-to-many handler)\n- `GET /api/v2/public/shared-view/:uuid/nested/:columnId` (form/gallery\n picker)\n\n### Impact\nAnyone holding a share UUID could enumerate the full set of linked records\nfor any hidden LTAR column on the view\u0027s table by calling the relation\nendpoint directly, even when the same column was correctly omitted from the\npublic `/rows` response.\n\n### Credit\nThis issue was reported by [@leduckhuong](https://github.com/leduckhuong).",
"id": "GHSA-9wgh-m22w-9xj8",
"modified": "2026-06-05T15:52:54Z",
"published": "2026-06-05T15:52:54Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/nocodb/nocodb/security/advisories/GHSA-9wgh-m22w-9xj8"
},
{
"type": "PACKAGE",
"url": "https://github.com/nocodb/nocodb"
},
{
"type": "WEB",
"url": "https://github.com/nocodb/nocodb/releases/tag/2026.05.1"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N",
"type": "CVSS_V4"
}
],
"summary": "NocoDB: Hidden LTAR Column Exposure in Public Shared-View Relation Endpoints"
}
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.