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

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

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 23, 2026·7 min read·2 visits

Executive Summary (TL;DR)

A validation discrepancy between Nautobot controllers allows authenticated low-privileged users to directly POST forged approval responses, bypass group and permission checks, and trigger the execution of privileged automated tasks.

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.

Vulnerability Overview

Nautobot serves as an authoritative Network Source of Truth and Network Automation Platform, orchestrating complex state definitions and managing sensitive network resources. To control risk, Nautobot employs an approval workflow framework that acts as a gatekeeper for critical administrative actions and automated script executions, such as scheduled jobs. These workflows are constructed from sequential approval stages, each defined by validation rules including designated group permissions, object change privileges, and response thresholds.

The application separates the management of these workflows into distinct controllers and objects: the high-level workflow stage container and individual approval stage response records. This architectural decoupling exposed a broad attack surface, as it relied on nested business logic in specific controller pathways rather than central validation enforcement at the model level. An oversight in endpoint routing allowed the model viewset handling the individual response records to be reached directly, bypass the stage validations, and process raw database writes.

As a result, a low-privileged authenticated user holding only standard response creation permissions could interact directly with the standalone response endpoint. By sending a crafted payload, the attacker could bypass the operational constraints defined on the parent stage, such as authorized user group constraints, single-response constraints, and specific object-level editing requirements. This systemic flaw effectively undermined the entire integrity of Nautobot's automation control loop.

Root Cause Analysis

The vulnerability stems from an inconsistency in authorization verification between Nautobot's main stage controller and the individual stage-response endpoints. Nautobot implemented critical business validations—verifying that an approver belongs to the correct approver group, verifying that the approver possesses change permissions on the targeted object, and ensuring a one-vote-per-user limit—solely inside the custom action methods approve and deny of the ApprovalWorkflowStageViewSet controller. The generic REST API router, however, simultaneously registered a standard Django REST Framework ModelViewSet named ApprovalWorkflowStageResponseViewSet at /api/extras/approval-workflow-stage-responses/.

When clients invoked this generic ViewSet via a standard HTTP POST request, the application did not propagate or enforce the complex authorization checks written inside the custom action methods of the parent ViewSet. Instead, it executed standard model-level creation validations, which only verified basic field syntax and basic foreign key relationships. The critical business-logic constraints designed to govern approval validation and maintain procedural safety were bypassed during these direct create requests.

Compounding this issue, the ApprovalWorkflowStageResponseSerializer defined the user and state fields as writable parameters without restricting them to read-only access. Because of this mass-assignment flaw, an attacker could supply any arbitrary user identifier in the user payload parameter, effectively impersonating an administrator or an authorized approver. When the API accepted and stored these forged response objects, the state machine updated the collective approval status of the stage, initiating transitions and executing scheduled jobs automatically once the threshold was met.

Code Analysis and Fix Assessment

To analyze the defect and verify the resolution, consider the structural changes introduced in commit 8682707d0391cbfd7694e3276127b78dc9cf29d8. The primary fix strategy was to eliminate the standalone, routable endpoints entirely and modify the deserialization rules to make the response properties read-only.

In the vulnerable application, the URL router registered the viewset directly:

# Nautobot URL Router (nautobot/extras/api/urls.py)
# BEFORE PATCH: Standalone route was exposed to clients
router.register("approval-workflow-stage-responses", views.ApprovalWorkflowStageResponseViewSet)

This allowed direct HTTP requests to target response creations without checking stage rules. The patch completely excised this line from the router configuration, removing the endpoint route. Furthermore, the patch redefined the ApprovalWorkflowStageResponseSerializer to make both the user and state fields read-only:

# Nautobot Serializers (nautobot/extras/api/serializers.py)
# AFTER PATCH: Enforcing read-only state and nesting inside parent views
class ApprovalWorkflowStageResponseSerializer(ValidatedModelSerializer):
    user = serializers.SerializerMethodField()
 
    def get_user(self, obj):
        # Safe nested serialization implementation
        pass
 
    class Meta:
        model = ApprovalWorkflowStageResponse
        fields = [
            "id",
            "user",
            "comments",
            "state",
            "last_updated",
        ]
        read_only_fields = ["user", "state"]

This configuration prevents direct creation or modification of these sensitive fields through any endpoint. The parent serializer was updated to render these responses strictly as read-only nested items, fetching only relevant entries via explicit user permission restrictions using .restrict(request.user, 'view'). This architectural overhaul ensures that no variant attacks targeting the response object can succeed, making the fix complete.

Exploitation Methodology

