🇰🇷 한글 설명
Sylius 오픈소스 이커머스 프레임워크의 쇼핑 계정 API에서 권한 우회 취약점이 발견되었습니다. 인증된 고객이 특정 채널에서 사용이 제한된 결제 수단을 주문에 강제로 할당할 수 있는 문제입니다. 이는 결제 프로세스의 무결성을 해칠 수 있습니다.
💡 쉬운 설명
쇼핑몰 고객이 원래는 사용할 수 없는 결제 수단을 몰래 선택하여 주문할 수 있는 보안 허점이 발견되었습니다. 관리자가 특정 채널에서 막아둔 결제 방식을 고객이 임의로 사용할 수 있는 상태입니다.
🇺🇸 원문 (English)
Sylius is an Open Source eCommerce Framework on Symfony. Starting in version 2.0.0 and prior to version 2.0.18, 2.1.15, and 2.2.6, an authorization bypass vulnerability exists in the shop account API. The `PATCH /api/v2/shop/account/orders/{tokenValue}/payments/{paymentId}` endpoint, used by an authenticated shop customer to change the payment method of an order that has been placed but not yet paid (state `STATE_NEW`), does not validate that the chosen payment method is enabled for the order's channel. The equivalent checkout endpoint (`PATCH /api/v2/shop/orders/{tokenValue}/payments/{paymentId}`) correctly rejects out-of-channel payment methods with `HTTP 422`; the account endpoint silently accepts them and returns `HTTP 200`. An authenticated customer can therefore assign any globally enabled payment method to their own placed order, including methods that the store operator has explicitly excluded from that channel. The issue is fixed in versions: 2.0.18, 2.1.15, 2.2.6 and above. As a workaround, decorate the `Sylius\Bundle\ApiBundle\Changer\PaymentMethodChangerInterface` service in the application.
📍 영향받는 시스템
Sylius 2.0.0 ~ 2.0.17, 2.1.0 ~ 2.1.14, 2.2.0 ~ 2.2.5
⚔️ 공격 벡터
인증된 사용자가 특정 API 엔드포인트(PATCH /api/v2/shop/account/orders/{tokenValue}/payments/{paymentId})를 호출하여 채널 제한을 우회함
🛡️ 대응 방법
Sylius를 버전 2.0.18, 2.1.15, 2.2.6 이상으로 업데이트하거나 PaymentMethodChangerInterface 서비스를 데코레이션하여 수정함
🔧 검증 코드
출력된 버전이 취약한 버전 범위(2.0.18, 2.1.15, 2.2.6 미만)에 해당하는지 확인합니다.
composer show sylius/sylius | grep versions