Skip to content
Heist/ feed
Back to feed
Medium

Jexactyl: Free-billing order endpoint renews and unsuspends arbitrary servers by ID (missing ownership check)

Type: advisorySources: OSV

Jexactyl is a customisable game management panel and billing system. From 4.0.0 until 4.0.5, the POST /api/client/billing/free/process endpoint accepts a client-controlled server_id and loads the server without restricting the lookup to servers owned by the authenticated account. On installations with billing enabled, an authenticated user can renew or unsuspend another tenant's billable server when its renewal_date is non-null and more than seven days away, even without a subuser relationship to that server. This issue is fixed in version 4.0.5.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-107854
Confirmed fixed CVEs
Not specified
Updated in this feed
2 Nov 2026, 18:26 UTC · Revision 1

Source evidence

Jexactyl: Free-billing order endpoint renews and unsuspends arbitrary servers by ID (missing ownership check)

core-osv · Original source

Published 9 Oct 2026, 20:31 UTC

Jexactyl is a customisable game management panel and billing system. From 4.0.0 until 4.0.5, the POST /api/client/billing/free/process endpoint accepts a client-controlled server_id and loads the server without restricting the lookup to servers owned by the authenticated account. On installations with billing enabled, an authenticated user can renew or unsuspend another tenant's billable server when its renewal_date is non-null and more than seven days away, even without a subuser relationship to that server. This issue is fixed in version 4.0.5.

osv:CVE-2026-107854
Complete source record
{
  "id": "f92794fff2b2e5bf83e66e32bc27c994ab7831ae94f6c830e4b2402e0fa38803",
  "url": "https://osv.dev/vulnerability/CVE-2026-107854",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Jexactyl: Free-billing order endpoint renews and unsuspends arbitrary servers by ID (missing ownership check)",
    "summary": "Jexactyl is a customisable game management panel and billing system. From 4.0.0 until 4.0.5, the POST /api/client/billing/free/process endpoint accepts a client-controlled server_id and loads the server without restricting the lookup to servers owned by the authenticated account. On installations with billing enabled, an authenticated user can renew or unsuspend another tenant's billable server when its renewal_date is non-null and more than seven days away, even without a subuser relationship to that server. This issue is fixed in version 4.0.5.",
    "evidence": "osv:CVE-2026-107854",
    "products": [],
    "severity": "medium",
    "structured": {
      "id": "CVE-2026-107854",
      "aliases": [
        "CVE-2026-107854",
        "GHSA-9xwv-p7r5-5h5p"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/jexactyl/jexactyl",
              "type": "GIT",
              "events": [
                {
                  "introduced": "5106d69df2f0144fc05b2541b764682f996eb936"
                },
                {
                  "fixed": "4bccd3d0eaf34d9db5255842d18340d08af90400"
                },
                {
                  "fixed": "356a5b46a18d483ae90c862e130b1969e6df0777"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "4.0.0"
                      },
                      {
                        "fixed": "4.0.5"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "fixed": "356a5b46a18d483ae90c862e130b1969e6df0777"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "4bccd3d0eaf34d9db5255842d18340d08af90400"
                      }
                    ],
                    "source": "REFERENCES_TAG",
                    "original_tag": "v4.0.5"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v4.0.4",
            "v4.0.3",
            "v4.0.2",
            "v4.0.1",
            "v4.0.0"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-107854.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:22.221033675Z",
      "provider": "osv",
      "references": [
        "https://github.com/Jexactyl/Jexactyl/releases/tag/v4.0.5",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/107xxx/CVE-2026-107854.json",
        "https://github.com/Jexactyl/Jexactyl/security/advisories/GHSA-9xwv-p7r5-5h5p",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-107854",
        "https://github.com/Jexactyl/Jexactyl/commit/356a5b46a18d483ae90c862e130b1969e6df0777"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-639"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/107xxx/CVE-2026-107854.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-107854",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 488399,
  "published_at": "2026-10-09T20:31:02.541+00:00"
}