Loading...
Skip to main content

CVE-2026-54593 — Vulnerability in github.com/pterodactyl/wings —...

HIGH

Pterodactyl's improper JWT scoping allows subuser to upload files when not explicitly granted `file.create` permissions

Published July 28, 2026Updated August 18, 2026Source: osv

Summary

### Summary A privilege escalation vulnerability exists in the Wings /upload/file endpoint due to insufficient validation of panel-signed JWTs. Wings accepts any valid panel-signed JWT containing `server_uuid`, `user_uuid`, and `unique_id`, regardless of the token’s intended purpose. Because the Panel issues JWTs with these same claims for other lower-privilege operations (such as WebSocket authentication and file download links), an authenticated subuser can reuse one of those tokens to upload arbitrary files without possessing the required `file.create` permission. ### Impact Any subuser with permission to connect to a server's console, download files, or download backups could reuse those tokens to upload arbitrary files to the _same server_. A user that does not have access to a server as a subuser is not able to arbitrarily upload files. ### Details The panel generated JWT tokens for various purposes: - https://github.com/pterodactyl/panel/blob/0f82c105201b192d229f6abd5827e2ee7e672a05/app/Services/Backups/DownloadLinkService.php#L33-L36 - https://github.com/pterodactyl/panel/blob/0f82c105201b192d229f6abd5827e2ee7e672a05/app/Http/Controllers/Api/Client/Servers/FileUploadController.php#L45 - https://github.com/pterodactyl/panel/blob/0f82c105201b192d229f6abd5827e2ee7e672a05/app/Http/Controllers/Api/Client/Servers/WebsocketController.php#L58-L61 - https://github.com/pterodactyl/panel/blob/0f82c105201b192d229f6abd5827e2ee7e672a05/app/Http/Controllers/Api/Client/Servers/FileController.php#L82-L85 Though as the actual purpose is not conveyed part of the JWT tokens, this introduces this vulnerability of being able to do non-intended actions due to the expected fields (i.e. `server_uuid`) on most endpoints being the same when parsing it on wings' side. ### PoC Create a new subuser that has the minimal amount of permissions on a server (`websocket.connect`). As that subuser, retrieve a websocket JWT token from the `GET /api/client/servers/[...]/websocket` endpoint (in my case, I manually just make a request under that user's browser session; you can probably just resend the /websocket request in browser console to get a fresh unused token). Using that websocket token, we can abuse this by directly using it in the `/upload/file` endpoint of the wings node instead of using it for websocket authentication: ```python3 import requests wings_url = 'http://[...]:8080' websocket_token = '[...]' res = requests.post(f'{wings_url}/upload/file', params = { 'token': websocket_token, }, files = { 'files': ('file-upload.txt', b'Hello, World!'), }) print(res.status_code, res.content) ``` Observe, that even though our subuser never has permissions outside viewing the console, they are able to write arbitrary files in the server. This pattern happens in a lot of other action, but this is probably the most interesting one.

Advisory Timeline

  • First published July 28, 2026 (76 days ago).
  • Last revised August 18, 2026 — 21 days after initial publication.

Remediation

Upgrade to the fixed version using your package manager.

Go
Update github.com/pterodactyl/wings to 1.12.2 or later
go get github.com/pterodactyl/wings@v1.12.2
Composer
Update pterodactyl/panel to 1.12.3 or later
composer require "pterodactyl/panel:^1.12.3"

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (2)

Affects 2 ecosystems: go (1), packagist (1).

PackageEcosystemAffectedFixed In
github.com/pterodactyl/wings
go
All versions1.12.2
pterodactyl/panel
packagist
v0.1.0-beta, v0.1.1-beta, v0.1.2-beta, v0.2.0-beta (+117 more)1.12.3

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 8.1 score means for each attack dimension.

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

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H

Frequently Asked Questions

What is CVE-2026-54593?
Pterodactyl's improper JWT scoping allows subuser to upload files when not explicitly granted `file.create` permissions This vulnerability has been assigned a severity rating of HIGH (CVSS score: 8.1/10).
How do I check if my project is affected by CVE-2026-54593?
CVE-2026-54593 affects github.com/pterodactyl/wings and pterodactyl/panel. Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2026-54593 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
8.1

High exploitability or significant impact. Prioritize remediation within days.

Also Known As

GHSA-8r6w-3qq5-4p4r
GO-2026-6120

Related CVEs

  • CVE-2025-49132
    CRITICAL

    Pterodactyl Panel Allows Unauthenticated Arbitrary Remote Code Execution

  • CVE-2024-27102
    CRITICAL

    Pterodactyl Wings vulnerable to improper isolation of server file access

  • CVE-2023-25168
    CRITICAL

    Pterodactyl Wings contains UNIX Symbolic Link (Symlink) Following resulting in deletion of files and directories on the host system

  • CVE-2026-26016
    CRITICAL

    Pterodactyl Panel Allows Cross-Node Server Configuration Disclosure via Remote API Missing Authorization

  • CVE-2026-52855
    CRITICAL

    Wings exposes node configuration secrets through egg configuration-file templating

  • CVE-2026-107809
    HIGH

    Nginx-UI AuthRequired token cookie fallback enables CSRF against management APIs

  • CVE-2026-107813
    HIGH

    Nginx UI: Incomplete fix of CVE-2026-84315 - the api/cluster router was not - wrapped in RequireSecureSession, so those sensitive mutations run without OTP step-up

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies