CVE-2026-55250: Maravel-Framework Token Replay Vulnerability via Premature JWT Blacklist Eviction in Tagged Caches

Published Sep 8, 2026
·
Updated

Maravel, a PHP framework oriented towards dependency injection, prior to version 10.74.0 has a high-severity Token Replay Vulnerability arising from a structural lifecycle mismatch between stateless token validation engines and high-performance relational caching layers. Any application with low cache memory that causes premature eviction to free up memory and applications running macropay-solutions/maravel-framework that utilize tymon/jwt-auth for API token authentication and blacklist management or any other package that does the same may be affected. This architectural risk might also impact native Laravel applications utilizing cache tags under specific volatile or eviction-capped environments. tymon/jwt-auth automatically probes for cache tag support. If found, it forcefully wraps 14-day token blacklist entries (jti) inside a relational tymon.jwt tag. In environments where the O(1) Atomic Lazy Eviction model is active — either natively inside Maravel-Framework v20.x or manually backported into v10.x via the explicit DI container singletons provided in PR #104 (App\Cache\TaggedCache and App\Cache\TagSet) — a strict global tracking ceiling (Container::TAGGEDCACHETTLCAPSECONDS) of 7,200 seconds (2 hours) is enforced to secure the system against memory index bloat. This ceiling forcefully truncates the 14-day blacklist lifespan down to a maximum of 2 hours, after which individual tracking keys naturally expire and disappear from the active cache window. Furthermore, because the optimized engine implements a generational version matrix to achieve O(1) flush speeds, any programmatic or manual invocation of a tag flush or reset (e.g., Cache::tags([...])->flush()) instantly bumps the internal atomic master version pointer. This shifts the computed cryptographic composite hash (sha1($this->tags->getNamespace())) for all overlapping components, rendering the entire existing index immediately unreachable. Consequently, through either natural 2-hour expiration or an intervening tag flush execution (like the cache naturally cleaning old values to free up memory), the invalidation state records are entirely wiped out. Because the tokens' physical cryptographic signatures remain structurally valid for up to 14 days, stolen, hijacked, or legitimately logged-out tokens are instantly and silently resurrected across the entire API gateway, leaving the application critically vulnerable to widespread Token Replay Attacks. Because this issue is caused by an upstream architectural assumption within the tymon/jwt-auth package rather than a core defect inside the framework, there is no direct framework version upgrade that can safely bypass this lifecycle collision without breaking business cache recycling bounds. Maravel version 10.74.0 introduced a way to backport the new fixed tagged cache from 20.x into 10.x by resolving TagSet and TaggedCache from DI, which is how this latent architectural lifecycle vulnerability was discovered. Users must apply the decoupled configuration workaround outlined below. As a workaround, make sure that cache memory size does not generate early natural evictions from cache to free up space, deleting blacklisted jwt ids before they expire. Applications must decouple flat authentication vectors from the relational tagging subsystem. This forces token identifiers to write directly to the primary cache keyspace as flat, un-tagged key-value pairs where they securely retain their unclipped 14-day lifecycle.

Affected Software

2 affected components
Maravel Maravel-Framework<10.74.0
npm/tymon/jwt-auth

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Configuration

    Set Container::TAGGED_CACHE_TTL_CAP_SECONDS to 7200 seconds (2 hours) so the 14-day jwt blacklist lifespan is truncated to a maximum of 2 hours, allowing invalidation state records to be naturally wiped from the active cache window.

    Maravel-Framework (cache tagged cache TTL cap) Container::TAGGED_CACHE_TTL_CAP_SECONDS = 7200
  2. Configuration

    Adjust application/cache memory sizing so cache memory size does not generate early natural evictions to free up memory; ensure blacklisted jwt ids are not deleted before they expire (workaround: maintain blacklist entries at least until their intended lifecycle end).

    Tagged cache workaround (jwt blacklist eviction workaround) cache memory sizing / cache eviction behavior = prevent early natural evictions
  3. Configuration

    Do not manually or programmatically invoke tag flush/reset (e.g., Cache::tags([...])->flush()) in environments using the O(1) Atomic Lazy Eviction model, because tag flush/reset can instantly bump the internal master version pointer and forcefully wrap 14-day jwt blacklist entries (jti) inside a relational tymon.jwt tag, triggering the replay vulnerability condition.

    Maravel-Framework (tag flush / reset) cache tag flush invocation policy (e.g., Cache::tags([...])->flush()) = avoid manual/programmatic invocation
  4. Compensating control

    Decouple flat authentication vectors from the relational tagging subsystem used for caching/tagging of jwt blacklist state to prevent premature blacklist eviction and token replay across the API gateway.

Event History

Sep 8, 2026
CVE Published
via MITRE·10:17 PM
Data Sourced
via MITRE·10:17 PM
DescriptionWeakness

Frequently Asked Questions

1

Which deployments are most exposed to this issue?

Applications using macropay-solutions/maravel-framework with tymon/jwt-auth for API authentication and token blacklist management may be affected, particularly where low cache memory causes eviction. Native Laravel deployments using cache tags may also be affected in volatile or eviction-capped environments.

2

What conditions are required for token blacklist entries to be vulnerable to eviction?

tymon/jwt-auth must detect cache-tag support and place 14-day blacklist entries in its tymon.jwt tag. The O(1) Atomic Lazy Eviction model must also be active, either natively in Maravel-Framework v20.x or through the specified App\Cache\TaggedCache and App\Cache\TagSet backport in v10.x.

3

How can an operator check whether the relevant cache implementation is in use?

Review whether the deployment uses the O(1) Atomic Lazy Eviction model. For v10.x deployments, check whether the explicit DI-container singleton implementations App\Cache\TaggedCache and App\Cache\TagSet from PR #104 have been installed; v20.x is described as having the model natively.

4

What version should Maravel-Framework 10.x users move to?

The issue affects versions prior to 10.74.0, so 10.x users should use version 10.74.0 or later.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203