Skip to main content

Nautobot EUVDEUVD-2026-84814

| CVE-2026-83801 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-09-22 GitHub_M GHSA-56v6-2fhr-wxgq
5.4
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain account with relationship/modulefamily permissions
  2. Delivery
    Store script payload in description or family name
  3. Exploit
    Privileged victim opens create/edit form
  4. Execution
    help_text rendered via |safe executes JS
  5. Impact
    Steal session/token, act as superuser, escalate privileges

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires an authenticated Nautobot account holding one of the specific object-level permissions: extras.add_relationship or extras.change_relationship (to inject via a Relationship description), or dcim.add_modulefamily or dcim.change_modulefamily (to inject via a Module Family name). The payload is stored, then only triggers when another user - ideally a higher-privileged admin or superuser - opens an affected create or edit form where the value is rendered as form help_text through render_field.html with Django's |safe filter. Limiting factors: attacker must already be an authorized user with these write permissions (PR:L), a privileged victim must interact by viewing the relevant form (UI:R), and it only affects versions prior to 2.4.37 and 3.1.8. Impact is browser-context (session/token theft, actions-as-victim) rather than direct server compromise.

Impact

This is a genuine but moderate-priority issue, not a critical remote-code-execution flaw. The CVSS 3.1 base score is 5.4 (AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N), which correctly captures a stored XSS: network vector but gated behind authentication (PR:L) and requiring victim interaction (UI:R). No EPSS score, no CISA KEV listing, and no public exploit code are provided in the input - so exploitation status is 'no public exploit identified at time of analysis.' The SSVC framework is not supplied. The vector's scope change (S:C) and the description's emphasis on 'further privilege escalation' and 'session or token theft' are the aggravating factors: because the payload executes in the browser of any user who opens the affected create/edit form - explicitly including administrators and superusers - a low-privileged but authorized attacker can pivot to full account takeover. That escalation path is what makes it more than a self-XSS. Balancing signals: high theoretical impact (superuser compromise) but meaningful preconditions (specific model-level permissions plus a privileged victim viewing the crafted object), no evidence of real-world exploitation, and a confirmed vendor patch. This warrants prompt patching for internet-exposed or multi-tenant Nautobot instances but is not an emergency for isolated deployments.

Exploit ScenarioDerived

A user who has been granted extras.add_relationship/change_relationship (or dcim.add_modulefamily/change_modulefamily) permissions stores a payload such as <script>alert('XSS')</script> in a Relationship description or Module Family name. When an administrator or superuser later opens a create/edit form that renders that value as form field help_text via render_field.html and Django's |safe filter, the script executes in the admin's authenticated session. No public exploit code is identified, but the fix's regression tests demonstrate the exact <script> payload, making reproduction trivial for an authorized user.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 22, 2026

Stored cross-site scripting in Nautobot (all versions prior to 2.4.37 on the 2.x branch and prior to 3.1.8 on the 3.x branch) lets an authenticated user with extras.add_relationship or extras.change_relationship permission inject HTML or JavaScript into a Relationship description, or with dcim.add_modulefamily or dcim.change_modulefamily permission inject it into a Module Family name, which then executes in the browser session of any user - including administrators and superusers - who opens an affected create or edit form. Because the payload runs in the victim's authenticated context with same-site access to the Nautobot UI, an attacker can perform actions as the victim and potentially steal session cookies or API tokens, enabling lateral movement and privilege escalation toward a full administrative compromise of the platform. No public exploit code has been identified at time of analysis and the issue is not confirmed actively exploited (CISA KEV), so risk is assessed as moderate rather than critical: exploitation requires a pre-existing authorized account with specific object-level write permissions, and a higher-privileged victim must interact with the poisoned form.

RemediationAI

Apply the vendor-released patches by upgrading to Nautobot 2.4.37 or 3.1.8 (matching your major line) as documented in GHSA-56v6-2fhr-wxgq, which incorporates the sanitization changes in commits e6ff20d50e0759135c6d278e7b2ceec56ed9b3c8 and f8a62466f3ebc42759a6373e7c79b0cad5751c2f; upgrading is the only complete fix because the escaping happens at render time. Until the upgrade can be scheduled, reduce the attack surface by auditing and tightening the four permissions that enable injection - extras.add_relationship, extras.change_relationship, dcim.add_modulefamily and dcim.change_modulefamily - removing them from any role that does not genuinely require them, recognizing that this blunts legitimate data-modeling workflows and may block users who author relationships or module families; separately, review existing Relationship description values and Module Family names for embedded HTML or JavaScript (anything containing <script>, onerror=, javascript: or event-handler attributes) and sanitize or clear them, since patched code stops execution but does not purge already-stored payloads. Additional compensating measures include deploying a Content-Security-Policy that disallows inline script, which would neutralize injected script execution at the browser but can break Nautobot UI components that rely on inline scripts, and limiting superuser accounts so that routine administration occurs under least-privileged roles, reducing the blast radius if a privileged user does open a poisoned form. Because the payload only triggers when a victim opens an affected form, there is no network-level block to apply; browser-session protection depends on the upgrade plus the permission and content clean-up above.

Affected VersionsENISA

nautobot 3.0.0, < 3.1.8
nautobot < 2.4.37

Affected Packages