Exploitation of CVE-2026-83805 requires an active, authenticated user session with basic write permissions on the response models (extras.add_approvalworkflowstageresponse). The attacker must also locate a pending approval workflow stage, which is commonly associated with restricted network orchestration tasks. Once these conditions are met, the attack proceeds by bypassing the designed user checks.

The attacker targets the standalone endpoint /api/extras/approval-workflow-stage-responses/ with an HTTP POST request. The payload specifies the target stage's UUID, an administrative user's UUID in the user field, and sets the state field to approved. The lack of server-side validation against the request's authenticated token allows the creation of this response record under the administrative user's identity.

By executing multiple requests using different spoofed administrative UUIDs, an attacker can sequentially satisfy the minimum approver threshold (min_approvers). When the final required approval is inserted, the model save event handler automatically transitions the parent ApprovalWorkflow object. This state change directly triggers the execution of the associated ScheduledJob on the system under the identity of the user who originally scheduled it, resulting in execution.

Security Impact Assessment

The security impact of this vulnerability is significant, particularly due to the role Nautobot plays in managing live production enterprise networks. By bypassing approval gates, a low-privileged authenticated user can force the immediate execution of restricted automation scripts. Because scheduled jobs often run with administrative network credentials, this access allows the attacker to manipulate network topologies, extract sensitive device configuration variables, or alter credentials without oversight.

From an operating system perspective, if a scheduled job is configured to perform system-level tasks or execute custom code on the underlying container, the attacker can leverage this bypass to achieve arbitrary code execution. This code execution occurs in the context of the Nautobot worker container, which may lead to lateral movement within the hosting infrastructure. The CVSS vector CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N reflects this scope change, indicating that a failure in the application layer directly impacts the security boundaries of downstream connected network devices.

At the time of this analysis, the vulnerability is not listed in CISA's Known Exploited Vulnerabilities catalog, and no public functional exploit or active in-the-wild campaigns have been observed. However, the technical ease of execution, requiring only a low-privileged account to issue structured REST requests, elevates the operational risk. Organizations relying heavily on Nautobot for workflow-gated network deployments face a elevated threat landscape until they deploy remediations.

Remediation and Detection Guidance

The recommended and primary path of remediation is upgrading all Nautobot instances to version 3.1.8 or later. This release completely removes the vulnerable standalone endpoint and implements strict nested serialization rules to prevent unauthorized direct writes to the database.

If an immediate upgrade is not feasible, administrators should restrict the extras.add_approvalworkflowstageresponse permissions. Removing this permission from all non-administrative and low-privileged user roles prevents access to the vulnerable endpoint path. Valid users who need to approve or deny workflow stages can continue to use the secure /approve/ or /deny/ actions of the ApprovalWorkflowStageViewSet controller, which enforce appropriate group validations.

Additionally, security teams can deploy a Web Application Firewall (WAF) or API gateway rule to drop incoming HTTP requests matching the vulnerable path. Specifically, any POST, PUT, PATCH, or DELETE requests directed to /api/extras/approval-workflow-stage-responses/ should be blocked and logged for incident response. Network detection systems can monitor application logs for anomalous approval responses where the database creator does not match the designated author.

Official Patches

NautobotCommit implementing nested read-only serializer architecture and removing standalone routers

Fix Analysis (1)

Technical Appendix

CVSS Score
6.4/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N

Affected Systems

Nautobot Network Automation Platform

Affected Versions Detail

Product
Affected Versions
Fixed Version
Nautobot
Nautobot
>= 3.0.0, < 3.1.83.1.8
AttributeDetail
CWE IDCWE-285
Attack VectorNetwork (AV:N)
CVSS v3.1 Score6.4 (Medium)
EPSS Score0.00
Exploit Statusnone
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-285
Improper Authorization

The product does not perform or incorrectly performs an authorization check when an actor attempts to access a resource or perform an action.

Vulnerability Timeline

Patch commit merged into deployment release branches
2026-07-17
GitHub Security Advisory and CVE-2026-83805 published
2026-09-22
Nautobot version 3.1.8 released carrying official fixes
2026-09-22

References & Sources

  • [1]GHSA-q4c5-2j6f-r476 Security Advisory
  • [2]Nautobot Fix Commit 8682707
  • [3]Nautobot Release v3.1.8 Official Tag
  • [4]NVD - CVE-2026-83805
  • [5]CVE.org - CVE-2026-83805

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

•7 minutes ago•CVE-2026-83801
5.4

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

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.

Alon Barad
Alon Barad
0 views•5 min read
•about 2 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
3 views•6 min read
•about 3 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 4 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 5 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 6 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