How WrappedCBDC Closed a Blacklist Bypass in Its cNGN Stablecoin Before Launch

A HackenProof private security audit of WrappedCBDC's Canton-based cNGN stablecoin uncovered a caller-controlled admin registry that let any party forge their own compliance state—bypassing the token's blacklist and mint revocation controls. All 10 findings were resolved.
CLIENT—WrappedCBDC Limited
INDUSTRY—Stablecoins (Compliant fiat-backed)
PROGRAM TYPE—Private Security Audit
SCOPE—Smart contracts (DAML/Canton)
01—CASE OVERVIEW
WrappedCBDC Limited - cngn.co
WrappedCBDC Limited is the issuer of cNGN, a compliant Nigerian Naira stablecoin pegged 1:1 to the Naira and backed by reserves. Built on DAML for the Canton network, cNGN is designed to bring the Naira on-chain for fast, transparent, and cost-effective digital payments and settlement—with compliance controls like blacklisting, mint authorization, and pause built directly into the token's smart contracts.
HackenProof ran a private security audit from July 28-30, 2026, reviewing WrappedCBDC's core DAML modules before they carry real-world value. Two dedicated HackenProof auditors manually reviewed the Admin, CNGN, Forwarder, and Setup contracts, uncovering a critical gap in how the token's compliance controls were actually enforced on-chain.
10—Total findings identified across the audit—all resolved before the final report
3 days—Audit duration—July 28 to July 30, 2026
2—Dedicated HackenProof auditors who reviewed the Canton/DAML codebase
KEY FINDING—1 High—Caller-controlled admin registry that bypassed blacklist and mint revocation controls
02—CHALLENGES
As a compliant, fiat-backed stablecoin, cNGN's security requirements go beyond typical DeFi contracts—its blacklist, pause, and mint-authorization logic are the regulatory backbone of the token, not optional features.
Compliance controls under adversarial pressure
For a fiat-backed stablecoin, blacklisting and freeze controls exist to satisfy AML and sanctions obligations. Any bypass isn't just a bug—it's a regulatory exposure with real-world consequences.
Canton's unfamiliar privacy model
Canton determines which parties can even read a contract, not just who can act on it. Standard EVM-style access-control review doesn't directly translate, requiring auditors fluent in DAML's stakeholder model.
No unique identity for the compliance registry
The token's blacklist and mint-policy object had no contract key or authenticated identity mechanism—nothing on-chain proved which registry copy was the issuer's real one.
Compressed 3-day review window
A full manual review of core compliance logic, spanning four DAML modules, needed to be completed and validated with runnable proof-of-concept scripts within a tight timeline.
03—HOW IT WORKED
As a private engagement rather than a crowdsourced program, HackenProof assigned a small, dedicated audit team to manually review WrappedCBDC's compliance-critical contracts end to end.
01—Scope definition on Canton DAML modules
The audit covered four core modules from WrappedCBDC's GitHub repository: Admin.daml (compliance registry and permissions), CNGN.daml (token logic), Forwarder.daml (relayed execution), and Setup.daml (initialization).
02—Manual review by two dedicated auditors
HackenProof assigned two auditors who combined line-by-line code review with adversarial scenario modeling—testing not just what the code does, but what an attacker could make it do.
03—Findings across the severity spectrum
The team identified 1 high-severity issue, 2 medium-severity issues, 3 low-severity issues, and 4 additional informational findings covering dead code and configuration gaps.
04—Proof-of-concept validation for every finding
Each vulnerability was backed by a runnable DAML script reproducing the exact exploit or defect—not just a theoretical description, but a script that WrappedCBDC's team could execute to confirm the issue.
05—Two-stage reporting to full resolution
A preliminary report was delivered August 3, giving WrappedCBDC's team time to remediate. The final report, issued August 19, confirmed all 10 findings had been resolved.
04—RESULTS
HIGH SEVERITY—1
High-severity finding: a forged admin registry that bypassed blacklist and mint-revocation checks entirely
MEDIUM SEVERITY—2
Medium-severity findings: a policy-visibility failure blocking legitimate transfers, and an unremovable zero-value token injection
LOW SEVERITY—3
Low-severity findings: a per-holding pause that couldn't enforce a true emergency stop, a burn function bypassing the blacklist, and unscoped mint authorization
RESOLUTION RATE—10/10
Findings resolved before the final report was issued—zero outstanding issues at delivery
FINDINGS BY SEVERITY
High—1
Medium—2
Low—3
Informational—4
05—VULNERABILITIES FOUND
The audit's most significant findings centered on how cNGN's compliance registry was authenticated—and, in one case, on a denial-of-service path that could clutter a victim's holdings indefinitely. All three were validated with runnable proof-of-concept scripts and resolved before the final report.
#1 High
Caller-Controlled Admin Registry Bypasses Blacklist and Mint Revocation
Type: Access Control Bypass
cNGN's compliance state—its blacklist and mint permissions—lives in a shared registry object that transfer and mint functions are supposed to check against the issuer's official copy. But nothing in the code verified that the registry a caller supplied actually belonged to the issuer. An attacker could create their own registry naming themselves as owner, with an empty blacklist and unrestricted mint permissions, and pass that forged object into their own transaction instead of the real one.
Potential impact:
- A blacklisted (frozen) holder could transfer every cNGN token they controlled to any recipient, defeating the platform's core AML and sanctions freeze
- A minter whose permission had been revoked could still execute every outstanding mint proposal assigned to them by creating a fresh forged registry for each one
- Both the receiver blacklist check and the exact mint-amount check were evaluated against the attacker's own forged registry rather than the issuer's real one
Discovered by: HackenProof audit team (@tchkvsky, @shealtielanz)
#2 Medium
Issuer-Only Policy Visibility Blocked Legitimate Transfers and Mints
Type: Access Control / Functionality Lock
Canton's privacy model determines who can even read a contract, not just who can act on it. The compliance registry was signed only by the issuer, meaning an ordinary holder or minter had no visibility into it at all. When a holder tried to transfer tokens, or a minter tried to execute an approved mint, the transaction failed before the blacklist or mint checks could even run—the ledger rejected the read of a contract the caller wasn't authorized to see.
Potential impact:
- Every normal transfer and every normal mint was blocked—the architecture as written could not process compliant transactions
- Transactions only succeeded during testing when attackers used their own forged registry (Finding #1)—not a safe workaround for legitimate users
- The fix required a joint-authorization design where the issuer co-signs each transfer or mint alongside the holder or minter
Discovered by: HackenProof audit team (@tchkvsky, @shealtielanz)
#3 Medium
Unremovable Zero-Value Token Injection
Type: Denial of Service / Unwanted Contract Injection
cNGN's token contract only required the issuer field to authorize its own creation, with the recipient listed as a passive, non-consenting observer. Any party could therefore create a token naming themselves as issuer and any other user as the recipient, with a zero-value balance. The recipient could not decline it, could not burn it (burn requires a positive balance), and could not archive it themselves, since they weren't a signatory to their own holding.
Potential impact:
- An attacker could repeat the injection indefinitely, using only their own authority, to permanently clutter a victim's active-contract set
- No cap, unique key, or consent mechanism existed to prevent or clean up the spam
- At scale, this could degrade a target's active-contract queries, wallet processing, and ledger storage allocation
Discovered by: HackenProof audit team (@tchkvsky, @shealtielanz)
Three additional low-severity findings addressed further compliance-control gaps—including a pause mechanism that couldn't enforce a true emergency stop across all holdings, and a burn function that let frozen holders still redeem tokens off-ledger. Four informational findings covered dead code, build-configuration issues, and design robustness gaps. All were resolved alongside the high and medium findings.




