Ceryvon Business Logic & Authorization Audit
Duplicate Refund Through Cross-Module State Desynchronization
NexaFlow Commerce
This document is a synthetic demonstration only.
It does not represent a vulnerability found in any real company.
Generated: 22 June 2026
In this synthetic example, the payment records show that the first refund for a delivered order has completed. Because the CRM-side approval-compatible state remains reusable, a second refund request can still reach the final payment operation.
The synthetic scope focuses on the refund workflow across the CRM, Order Management, and Payments modules.
High Risk
CRM-approved payment refund for a delivered order
The final refund operation should jointly validate CRM approval, order refund eligibility, payment and refund state, prior refund count, tenant boundary, and order ownership.
The final operation validates only part of the state and authorization controls required for a safe refund.
| Step | Actor / Role | Module | State Transition | Result |
|---|---|---|---|---|
| 1 | Support | CRM | Refund request is opened | CRM workflow begins |
| 2 | System | Order Management | Delivery and ownership context are validated | Order refund eligibility is loaded |
| 3 | CRM | CRM | Approval is recorded | Approval-compatible refund state is created |
| 4 | System | Payments | First refund is processed | Payment moves to refunded state |
| 5 | Support | Payments | Second refund request reaches the final operation | The control set remains incomplete |
| 6 | System | Payments | Refund count increases a second time | Duplicate-refund condition is created |
In the synthetic model, the final operation enforces one control while six required controls remain missing. After the second final refund step, the refund count reaches 2.
Ceryvon assessments operate within authorized environments and focus on defined workflows. This example does not claim that every vulnerability would be found or that complete security coverage is provided.