Curriculum·G202 Vulnerability Classes a User Must Understand·about 30 min

The missing access check

By the end of this lesson you can

  • Explain what an access-control check is and what happens when a privileged function has none
  • State how Poly Network let an attacker rewrite the keeper that authorized cross-chain transfers
  • Compute why access-control failures are total rather than partial when the missing check guards a privileged function
  • Identify, for a protocol you use, which functions are privileged and what proves the caller is allowed

Graduate · enrolled learners

This lesson opens with Poly Network, 10 August 2021.

What happened
Poly Network moved assets across Ethereum, BSC and Polygon through a cross-chain manager contract. One of its functions, verifyHeaderAndExecuteTx, executed instructions carried in cross-chain messages, and the manager contract had the authority to change which public key, the keeper, was allowed to authorize those messages. The two responsibilities were not properly separated: the attacker crafted a cross-chain message that called the function which sets the keeper, replacing the legitimate keeper with one they controlled. From then on the attacker could authorize any transfer, and they drained about 611 million dollars across three chains in minutes. The attacker later returned essentially all of it, saying they had done it to expose the flaw.
The decision point
The manager contract could execute instructions and could change its own authorization key, and nothing checked that only a legitimate party could invoke the second power through the first. That is a missing access-control check: a privileged function, changing who is trusted, reachable by an unprivileged caller. Access-control failures are the second-largest class of DeFi loss, and they are almost always total rather than partial, because the function that got exposed is usually the one that grants power over everything else. A user cannot read every line, but they can ask the question that finds this class: which functions here are privileged, and what proves the caller is allowed to call them.
Recorded loss
$611,000,000

What you will be able to answer

  • What is a missing access-control check?
  • How was Poly Network drained?
  • Why are access-control failures total?
  • The question that finds this class?

Orientation and Year One are open: anyone can read them without an account. From Year Two onward the lessons are for enrolled learners, because progress through the later years only means anything if it is tracked against a record.

It is free. We do not sell the list and there is nothing to buy at the end of it.

Terms used here

Sources and review

Confidence high·Volatility medium·Reviewed 2026-09-14·Owner unassigned

Contested

The precise call path in Poly Network is described slightly differently across analyses, but all agree the root cause was a privileged keeper-setting capability reachable through an insufficiently guarded cross-chain execution function.

F103-05 owns delegation and authorization from the user's key-custody angle. This lesson uses Poly Network for the protocol-side access-control class. Keep the split.