Notes / Web Security

비즈니스 로직 결함 (Business Logic)

금액 반복 악용·단계 건너뛰기·수량/가격 조작·한도 우회처럼 '정상 기능을 의도와 다르게' 쓰는 비즈니스 로직 결함의 개념과 확인 구문을 정리합니다.

비즈니스 로직 결함은 입력이 깨지는 게 아니라 정상 요청을 의도와 다른 순서·조합·값으로 써서 규칙을 어긴다. 스캐너가 못 잡고 사람이 흐름을 이해해야 보인다.

개념

애플리케이션은 “사용자가 의도대로 쓴다”고 가정한 흐름을 가진다. 그 가정이 서버에서 강제되지 않으면 깨진다 — 단계 건너뛰기, 음수·소수 수량, 가격을 요청으로 지정, 쿠폰·포인트 반복 적용, 2FA 상태 누락, 조회 기능이 정보 오라클이 됨.

결제 흐름: 장바구니 → 가격확정 → 결제 → 배송
결함: '가격확정'을 건너뛰고 결제에 price=0 을 직접 전송

공격·우회 구문

허가된 범위·테스트 계정에서만.

수량·가격·금액 조작

quantity=-1          음수로 총액 차감/환불 유발
price=0 / price=0.01 가격을 요청에서 지정(서버 재계산 안 하면)
amount 를 소수·매우 큰 수·통화 단위 혼동으로

단계 건너뛰기 / 순서 변경

확인·검증 단계 URL을 건너뛰고 최종 단계 직접 호출
2FA·이메일 인증 전 상태에서 보호 기능 접근
결제 전에 '완료' 상태로 만드는 요청(상태 전이 강제 안 됨)

반복·경합 악용

쿠폰·포인트·추천 보상 반복 적용(멱등성 없음) → 레이스 컨디션 결합
무료 체험·가입 보너스 재발급

오라클·정보 추론

조회/검증 응답 차이로 비공개 정보 추론(존재 여부·잔액·관계)
가격 비교·재고 API 로 내부 상태 역추적

확인 요령

흐름을 먼저 '정상'으로 한 번 돌려 상태 전이·검증 지점을 기록
각 단계를 건너뛰거나 값·순서를 바꿔 서버가 거부하는지
불변 조건(잔액≥0, 수량>0, 가격=DB값)이 서버에서 강제되는지

참고 자료