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

CVE-2026-39386: Mass Assignment Privilege Escalation in Neko WebRTC Browser

Alon Barad
Alon Barad
Software Engineer

Apr 21, 2026·6 min read·16 visits

Executive Summary (TL;DR)

A mass assignment flaw in Neko's profile update API allows authenticated users to obtain admin privileges by submitting an `is_admin: true` JSON payload.

CVE-2026-39386 is a high-severity mass assignment vulnerability in the Neko virtual browser system. It permits any authenticated user to elevate their privileges to full administrative control by injecting the `is_admin` boolean flag during a profile update request.

Vulnerability Overview

Neko is a self-hosted virtual browser deployment application relying on Docker and WebRTC technologies. It exposes a web-based API to manage user sessions, room configurations, and stream controls. The system relies on this API to handle all state changes and user interactions.

The core vulnerability resides in this API, specifically within the user profile management endpoints. The system implements an endpoint intended to allow users to update benign profile attributes such as their display name. Due to improper input validation, this endpoint processes structural modifications to the underlying user data model.

The resulting mass assignment vulnerability allows any authenticated user to elevate their own privileges. The vulnerability does not require complex memory corruption or race conditions. It relies entirely on the predictable mapping between user-supplied JSON keys and backend data structures.

Root Cause Analysis

The vulnerability exists within the UpdateProfile function located in server/internal/api/session.go. When a user submits an HTTP request to modify their profile, the application retrieves the current MemberProfile structure from the active session. The application then passes this structure directly to a JSON unmarshalling utility function named utils.HttpJsonRequest.

Go's encoding/json package, which underlies this utility, automatically maps keys from the incoming JSON payload to exported fields in the target struct. The MemberProfile struct defines several fields that dictate user permissions and administrative status. The unmarshalling process does not differentiate between fields intended for user modification and fields reserved for system authorization.

Because the application uses the primary data model directly as a Data Transfer Object (DTO) for the incoming request, it fails to enforce an explicit boundary. The application lacks struct tags or intermediate validation steps to filter restricted parameters. This architectural design directly results in CWE-269 (Improper Privilege Management).

Code Analysis

The vulnerable implementation demonstrates a critical flaw in data binding. The application defines the profile variable using the current session state and immediately passes a pointer to this data into the unmarshalling function.

// Vulnerable implementation (Pre-patch)
func (api *ApiManagerCtx) UpdateProfile(w http.ResponseWriter, r *http.Request) error {
    session, _ := auth.GetSession(r)
    data := session.Profile()
    if err := utils.HttpJsonRequest(w, r, &data); err != nil {
        return err
    }
    err := api.sessions.Update(session.ID(), data)
    // ...
}

This implementation allows any provided JSON key to overwrite the corresponding struct field if the types match. The patched implementation introduces a strict allow-list approach for non-administrative users.

// Patched implementation
func (api *ApiManagerCtx) UpdateProfile(w http.ResponseWriter, r *http.Request) error {
    session, _ := auth.GetSession(r)
    profile := session.Profile()
 
    if !profile.IsAdmin {
        var payload types.MemberProfile
        if err := utils.HttpJsonRequest(w, r, &payload); err != nil {
            return err
        }
        profile.Name = payload.Name
    } else {
        if err := utils.HttpJsonRequest(w, r, &profile); err != nil {
            return err
        }
    }
    err := api.sessions.Update(session.ID(), profile)
    // ...
}

The patch checks the user's current administrative status before processing the request. Non-administrative users now have their input unmarshalled into a separate, temporary payload structure. The application then explicitly copies only the Name field from the temporary structure into the actual session profile. This remediation eliminates the mass assignment vector by breaking the direct binding between the HTTP request and the persistent session state model.

Exploitation Methodology

The exploitation methodology requires an attacker to possess valid authentication credentials for a low-privileged account on the target Neko instance. The attacker must also have network routing access to the API endpoints. No administrative intervention or social engineering is required to execute the attack.

The attack involves intercepting or constructing an HTTP request directed at the profile update endpoint. The attacker formats the request body as JSON and includes the specific field required to modify the administrative state.

{
  "is_admin": true,
  "name": "ElevatedUser"
}

The attacker transmits this payload via a POST or PUT request to the /api/profile endpoint. The application processes the request, unmarshals the is_admin key, and updates the session data store.

The system grants the attacker full administrative permissions immediately upon the subsequent request or session refresh. The attacker maintains this elevated access for the duration of the session.

Impact Assessment

Exploitation results in a complete compromise of the application's authorization framework. The attacker obtains identical capabilities to a legitimate system administrator. The attacker can execute administrative actions such as creating new user accounts, deleting existing users, and modifying access policies.

The attacker also gains complete control over the virtual browser environment. This control includes modifying room configurations, changing system passwords, altering browser settings, and managing active broadcasts. The attacker can interact with any data processed within the virtual browser sessions.

The attacker can terminate active sessions and forcibly disconnect legitimate users. This broad access model directly affects the confidentiality, integrity, and availability of the system. The CVSS 3.1 score of 8.8 accurately reflects the high severity and low complexity of this uncontrolled privilege escalation.

Remediation and Mitigation

The primary remediation strategy requires upgrading the Neko application to a patched version. Administrators operating the 3.0 release branch must deploy version 3.0.11 or later. Administrators operating the 3.1 release branch must deploy version 3.1.2 or later.

