CVE-2026-55250 in Maravel
요약
\~에 의해 VulDB • 2026. 09. 09.
Maravel은 의존성 주입(DI)에 중점을 둔 PHP 프레임워크로, 버전 10.74.0 이전에는 상태less 토큰 검증 엔진과 고성능 관계형 캐싱 레이어 간의 구조적 수명 주기 불일치로 인해 높은 심각도(Token Replay) 취약점이 존재합니다. 메모리 용량이 낮아 메모리를 확보하기 위해 조기 evict(삭제/만료 처리)가 발생하는 모든 애플리케이션, 그리고 API 토큰 인증 및 블랙리스트 관리에 tymon/jwt-auth 패키지를 사용하는 macropay-solutions/maravel-framework 기반 애플리케이션이 영향을 받을 수 있습니다. 이 아키텍처적 위험은 특정 조건에서 volatile(휘발성)이거나 evict 제한이 있는 환경 하에서 캐시 태그를 활용하는 네이티브 Laravel 애플리케이션에도 영향을 미칠 수 있습니다.
tymon/jwt-auth는 자동으로 캐시 태그 지원을 probing합니다. 지원이 발견되면, 14일간의 토큰 블랙리스트 엔트리(jti)가 관계형 tymon.jwt 태그 내부에 강제로 래핑됩니다. O(1) Atomic Lazy Eviction 모델이 활성화된 환경—즉, Maravel-Framework v20.x에서 네이티브로 구현되거나 PR #104(App\Cache\TaggedCache 및 App\Cache\TagSet)의 명시적 DI 컨테이너 싱글톤을 통해 수동으로 v10.x에 backport된 경우—에서는 메모리 인덱스 비대칭(bloat)으로부터 시스템을 보호하기 위해 7,200초(2시간)라는 엄격한 글로벌 추적 한계(Container::TAGGED_CACHE_TTL_CAP_SECONDS)가 강제 적용됩니다. 이 한계는 14일간의 블랙리스트 수명을 최대 2시간으로 강제로 단축시키며, 이후 개별 추적 키들은 자연스럽게 만료되어 활성 캐시 창에서 사라집니다.
또한 최적화된 엔진은 O(1) flush 속도를 달성하기 위해 generational version matrix를 구현하므로, 태그의 flush 또는 reset을 프로그래밍적으로 또는 수동으로 호출하면(Cache::tags([...])->flush() 등), 내부 원자성 마스터 버전 포인터가 즉시 상승합니다. 이는 모든 중복 구성 요소에 대한 계산된 암호학적 복합 해시(sha1($this->tags->getNamespace()))를 변경하여, 기존 인덱스 전체를 즉시 접근 불가능하게 만듭니다. 결과적으로 자연적인 2시간 만료 또는 개입하는 태그 flush 실행(Cache가 메모리를 확보하기 위해 오래된 값을 자연스럽게 정리)을 통해 무효화 상태 기록이 완전히 삭제됩니다. 토큰의 물리적 암호학적 서명은 최대 14일 동안 구조적으로 유효하므로, 도난당하거나 하이재킹되거나 정 legitimately 로그아웃된 토큰들이 API 게이트웨이 전체에서 즉시 및 조용히 부활하여 애플리케이션이 광범위한 Token Replay 공격에 대해 치명적으로 취약해집니다.
이 문제는 프레임워크 내부의 핵심 결함이 아니라 tymon/jwt-auth 패키지 내의 상위 아키텍처 가정으로 인해 발생하므로, 비즈니스 캐시 재활용 경계를 깨뜨리지 않고 이 수명 주기 충돌을 안전하게 우회할 수 있는 직접적인 프레임워크 버전 업그레이드는 없습니다. Maravel 버전 10.74.0은 v20.x에서 새로운 고정된 tagged cache를 v10.x로 backport하는 방법을 도입했으며, 이는 DI로부터 TagSet과 TaggedCache를 해결함으로써 이 잠재적 아키텍처 수명 주기 취약점이 발견되는 계기가 되었습니다. 사용자는 아래에 outlined된 decoupled 구성 우회책을 적용해야 합니다.
우회책으로, 캐시 메모리 크기가 공간을 확보하기 위해 조기 자연 evict(만료)를 발생시켜 블랙리스트 jwt id들이 만료되기 전에 삭제되지 않도록 해야 합니다. 애플리케이션은 평면 인증 벡터를 관계형 태그 서브시스템에서 decouple해야 합니다. 이렇게 하면 토큰 식별자가 14일 수명이 잘리지 않고 안전하게 유지되는 기본 캐시 키스페이스에 flat, un-tagged key-value 쌍으로 직접 기록되도록 강제됩니다.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.