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

CVE-2026-83801: Stored Cross-Site Scripting via Form Help Text in Nautobot

Alon Barad
Alon Barad
Software Engineer

Sep 23, 2026·5 min read·1 visit

Executive Summary (TL;DR)

A stored XSS vulnerability in Nautobot allows low-privileged administrative users to inject malicious scripts into Module Family names or Relationship descriptions, executing arbitrary code when viewed by other users.

CVE-2026-83801 is a stored Cross-Site Scripting (XSS) vulnerability in Nautobot. The vulnerability arises because the application interpolates user-controlled database properties—specifically Relationship descriptions and Module Family names—directly into the help_text parameter of Django form fields. These fields are rendered using Django's |safe filter, bypassing HTML escaping and enabling persistent injection. When an administrative user accesses the affected forms, the payload executes contextually in their browser. This allows attackers to hijack active sessions and perform unauthorized operations. Nautobot versions prior to v2.4.37 and v3.1.8 are affected by this vulnerability. The issue has been patched by implementing contextual HTML escaping and strict markdown sanitization.

Vulnerability Overview

Nautobot serves as an open-source Network Source of Truth and Network Automation Platform, managing highly sensitive configuration data. The application utilizes a generic form rendering component to display form fields dynamically across different modules. A critical validation flaw exists in how user-supplied database properties are parsed during this form generation process.

The vulnerability is classified as a stored Cross-Site Scripting (XSS) vulnerability, registered as CWE-79. Specifically, the application interpolates user-controlled database properties directly into the help text parameter of standard Django form fields. These fields are subsequently rendered without appropriate contextual escaping.

An attacker with low-level administrative privileges can inject arbitrary HTML or JavaScript payloads into specific model properties. When a high-privilege administrative user accesses the affected object forms, the browser executes the stored payload. This execution occurs within the context of the victim's authenticated session, introducing significant security risks.

Root Cause Analysis

In standard Django applications, template variables are automatically HTML-escaped by default to prevent cross-site scripting vulnerabilities. However, Nautobot utilizes a specialized template file named render_field.html to standardize the visual presentation of form elements. Within this template, the form field's help_text parameter is processed using Django's built-in |safe template filter.

The application of the |safe filter instructs the template engine to bypass standard HTML auto-escaping mechanisms. This behavior assumes that any content passed to help_text has been validated and sanitized. If the backend dynamic form class assigns raw, unescaped, user-controlled model attributes directly to the form's help_text property, a persistent injection path is established.

The vulnerability manifests in two primary code paths. First, in the Module Family initialization logic within nautobot/dcim/forms.py, the system generates help texts using standard Python f-strings that incorporate the unsanitized parent_bay.module_family.name attribute. Second, in nautobot/extras/models/relationships.py, the dynamic relationship form builder directly maps the unsanitized self.description attribute to the field's help text parameter.

Code Analysis

The vulnerability in the Module Family component was addressed by replacing standard Python f-string interpolation with Django's format_html utility, which automatically escapes variable inputs.

# Vulnerable Implementation
self.fields["module_family"].help_text = f"The selected parent module bay requires a module in the {parent_bay.module_family.name} family"
 
# Patched Implementation
from django.utils.html import format_html
 
self.fields["module_family"].help_text = format_html(
    "The selected parent module bay requires a module in the {} family",
    parent_bay.module_family.name,
)

For the Relationship description component, the developers implemented markdown-based sanitization using the render_markdown helper. This helper leverages the nh3 HTML sanitization library to strip out executable components like <script> tags while retaining benign formatting elements.

# Vulnerable Implementation
def to_form_field(self, side):
    field.required = False
    field.label = self.get_label(side)
    if self.description:
        field.help_text = self.description
    return field
 
# Patched Implementation
from nautobot.core.templatetags.helpers import render_markdown
 
def to_form_field(self, side):
    field.required = False
    field.label = self.get_label(side)
    if self.description:
        # Sanitize input and render markdown securely
        field.help_text = render_markdown(self.description)
    return field

Exploitation Methodology

Exploitation of this vulnerability requires an authenticated attacker with permissions to modify either Module Family names or Relationship descriptions. The attacker injects a target payload containing executable JavaScript into these fields. Because the inputs are stored in the database without prior validation, the database persists the malicious payload in its raw form.

The attack remains dormant until an administrative user triggers the rendering of the compromised form. This occurs when the administrator attempts to create or edit objects associated with the malicious Module Family or Relationship. The system loads the record, extracts the raw payload, and renders it through the render_field.html template.

Upon rendering, the administrator's browser interprets the injected tags and executes the script. The script can extract the active session cookies or API tokens and transmit them to an external endpoint controlled by the attacker. This allows the attacker to hijack the session and assume the administrative identity.

Impact Assessment

The security impact of CVE-2026-83801 is evaluated with a CVSS v3.1 score of 5.4, indicating Medium severity. The attack vector is Network, requiring Low privileges and User Interaction. The scope is changed because the script executes within the context of the victim's session, enabling actions outside the attacker's original permission boundaries.

Successful execution allows an attacker to bypass role-based access control. Since Nautobot serves as a centralized source of truth for network configurations, administrative access can lead to broader infrastructure compromise. The attacker can modify network device definitions, retrieve secrets, or disrupt automation workflows.

The vulnerability does not present direct availability risks to the server hosting Nautobot. The primary consequence is the compromise of session confidentiality and integrity. If the victim holds superuser privileges, the attacker can establish full, persistent administrative control over the Nautobot deployment.

Remediation and Mitigation

The recommended remediation is to upgrade the Nautobot deployment to the patched releases. For deployments on the v2.x release train, upgrade to version v2.4.37 or later. For deployments on the v3.x release train, upgrade to version v3.1.8 or later.

