Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain account with relationship/modulefamily permissions
-
DeliveryStore script payload in description or family name
-
ExploitPrivileged victim opens create/edit form
-
Executionhelp_text rendered via |safe executes JS
-
ImpactSteal 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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 '<script>' 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
AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
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.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.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
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.
What every action level means
SSVC AssessmentENISA
Priority Score
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.
Nautobot is a Network Automation Platform built as a web application atop the Django Python framework with a PostgreSQL
Approval workflow gating in Nautobot 3.0.0 through 3.1.7 can be bypassed by an authenticated user who holds only the ext
Nautobot is a Network Source of Truth and Network Automation Platform. Rated critical severity (CVSS 9.8), this vulnerab
Nautobot is a Network Source of Truth and Network Automation Platform. Rated medium severity (CVSS 4.8), this vulnerabil
A remote code execution vulnerability in Nautobot (CVSS 7.1). High severity vulnerability requiring prompt remediation.
Nautobot is a Network Source of Truth and Network Automation Platform. Rated medium severity (CVSS 6.5), this vulnerabil
The Nautobot Device Onboarding plugin uses the netmiko and NAPALM libraries to simplify the onboarding process of a new
Nautobot is a Network Source of Truth and Network Automation Platform built as a web application atop the Django Python
Nautobot is a Network Source of Truth and Network Automation Platform. Prior to v2.4.10 and v1.6.32 , files uploaded by
Nautobot is a Network Source of Truth and Network Automation Platform built as a web application. Rated medium severity
Nautobot is a Network Source of Truth and Network Automation Platform built as a web application All users of Nautobot v
Nautobot is a Network Source of Truth and Network Automation Platform. Rated medium severity (CVSS 5.3), this vulnerabil
EUVD-2026-84814
GHSA-56v6-2fhr-wxgq
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB