Skip to content

Securing Multiparty Online Services Via Certification of Symbolic Transactions

Eric ChenJay LorchRui Wang

HardwareIEEE Symposium on Security and Privacy16 minAdvancedOpen on YouTube ↗

Engineers explore architecture and security mechanisms for Securing Multiparty Online Services Via Certification of Symbolic Transactions.

Summary

### Overview Multiparty online services—such as third-party payment, single sign-on (SSO), and multiparty authorization—frequently suffer from critical logic flaws. According to the Cloud Security Alliance, these vulnerabilities rank as the number four top threat in cloud computing, enabling attackers to check out without paying, hijack accounts, or gain unauthorized permissions. While formal program verification could theoretically prevent these issues, developers rarely adopt it due to substantial practical hurdles: translating ambiguous protocol specifications into per-party properties, accurately modeling complex platforms and arbitrary attacker behavior, and proving inductive safety invariants across infinite state spaces. To address these barriers, the authors present Certification of Symbolic Transactions (CST), a practical approach that significantly lowers the verification burden by verifying intuitive, system-wide multi-party properties at runtime.

### Key Topics - **Barriers in Traditional Verification**: Standard verification requires manually deriving formal specifications from informal protocol documentation, creating platform and attacker models, and deriving complicated loop invariants across infinite execution spaces. - **Ambient Predicates**: Global, intuitive safety specifications defined across all participating parties (for example, ensuring an order is checked out if and only if a corresponding valid payment was completed at the cashier). - **Symbolic Transactions (`simT`)**: Appending execution traces—specifically SHA-1 hashes of executed method source code—to transaction messages as they pass between parties. - **Protocol Independence**: The ability of CST to enforce end-to-end security properties even when system implementations deliberately deviate from or violate strict protocol specifications (such as OAuth 2.0).

### Technical Details CST operates directly on top of the actual execution platform without requiring an abstract model of the attacker, as transactions take place concretely. During a transaction, parties collect code identities into a message field called `simT` (symbolic transaction). Each step records the participating domain and a SHA-1 hash of the executed source method (e.g., `tstore.com::hash_place_order`). At the end of the transaction flow, the complete `simT` trace is passed to a verifier called the **certifier**.

The certifier consists of three components: 1. A **cache** storing prior verification results. 2. A **program synthesizer** that filters out steps from untrusted parties, stitches together the code of trusted steps, and appends an assertion representing the ambient predicate. 3. An off-the-shelf **C# program verifier** that symbolically checks whether the synthesized sequence logically implies the ambient predicate.

If the symbolic check succeeds, the result is cached and the transaction is committed; if it fails (for instance, if an attacker attempts to substitute checkout parameters using an untrusted store), the transaction is rejected.

The system was evaluated on open-source ASP.NET solutions, including two third-party payment systems (e.g., nopCommerce with Amazon Payments), three single sign-on solutions, and a multiparty gambling scenario involving four distinct entities. Integrating CST required fewer than 200 lines of code modified or added per party. Due to caching, CST achieved near-zero amortized runtime overhead. In an evaluation against 14 known vulnerabilities, CST successfully prevented 12 logic flaws (the remaining two were an explicit signature validation flaw and a client-side same-origin access violation).

### Takeaways CST sits on the middle ground between static verification and runtime checking by executing symbolic verification on concrete transactions at runtime. Instead of requiring developers to understand complex protocol flows and design intricate per-party local checks, CST enables them to enforce straightforward, system-wide safety properties. Furthermore, because proof obligations apply only to the specific transaction executing at that moment rather than all possible transactions across an infinite state space, verification becomes practical and deployable in real-world systems.

Related talks