Skip to content
Heist/ feed
Back to feed
Critical

Convoy: JWT Signature Verification Bypass Allows Authentication as Arbitrary Users

Type: advisorySources: OSV

Convoy is a KVM server management panel for hosting businesses. From version 3.9.0-beta to before version 4.5.1, the JWTService::decode() method did not verify the cryptographic signature of JWT tokens. While the method configured a symmetric HMAC-SHA256 signer via lcobucci/jwt, it only validated time-based claims (exp, nbf, iat) using the StrictValidAt constraint. The SignedWith constraint was not included in the validation step. This means an attacker could forge or tamper with JWT token payloads — such as modifying the user_uuid claim — and the token would be accepted as valid, as long as the time-based claims were satisfied. This directly impacts the SSO authentication flow (LoginController::authorizeToken), allowing an attacker to authenticate as any user by crafting a token with an arbitrary user_uuid. This issue has been patched in version 4.5.1.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-33746
Confirmed fixed CVEs
Not specified
Updated in this feed
3 Nov 2026, 16:55 UTC · Revision 1

Source evidence

Convoy: JWT Signature Verification Bypass Allows Authentication as Arbitrary Users

core-osv · Original source

Published 2 Apr 2026, 15:06 UTC

Convoy is a KVM server management panel for hosting businesses. From version 3.9.0-beta to before version 4.5.1, the JWTService::decode() method did not verify the cryptographic signature of JWT tokens. While the method configured a symmetric HMAC-SHA256 signer via lcobucci/jwt, it only validated time-based claims (exp, nbf, iat) using the StrictValidAt constraint. The SignedWith constraint was not included in the validation step. This means an attacker could forge or tamper with JWT token payloads — such as modifying the user_uuid claim — and the token would be accepted as valid, as long as the time-based claims were satisfied. This directly impacts the SSO authentication flow (LoginController::authorizeToken), allowing an attacker to authenticate as any user by crafting a token with an arbitrary user_uuid. This issue has been patched in version 4.5.1.

osv:CVE-2026-33746
Complete source record
{
  "id": "9177053fa0e05866fcef181db705d7a7ed2d71e959124a05861bdf1b6fdffc45",
  "url": "https://osv.dev/vulnerability/CVE-2026-33746",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Convoy: JWT Signature Verification Bypass Allows Authentication as Arbitrary Users",
    "summary": "Convoy is a KVM server management panel for hosting businesses. From version 3.9.0-beta to before version 4.5.1, the JWTService::decode() method did not verify the cryptographic signature of JWT tokens. While the method configured a symmetric HMAC-SHA256 signer via lcobucci/jwt, it only validated time-based claims (exp, nbf, iat) using the StrictValidAt constraint. The SignedWith constraint was not included in the validation step. This means an attacker could forge or tamper with JWT token payloads — such as modifying the user_uuid claim — and the token would be accepted as valid, as long as the time-based claims were satisfied. This directly impacts the SSO authentication flow (LoginController::authorizeToken), allowing an attacker to authenticate as any user by crafting a token with an arbitrary user_uuid. This issue has been patched in version 4.5.1.",
    "evidence": "osv:CVE-2026-33746",
    "products": [],
    "severity": "critical",
    "structured": {
      "id": "CVE-2026-33746",
      "aliases": [
        "CVE-2026-33746",
        "GHSA-92pg-3w49-4w5x"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/convoypanel/panel",
              "type": "GIT",
              "events": [
                {
                  "introduced": "ed7bff8443359c3b5f3cab4ec6beb177f7fbf7a3"
                },
                {
                  "fixed": "cd5131d1bc1b5a69aa6bbdc10fa4946924e8b2d9"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "3.9.0-beta"
                      },
                      {
                        "fixed": "4.5.1"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "fixed": "cd5131d1bc1b5a69aa6bbdc10fa4946924e8b2d9"
                      }
                    ],
                    "source": "REFERENCES_TAG",
                    "original_tag": "v4.5.1"
                  },
                  {
                    "cpe": "cpe:2.3:a:convoypanel:convoy:*:*:*:*:*:*:*:*",
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "4.5.1"
                      }
                    ],
                    "source": "CPE_RANGE"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v4.5.0",
            "v4.5.0-rc.1",
            "v4.4.0",
            "v4.3.1",
            "v4.3.0-rc.1",
            "v4.2.4",
            "v4.2.3",
            "v4.2.2-rc.2",
            "v4.2.2-rc.1",
            "v4.2.1-rc.1",
            "v4.2.0-beta",
            "v4.1.0-beta",
            "v4.0.0-beta",
            "v4.0.0-rc.6",
            "v4.0.0-rc.5",
            "v4.0.0-rc.4",
            "v4.0.0-rc.3",
            "v4.0.0-rc.2",
            "v4.0.0-rc.1",
            "v3.9.0-beta"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-33746.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:30.828588885Z",
      "provider": "osv",
      "references": [
        "https://github.com/ConvoyPanel/panel/releases/tag/v4.5.1",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/33xxx/CVE-2026-33746.json",
        "https://github.com/ConvoyPanel/panel/security/advisories/GHSA-92pg-3w49-4w5x",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-33746"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-287",
          "CWE-347"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/33xxx/CVE-2026-33746.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-33746",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 497618,
  "published_at": "2026-04-02T15:06:05.832+00:00"
}