Join our Newsletter — 33% off our NHI Course
Home› FAQ› Foundations & NHI Taxonomy› What are the signs that a Move specification…
Foundations & NHI Taxonomy

What are the signs that a Move specification is too weak to catch real bugs?

← Back to all FAQ
By NHI Mgmt Group Editorial Team Updated October 29, 2026 Domain: Foundations & NHI Taxonomy

A specification is too weak when the prover can satisfy it while obvious bad states remain possible, such as unconstrained permissions, missing resource conservation, or no assertion about who may call an entry function. Another sign is when the proof succeeds even after you remove key checks from the code, which means the specification is not pinning down the security property.

What makes a Move specification too weak to trust?

A weak specification leaves room for the prover to satisfy the rules without actually protecting the property you care about. That usually means the spec is too abstract, too permissive, or missing the exact safety condition that would rule out the bad state. The result is a proof that looks successful but does not meaningfully constrain the implementation.

One common sign is that the specification only checks a narrow slice of behavior, so unrelated but dangerous paths remain open. Another is that the proof still passes when you remove an important runtime check, which tells you the proof is not anchored to the security property itself.

Which gaps usually show the specification is underspecified?

Weak Move specs often fail in predictable ways. They may leave permissions unconstrained, so any caller can satisfy the model. They may omit resource conservation, so minting, burning, or balance drift is not prevented. They may describe a function’s intent without asserting who is allowed to invoke it, which lets the prover prove the function under assumptions the real system does not guarantee.

A good test is to ask whether the spec would still reject a clearly unsafe state if the code were changed in the wrong way. If the answer is no, the spec is probably describing the interface, not the invariant. In Move, that distinction matters because the strongest proofs come from invariants that track capability ownership, resource movement, and entry-point authorization.

How do you tell whether the proof is real or only cosmetic?

The best indicator is whether the specification fails when you deliberately weaken the implementation in a way that should be unsafe. If removing a check, relaxing a permission, or skipping a conservation rule does not break the proof, the specification is not pinning down the bug class. Another warning sign is when the prover succeeds only because the model omits a realistic caller, state transition, or resource edge case.

Look for specs that are satisfiable for the wrong reasons. For example, a property may be true because the model never reaches the dangerous state, not because the dangerous state is impossible. That is a coverage problem, not a proof of correctness. The stronger the property, the more it should force the prover to account for the exact preconditions that would make the bug possible.

Risk and Threat Considerations

A weak specification can create false confidence, especially when it permits privilege bypass, resource inflation, or unauthorized entry-point use to remain invisible to the proof. The practical risk is not just a missed bug, but a proof artifact that reassures reviewers while leaving the real failure mode untouched.

Failure mechanism: The spec omits a material invariant, so the prover validates a narrower or easier property than the one the code must actually satisfy. That lets unsafe states remain reachable even though the formal check reports success.

Impact: Reviewers may ship code that appears formally verified but still allows incorrect authorization, broken resource accounting, or other exploitable state transitions.

Practitioner Guidance

What to verify: Test the spec against the failure you most want to prevent. Remove a critical check, relax a permission boundary, or mutate a conservation rule and confirm the proof fails. If it still passes, the property is too weak or too indirect.

Common mistake: Treating a successful proof as evidence that the implementation is safe, when the spec may only prove that some execution path is consistent with the model. The useful question is whether the specification excludes the exact bad state, not whether the prover can find any satisfying state.

Practitioner takeaway: A useful Move specification should make the unsafe state unprovable, not merely make one implementation path look correct.

Free weekly newsletter

Subscribe to the NHI & AI Identity Journal

The latest on NHI and Agentic AI security – articles, research, breaches, news and events every week.

Bonus 33% off our NHI Course when you subscribe.

NHIMG Editorial Note
Reviewed and updated by the NHIMG editorial team on October 29, 2026.
NHI Mgmt Group — the #1 independent authority on Non-Human Identity, IAM, and Agentic AI security. nhimg.org