Portswigger-Insufficient workflow validation

problem link

풀이

구매 워크 플로의 순서에 대해 잘못된 가정을 하고 있다. Lightweight l33t leather jacket 를 구매하라. wiener:peter 계정이 제공된다.

제품을 장바구니에 넣고 구매를 요청한다.

구매 요청 버튼을 누르면 POST /cart/checkout한다. 하지만 POST body에 따로 구매 물건에 대한 정보는 넣지 않는다. DB에 장바구니 목록이 저장되어 있고, checkout을 요청하면 구매 대상으로 적합한지 체크하는 것 같다.

돈이 모자라면 구매할 수 없다고 반응한다.

돈이 충분하다면 303 상태로 클라이언트를 리다이렉트 시킨다. /cart/order-confirmation?order-confirmed=true URL을 다시 요청하라고 한다.

클라이언트가 GET /cart/order-confirmation?order-confirmed=true 요청을 보내면 비로소 장바구니의 물건을 결제한다.

여기서 checkout 워크플로우를 생략하고 바로 GET /cart/order-confirmation?order-confirmed=true 요청을 하도록 하면 금액 체크를 우회할 수 있다. 장바구니에 구매하고 싶은 물건을 넣어두고 GET /cart/order-confirmation?order-confirmed=true 패킷을 재전송한다.

이 취약점은 사용자가 워크 플로우를 따르지 않고 제멋대로 패킷을 재전송할 수 있다는 점을 간과하여 생겼다. checkout 과정을 생략하고 GET /cart/order-confirmation?order-confirmed=true 요청을 재전송할 수 있다는 점을 간과하였다.


tags: writeup, business-logic-vul, wstg-busl-06, web hacking