pypi nautobot fix: 2.4.37, 3.1.8

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in pypi

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Nautobot is a Django-based Network Source of Truth and automation platform whose DCIM and Extras apps model physical infrastructure, relationships between objects, and metadata. The root cause is CWE-79 (Improper Neutralization of Input During Web Page Generation, i.e. cross-site scripting) arising from how user-controlled metadata is reused as Django form field help text. In nautobot/extras/models/relationships.py, Relationship.to_form_field() assigned self.description directly to field.help_text, and in nautobot/dcim/forms.py the Module form interpolated parent_bay.module_family.name into a help_text string via an f-string. These help_text values are subsequently emitted by the template render_field.html through Django's |safe filter, which deliberately bypasses autoescaping and instructs the browser to parse the string as HTML - so any markup stored in the description or module family name was rendered and executed rather than displayed as literal text. The upstream fix replaces raw assignment with context-aware escaping and sanitization: the Relationship description is now passed through render_markdown() (backed by nh3 sanitization, which strips dangerous tags such as <script> while still rendering legitimate Markdown like bold to <strong>), and the module family interpolation is wrapped in django.utils.html.format_html(), which escapes the interpolated value while preserving the developer-authored template markup. Regression tests were added in nautobot/extras/tests/test_relationships.py and nautobot/dcim/tests/test_forms.py (test_to_form_field_description_sanitized and test_module_family_help_text_escaped) that assert '<script>' does not appear and that '&lt;script&gt;' does appear, confirming the fix is escaping-based rather than input rejection. The CVSS vector AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N and the assessed scope change (S:C) reflect that the flaw crosses a privilege boundary - code executes in the browser of a user who may hold far greater permissions than the injector - while the low confidentiality and integrity scores reflect browser-context impact rather than direct server-side code execution.

Know when Nautobot gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 5.4 MEDIUM
AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
vuln.today AI 5.4 MEDIUM

Authenticated attacker needs specific write permissions (PR:L) and a victim must open the form (UI:R); stored XSS executes in another user's browser (S:C) with limited C/I impact and no availability effect.

3.1 AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:P/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
Required
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

Lifecycle Timeline

1
Patch available
Sep 22, 2026 - 21:03 EUVD

DescriptionCVE.org

Nautobot is a Network Source of Truth and Network Automation Platform. Prior to 2.4.37 and 3.1.8, a user with extras.add_relationship or extras.change_relationship permission can store HTML or JavaScript in a Relationship description, and a user with dcim.add_modulefamily or dcim.change_modulefamily permission can store it in a Module Family name. Nautobot assigns these values to form field help_text rendered by render_field.html through Django's |safe filter without adequate neutralization. The stored content executes in the authenticated browser session of any user, including an administrator or superuser, who opens an affected create or edit form. This can enable actions as the victim, session or token theft, and further privilege escalation. This issue is fixed in versions 2.4.37 and 3.1.8.

Threat Intelligence Overview

EPSS Score
0.3%
Top 77% exploitable
Prevalence
Low
niche network source-of-truth/automation platform, network-engineering teams only
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC Yes
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

47
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +27
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.

CVE-2023-46128 MEDIUM POC
6.5 Oct 25

Nautobot is a Network Automation Platform built as a web application atop the Django Python framework with a PostgreSQL

CVE-2026-83805 MEDIUM POC
6.4 Sep 22

Approval workflow gating in Nautobot 3.0.0 through 3.1.7 can be bypassed by an authenticated user who holds only the ext

CVE-2023-25657 CRITICAL
9.8 Feb 21

Nautobot is a Network Source of Truth and Network Automation Platform. Rated critical severity (CVSS 9.8), this vulnerab

CVE-2024-34707 MEDIUM POC
4.8 May 14

Nautobot is a Network Source of Truth and Network Automation Platform. Rated medium severity (CVSS 4.8), this vulnerabil

CVE-2025-49142 HIGH
7.1 Jun 10

A remote code execution vulnerability in Nautobot (CVSS 7.1). High severity vulnerability requiring prompt remediation.

CVE-2024-36112 MEDIUM
6.5 May 28

Nautobot is a Network Source of Truth and Network Automation Platform. Rated medium severity (CVSS 6.5), this vulnerabil

CVE-2023-48700 MEDIUM
6.5 Nov 21

The Nautobot Device Onboarding plugin uses the netmiko and NAPALM libraries to simplify the onboarding process of a new

CVE-2024-32979 MEDIUM
6.1 May 01

Nautobot is a Network Source of Truth and Network Automation Platform built as a web application atop the Django Python

CVE-2025-49143 MEDIUM
5.9 Jun 10

Nautobot is a Network Source of Truth and Network Automation Platform. Prior to v2.4.10 and v1.6.32 , files uploaded by

CVE-2024-23345 MEDIUM
5.4 Jan 23

Nautobot is a Network Source of Truth and Network Automation Platform built as a web application. Rated medium severity

CVE-2023-48705 MEDIUM
5.4 Nov 22

Nautobot is a Network Source of Truth and Network Automation Platform built as a web application All users of Nautobot v

CVE-2024-29199 MEDIUM
5.3 Mar 26

Nautobot is a Network Source of Truth and Network Automation Platform. Rated medium severity (CVSS 5.3), this vulnerabil

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy