CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-28361

CVE-2026-28361: IDOR in NocoDB MCP Token Service

Alon Barad
Alon Barad
Software Engineer

Mar 2, 2026·5 min read·32 visits

Executive Summary (TL;DR)

NocoDB fails to verify ownership of MCP tokens in API requests, allowing authenticated 'Creators' to manipulate other users' tokens by guessing or obtaining their IDs. Patched in version 0.301.3.

A medium-severity Insecure Direct Object Reference (IDOR) vulnerability exists in NocoDB versions prior to 0.301.3. The flaw is located in the Model Context Protocol (MCP) Token service, where improper authorization checks allow authenticated users with 'Creator' privileges to access, regenerate, or delete MCP tokens belonging to other users within the same base. Successful exploitation requires knowledge of the target token's identifier.

Vulnerability Overview

CVE-2026-28361 is an Insecure Direct Object Reference (IDOR) vulnerability affecting the Model Context Protocol (MCP) integration in NocoDB. The vulnerability manifests in the backend service layer responsible for managing MCP tokens, specifically within the McpTokenService. This component is designed to handle the lifecycle of authentication tokens used for Model Context Protocol interactions.

In affected versions, the application enforces role-based access control (RBAC) to ensure only users with 'Creator' privileges can access these endpoints. However, it fails to implement horizontal privilege separation. This means that while the application correctly verifies that a user is a 'Creator', it does not verify that the specific token being accessed belongs to that user. Consequently, the API treats all tokens within a base as globally accessible to any authorized creator within that scope, violating the principle of least privilege.

This flaw allows a malicious actor to perform unauthorized actions on sensitive resources. While the requirement to know the target Token ID mitigates the risk slightly (assuming IDs are non-sequential UUIDs), leaks in logs, error messages, or client-side code could expose these identifiers, making exploitation trivial.

Root Cause Analysis

The root cause of this vulnerability is a missing ownership validation check in the database query logic of the McpTokenService. When an API request is received to get, regenerate, or delete a token, the backend extracts the tokenId from the request parameters and uses it to look up the record in the database.

Technically, the vulnerability exists because the database operations (such as findOne or delete) rely solely on the primary key (id) of the token record. A secure implementation of the repository pattern for user-owned resources must typically include a composite filter: the resource id AND the owner_id (or fk_user_id). By omitting the fk_user_id constraint, the service returns the record regardless of who owns it, provided the record exists.

This oversight stands in contrast to other services within the NocoDB codebase, such as the ApiTokensService, which correctly implements these scope checks. The discrepancy suggests that the MCP Token service was likely a newer addition where standard security patterns were not consistently applied during initial development.

Code Analysis

The remediation involves enforcing strict ownership boundaries at the service layer. Below is a conceptual representation of the vulnerable code versus the secure implementation introduced in version 0.301.3.

Vulnerable Implementation

In the vulnerable version, the get method queries the database using only the token ID provided in the arguments. The user object, while potentially available in the context, is ignored during the database lookup.

// McpTokenService.ts (Vulnerable)
 
async get(id: string) {
  // FLAW: Query relies solely on the public ID.
  // If 'id' exists, it is returned regardless of the requester.
  return await this.db.mcp_tokens.findOne({
    where: { id }
  });
}
 
async delete(id: string) {
  // FLAW: Deletion occurs without verifying ownership.
  return await this.db.mcp_tokens.delete({
    where: { id }
  });
}

Patched Implementation

The patch modifies the function signatures to accept the authenticated user object and incorporates the user's ID into the where clause of the database query. This ensures that the database only returns a result if both the Token ID matches AND the fk_user_id matches the requester.

// McpTokenService.ts (Fixed)
 
async get(id: string, user: User) {
  // FIX: Added 'fk_user_id' to the query criteria.
  // This acts as a mandatory horizontal authorization check.
  return await this.db.mcp_tokens.findOne({
    where: {
      id,
      fk_user_id: user.id 
    }
  });
}
 
async delete(id: string, user: User) {
  return await this.db.mcp_tokens.delete({
    where: {
      id,
      fk_user_id: user.id
    }
  });
}

Exploitation Methodology

Exploiting this vulnerability requires an attacker to have a valid account with 'Creator' privileges on a NocoDB instance. The primary hurdle for the attacker is obtaining the target tokenId. If these IDs are sequential integers, enumeration is trivial. If they are UUIDs, the attacker must rely on secondary information leaks (e.g., shared browser sessions, leaked logs, or predictable generation seeds).

Attack Scenario:

  1. Reconnaissance: The attacker identifies the API endpoint structure, typically /api/v1/db/meta/mcp-tokens/{tokenId}.
  2. Target Acquisition: The attacker obtains a valid tokenId belonging to another user (User B).
  3. Execution: The attacker (User A) sends a DELETE request to the endpoint using User B's tokenId.
DELETE /api/v1/db/meta/mcp-tokens/550e8400-e29b-41d4-a716-446655440000 HTTP/1.1
Host: nocodb-instance.local
Authorization: Bearer <User_A_Token>
Content-Type: application/json

Result: In a vulnerable instance, the server processes the deletion and returns 200 OK. User B's workflow relying on that token immediately breaks. If the attacker sent a GET request instead, they would receive the sensitive token details in the response body.

Impact Assessment

The impact of CVE-2026-28361 is classified as Medium (CVSS 4.9) primarily because it requires authentication and specific knowledge of resource IDs. However, for organizations using NocoDB in collaborative environments, the consequences of successful exploitation are significant.

Integrity Impact (High): The ability to regenerate or delete tokens allows an attacker to disrupt the workflows of other users. Regenerating a token invalidates the previous one, causing immediate denial of service for any external scripts or integrations relying on that credential.

Confidentiality Impact (Low/Medium): While the CVSS v4 vector in the research context rates Confidentiality as None (VC:N), this is specific to the analyzed context. If the API response body includes the actual secret token string upon a successful GET request, the confidentiality impact would technically be High for that specific scope. Access to these tokens could allow the attacker to impersonate the victim in interactions with the Model Context Protocol, potentially leading to further data exposure.

Official Patches

NocoDBNocoDB v0.301.3 Release Notes

Technical Appendix

CVSS Score
4.9/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:U

Affected Systems

NocoDB

Affected Versions Detail

Product
Affected Versions
Fixed Version
NocoDB
NocoDB
< 0.301.30.301.3
AttributeDetail
CWECWE-639 (IDOR)
CVSS v4.04.9 (Medium)
Attack VectorNetwork (Authenticated)
Fix Version0.301.3
ComponentMcpTokenService
Exploit MaturityUnproven

MITRE ATT&CK Mapping

T1213Data from Information Repositories
Collection
T1485Data Destruction
Impact
T1078Valid Accounts
Initial Access
CWE-639
Authorization Bypass Through User-Controlled Key

Vulnerability Timeline

Initial patch development started
2026-02-21
Fixes merged into main branch
2026-02-24
CVE-2026-28361 Published / Patch Released
2026-03-02

References & Sources

  • [1]GitHub Advisory GHSA-p9x3-w98f-7j3q
  • [2]NVD Entry for CVE-2026-28361

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 5 hours ago•CVE-2024-29203
4.3

CVE-2024-29203: Client-Side Cross-Site Scripting via Unsandboxed Iframes and Legacy Embed Elements in TinyMCE

CVE-2024-29203 identifies a cross-site scripting (XSS) vulnerability in the content ingestion and parsing mechanics of TinyMCE rich text editor. Due to a failure to enforce sandbox attributes on dynamic iframe elements and safely handle legacy embed objects, unauthenticated attackers can inject malicious elements that execute scripts within the context of the parent application session.

Amit Schendel
Amit Schendel
5 views•5 min read
•about 7 hours ago•CVE-2026-9277
8.1

CVE-2026-9277: OS Command Injection in shell-quote via Object-Token Line Terminator Parsing Defect

A technical breakdown of the OS command injection vulnerability in the shell-quote NPM package (CVE-2026-9277 / GHSA-w7jw-789q-3m8p). The bug resides in the character-by-character backslash-escaping logic applied to the .op field of object-tokens within the quote() function, which fails to match and escape line terminators due to a regex matching oversight in JavaScript. This allows unauthenticated remote attackers to execute arbitrary shell commands if they can control inputs processed by this library.

Alon Barad
Alon Barad
10 views•6 min read
•about 8 hours ago•CVE-2026-11645
8.8

CVE-2026-11645: Out-of-Bounds Memory Access in Google Chrome V8 Engine

A high-severity memory corruption vulnerability exists in the V8 JavaScript engine of Google Chrome before versions 149.0.7827.102/103. The flaw arises from an incorrect bounds-check elimination during JIT compilation by the TurboFan optimizer, allowing remote attackers to achieve out-of-bounds read and write access inside the sandboxed renderer process.

Amit Schendel
Amit Schendel
24 views•6 min read
•about 17 hours ago•CVE-2026-50751
9.3

CVE-2026-50751: Authentication Bypass in Check Point Security Gateway IKEv1 Legacy Validation

An improper authentication vulnerability (CWE-287) exists in the legacy, deprecated Internet Key Exchange version 1 (IKEv1) key exchange protocol implementation in Check Point Security Gateways. The vulnerability is caused by a logic flow weakness during the certificate validation process for Remote Access VPN and Mobile Access (SSL VPN) connections. An unauthenticated remote attacker can exploit this weakness to bypass user authentication entirely, establishing a fully functional Remote Access VPN connection without a valid password.

Alon Barad
Alon Barad
70 views•6 min read
•1 day ago•CVE-2026-39922
6.3

CVE-2026-39922: Server-Side Request Forgery in GeoNode Service Registration Endpoint

GeoNode versions prior to 4.4.5 and 5.0.2 are vulnerable to Server-Side Request Forgery (SSRF) in the service registration endpoint. Authenticated attackers with low privileges can exploit insufficient input validation in the Web Map Service (WMS) registration module to force the application server to make outbound network queries to loopback addresses, private RFC1918 subnets, link-local scopes, and cloud metadata endpoints. This technical report details the mechanics of the vulnerability, the underlying architectural flaw, and how to effectively remediate and mitigate the associated security risks.

Alon Barad
Alon Barad
4 views•7 min read
•1 day ago•CVE-2022-0492
7.8

CVE-2022-0492: Privilege Escalation and Container Escape via cgroups v1 release_agent

CVE-2022-0492 is a high-severity missing authorization vulnerability in the Linux kernel's Control Groups (cgroups) v1 implementation. The flaw resides within the cgroup_release_agent_write function in kernel/cgroup/cgroup-v1.c, where the kernel fails to validate if the process writing to the release_agent file possesses administrative capabilities in the initial user namespace. This allows a local attacker inside a container with root privileges (UID 0) to abuse user namespaces, mount a cgroups v1 directory, modify the release_agent parameter, and execute arbitrary commands on the host system as host root, effectively achieving a complete container escape.

Amit Schendel
Amit Schendel
12 views•7 min read