Organizations unable to apply the software updates immediately must implement temporary technical controls. Administrators can restrict network access to the API using a reverse proxy configuration. A reverse proxy or web application firewall can block requests targeting the /api/profile endpoint using methods other than GET, effectively preventing exploitation while disabling profile modification functionality.

Security teams must monitor application logs for unexpected access patterns targeting the profile endpoint. Auditing the administrative user list is necessary to detect successful exploitation attempts that occurred prior to patch application. All unauthorized administrative accounts discovered during this audit must be revoked immediately.

Official Patches

m1k1oNeko v3.1.2 Release Notes

Fix Analysis (2)

Technical Appendix

CVSS Score
8.8/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
EPSS Probability
0.12%
Top 69% most exploited

Affected Systems

Neko (m1k1o/neko)

Affected Versions Detail

Product
Affected Versions
Fixed Version
Neko
m1k1o
3.0.0 - 3.0.103.0.11
Neko
m1k1o
3.1.0 - 3.1.13.1.2
AttributeDetail
CWE IDCWE-269
Attack VectorNetwork
CVSS Score8.8 (High)
EPSS Score0.0012
ImpactTotal Instance Compromise
Exploit StatusProof of Concept
AuthenticationRequired (Low Privilege)

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-269
Improper Privilege Management

The software does not properly assign, modify, track, or check privileges for an actor, creating an unintended sphere of control for that actor.

Known Exploits & Detection

GitHub Security AdvisoryAdvisory containing the vulnerability mechanism and conceptual proof of concept.

Vulnerability Timeline

Fix commits pushed to the Neko repository.
2026-04-06
Vulnerability publicly disclosed via GitHub Security Advisory and CVE assigned.
2026-04-21
Patched versions v3.0.11 and v3.1.2 officially released.
2026-04-21

References & Sources

  • [1]GitHub Security Advisory GHSA-2gw9-c2r2-f5qf
  • [2]NVD CVE-2026-39386 Detail
  • [3]Fix Commit (v3.1.x)
  • [4]Fix Commit (v3.0.x)
  • [5]Project Releases v3.1.2

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

•19 minutes ago•CVE-2026-59199
7.5

CVE-2026-59199: Signed 32-Bit Integer Overflow and Heap Backward Underwrite in Pillow

A critical signed 32-bit integer overflow vulnerability was identified in Pillow (Python Imaging Library) versions prior to 12.3.0. The vulnerability resides within the native C extension library (libImaging) during coordinate and bounding box calculations in functions like ImagingPaste and ImagingFill2. Exploitation can bypass bounds and clipping safety checks, leading to a controlled heap backward underwrite and application crash.

Alon Barad
Alon Barad
0 views•6 min read
•about 1 hour ago•CVE-2026-59200
7.5

CVE-2026-59200: Remote Denial of Service via PDF Decompression Bomb in Pillow

CVE-2026-59200 is a high-severity uncontrolled resource consumption vulnerability in the Pillow Python Imaging Library. The flaw resides in the PDF stream decoder, allowing remote, unauthenticated attackers to trigger host out-of-memory crashes by submitting malicious PDF decompression bombs.

Alon Barad
Alon Barad
2 views•5 min read
•about 2 hours ago•CVE-2026-59203
5.3

CVE-2026-59203: Denial of Service via Infinite Loop in Pillow EPS Image Parser

A denial-of-service (DoS) vulnerability in Pillow (Python Imaging Library) versions 12.0.0 through 12.2.0 allows unauthenticated remote attackers to trigger 100% CPU utilization and hang the processing thread. The issue occurs within the Encapsulated PostScript (EPS) image parser (PIL/EpsImagePlugin.py) due to missing validation on the byte count parsed from %%BeginBinary: comments, allowing negative values to cause an infinite backward stream seek loop. This formatting-level state-looping issue occurs during the initial format sniffing phase inside Image.open() and does not require the system Ghostscript interpreter to be executed or present. It is resolved in version 12.3.0.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 3 hours ago•CVE-2026-59204
7.5

CVE-2026-59204: Denial of Service via Memory Exhaustion in Pillow JPEG2000 Decoder

A Denial of Service vulnerability exists in the JPEG2000 decoder of Pillow (versions 8.2.0 to 12.2.0) due to memory allocation state accumulation across tiles, leading to rapid process termination.

Amit Schendel
Amit Schendel
8 views•7 min read
•about 4 hours ago•CVE-2026-59205
7.5

CVE-2026-59205: Heap-Based Buffer Overflow in Pillow ImageCms Module

CVE-2026-59205 is a high-severity heap-based out-of-bounds write vulnerability affecting Pillow prior to version 12.3.0. The flaw stems from a validation omission in the ImageCmsTransform class where source and destination image modes are not checked against the configurations defined during the creation of the transform. An attacker can exploit this discrepancy to trigger a heap buffer overflow or an out-of-bounds read by supplying an under-allocated target image buffer.

Amit Schendel
Amit Schendel
7 views•5 min read
•about 5 hours ago•CVE-2026-12590
3.7

CVE-2026-12590: Fail-Open Limit Enforcement Vulnerability in body-parser

A vulnerability in the 'body-parser' Node.js middleware allows unauthenticated attackers to trigger a Denial of Service. When the 'limit' configuration option is misconfigured with an unparseable type or empty value, size limits fail open. This leads to unrestricted heap memory allocation and process crash via Out of Memory (OOM).

Amit Schendel
Amit Schendel
7 views•6 min read