🔍 CVE-2026-47127

6.5
CVSS Score
MEDIUM
2026-08-07
2026-09-09 20:55
✅ 완료

🇰🇷 한글 설명

Ghostfolio의 Stripe 결제 성공 URL 핸들러가 결제 상태를 검증하지 않고 프리미엄 구독을 부여하는 취약점입니다. 공격자는 결제 여부와 상관없이 특정 세션 ID를 통해 1년 프리미엄 구독을 스스로 획득할 수 있습니다.

💡 쉬운 설명

돈을 내지 않고도 결제가 완료된 것처럼 속여 유료 기능을 사용할 수 있는 보안 결함입니다. 결제 확인 절차가 누락되어 있어 누구나 무료로 프리미엄 서비스를 이용할 수 있습니다.

🇺🇸 원문 (English)

Ghostfolio is an open source wealth management software. Prior to version 3.4.0, Ghostfolio's Stripe checkout success-URL handler at `GET /api/v1/subscription/stripe/callback?checkoutSessionId=<id>` retrieves the Stripe Checkout Session by ID and unconditionally grants a Premium subscription to the session's `client_reference_id` — without ever checking `session.payment_status` or `session.status`. There is no separate Stripe webhook endpoint with `stripe-signature` verification; this callback is the sole code path that creates Stripe-driven subscriptions. Any authenticated user can self-grant a 1-year Premium subscription without ever paying. Version 3.4.0 rejects sessions unless `session.payment_status === 'paid'` AND `session.status === 'complete'` (fails closed). Additionally, new unique `stripeCheckoutSessionId` column → a session can't be redeemed twice (race-safe via DB unique constraint).

📍 영향받는 시스템

Ghostfolio 3.4.0 미만 버전

⚔️ 공격 벡터

인증된 사용자가 조작된 checkoutSessionId를 포함하여 결제 콜백 API에 GET 요청을 전송

🛡️ 대응 방법

Ghostfolio를 3.4.0 이상의 최신 버전으로 업데이트

🔧 검증 코드

애플리케이션의 버전 정보가 3.4.0 이상인지 확인하여 취약점 여부를 판단합니다.

Shell / Script
curl -s http://<target-host>/api/v1/health | grep -i 'version' || echo 'Check version via application UI or logs'

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N

💻 영향받는 소프트웨어

Magento Open Source