If immediate upgrading is not possible, organizations can run administrative scripts within the Nautobot Django shell to inspect and clean the database. This script scans for potentially dangerous characters in target models.

# Audit script for the Django shell
from nautobot.dcim.models import ModuleFamily
from nautobot.extras.models import Relationship
 
for mf in ModuleFamily.objects.filter(name__contains='<'):
    print(f'Vulnerable ModuleFamily: {mf.id}')
 
for rel in Relationship.objects.filter(description__contains='<'):
    print(f'Vulnerable Relationship: {rel.id}')

Additionally, organizations should enforce the principle of least privilege. Restricting access to the dcim.add_modulefamily, dcim.change_modulefamily, extras.add_relationship, and extras.change_relationship permissions reduces the exposed attack surface.

Official Patches

NautobotNautobot Stored XSS vulnerability advisory

Fix Analysis (2)

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

Affected Systems

Nautobot v2.x before v2.4.37Nautobot v3.x before v3.1.8

Affected Versions Detail

Product
Affected Versions
Fixed Version
Nautobot
Nautobot
>= 2.0.0, < 2.4.37v2.4.37
Nautobot
Nautobot
>= 3.0.0, < 3.1.8v3.1.8
AttributeDetail
CWE IDCWE-79
Attack VectorNetwork
CVSS Severity5.4 (Medium)
EPSS StatusNot established
ImpactStored Cross-Site Scripting (XSS)
Exploit StatusProof-of-Concept
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1189Drive-by Compromise
Initial Access
T1185Browser Session Hijacking
Collection
CWE-79
Improper Neutralization of Input During Web Page Generation

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

Known Exploits & Detection

NucleiDetection Template Available

References & Sources

  • [1]GitHub Security Advisory GHSA-56v6-2fhr-wxgq
  • [2]NVD - CVE-2026-83801

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 2 hours ago•CVE-2026-83805
6.4

CVE-2026-83805: Authorization Bypass and Privilege Escalation in Nautobot Approval Workflows

An authorization bypass vulnerability exists in Nautobot's REST API endpoints handling approval workflows. Due to an architectural inconsistency, a standalone, generic REST API endpoint for creating approval responses was exposed without propagating the required business-logic validations. This allows low-privileged authenticated users to submit forged, self-approved votes, bypassing approval thresholds and triggering unauthorized server-side automated jobs.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 3 hours ago•CVE-2026-85709
5.3

CVE-2026-85709: Sensitive Information Exposure in LightRAG API Server

CVE-2026-85709 is a sensitive information exposure vulnerability in HKUDS LightRAG prior to version 1.5.5. The vulnerability allows remote, unauthenticated clients to trigger server-side errors and receive raw Python exception details, including local filesystem paths, database connection strings, credentials, and internal system configurations.

Amit Schendel
Amit Schendel
4 views•6 min read
•about 4 hours ago•CVE-2026-85725
5.9

CVE-2026-85725: Observable Timing Side-Channel Vulnerability in HKUDS LightRAG

HKUDS LightRAG prior to version 1.5.5 is vulnerable to multiple timing side-channels (CWE-208) in its API authentication layer. The password verification logic in `lightrag/api/passwords.py` compares plaintext administrative credentials using Python's short-circuiting equality operator (`==`). Additionally, `lightrag/api/auth.py` terminates authentication early on non-existent usernames, creating an observable latency difference compared to computationally expensive bcrypt comparisons on valid accounts. Together, these allow remote unauthenticated attackers with low-latency network access to enumerate valid usernames and extract plaintext passwords character by character.

Amit Schendel
Amit Schendel
4 views•5 min read
•about 5 hours ago•CVE-2026-85734
9.1

CVE-2026-85734: Brute-Force and CPU-Exhaustion DoS in LightRAG API /login Endpoint

LightRAG prior to version 1.5.5 does not implement rate limiting, lockout mechanisms, or throttling on its `/login` authentication endpoint. This allows unauthenticated remote attackers to perform rapid brute-force attacks to crack passwords and hijack active sessions. Furthermore, because the endpoint processed synchronous bcrypt verifications inside an asynchronous event loop, concurrent brute-force requests can easily exhaust server CPU resources, triggering an unauthenticated Denial of Service (DoS).

Alon Barad
Alon Barad
5 views•5 min read
•about 6 hours ago•CVE-2026-85740
7.1

CVE-2026-85740: Server-Side Request Forgery (SSRF) Guard Bypass via IPv6 Transition Wrappers in LightRAG

A security vulnerability in HKUDS/LightRAG prior to v1.5.5 allows authenticated attackers to bypass the native markdown image downloader guard. The system fails to normalize IPv6 transition wrappers (such as NAT64, IPv4-compatible, and 6to4 blocks) encapsulating internal IPv4 addresses. Python's ipaddress library evaluates these wrappers as globally routable, but hosting environments running NAT64/DNS64 routing decapsulate and route the requests to internal resources.

Alon Barad
Alon Barad
7 views•5 min read
•about 7 hours ago•CVE-2026-86062
6.1

CVE-2026-86062: Stored Cross-Site Scripting (XSS) in HKUDS LightRAG WebUI Chat Renderer

HKUDS LightRAG, an open-source retrieval-augmented generation (RAG) framework, is vulnerable to Stored Cross-Site Scripting (XSS) in its WebUI chat rendering component prior to version 1.5.5. Unsanitized document content ingested into the vector database can propagate through the LLM response pipeline and execute malicious HTML or active JavaScript payloads inside the administrator's WebUI session. Because the application stores sensitive access keys in browser storage, successful exploitation allows complete API token extraction and administrative session hijacking.

Alon Barad
Alon Barad
9 views•7 min read