Tue. Sep 15th, 2026

OpenZeppelin Stellar Bug Can Accept Impossible Multisig Thresholds

ByShane Neagle

September 15, 2026 #OpenZeppelin
HackHack

A newly reported bug in OpenZeppelin’s Stellar smart-account library can allow a weighted multisignature policy to pass installation checks even when the legitimate signers attached to the rule can never satisfy its authorization threshold.

The issue, opened Sept. 14 in OpenZeppelin’s public Stellar Contracts repository, affects the weighted-threshold policy inside the accounts package and could leave an authorization rule unusable if it is configured incorrectly.

There is currently no evidence that the issue has been actively exploited or that customer funds have been stolen.

The reporter specifically characterized the finding as a configuration-safety and hardening gap rather than a library exploit. The immediate risk is availability: actions governed by a malformed rule can become impossible for legitimate users to authorize.

Issue #892 remains open in the repository.

The Validation Can Count Addresses That Cannot Actually Sign

OpenZeppelin’s Stellar smart-account architecture uses context rules to define which signers and policies are required for different types of actions.

One rule can apply broadly across an account. Another can be restricted to calls involving a particular smart contract. A third can govern deployment of specific contract code.

The weighted-threshold policy then allows those signers to carry different voting weights. A high-authority signer might have a weight of five while two lower-authority signers have a weight of one each, with an operation proceeding only after the combined weight reaches the configured threshold.

The newly reported problem sits inside the installation validation for that policy.

According to issue #892, the installation function checks whether the requested threshold is less than or equal to the total weight supplied in the configuration. But it does not first verify that every address receiving a weight actually belongs to the signer set for that context rule.

Runtime authorization works differently.

When an operation is later executed, the policy only credits weights belonging to signers that genuinely exist in the rule and successfully authenticate.

That means the number considered reachable during installation can be higher than the weight the real signer set can ever produce.

A Policy Can Pass Setup and Still Be Impossible to Satisfy

The issue provides a straightforward example.

Imagine a context rule containing two legitimate signers, A and B, each carrying a weight of one.

The weighted-policy configuration also includes an unrelated address, X, with a weight of 10 and sets the authorization threshold at 11.

The installation check sees a total weight of 12 and accepts the policy.

But X is not actually a signer in the context rule.

At runtime, A and B can contribute no more than two combined weight. No legitimate signature combination can ever reach the required 11.

The policy therefore passes its initial validation even though the people authorized by the rule can never use it successfully.

A closely related report, issue #891, was opened one day earlier on Sept. 13 and says the behavior was reproduced on Stellar testnet using OpenZeppelin’s unmodified multisig smart-account example.

In that reproduction, two valid delegated signers each had a weight of one, while a third address that did not belong to the rule carried a weight of five. A threshold of three was accepted because the installation code counted seven total weight.

A subsequent transfer carrying signatures from both legitimate rule signers failed with the smart-account authorization error NotAllowed.

An Outside Attacker Cannot Simply Rewrite Someone Else’s Wallet

This distinction is important when assessing the security impact.

OpenZeppelin’s standard smart-account management functions require authorization from the smart account itself before context rules, signers or policies can be modified.

There is therefore no current evidence that an arbitrary attacker can take a correctly configured Stellar smart account and remotely insert one of these impossible thresholds.

The problem instead arises when an authorized account configuration introduces the bad state.

The issue identifies account construction and the add-context-rule path as ways the malformed configuration can be created. The related report also says functions for changing thresholds or individual signer weights can accept states whose apparent reachability depends on weights belonging to non-members.

That makes this much closer to a dangerous configuration trap than to a conventional wallet exploit.

That does not make it irrelevant. Configuration failures inside on-chain financial infrastructure can become serious when the affected authorization rule governs treasury transfers, upgrades or administrative operations.

Signer Changes Can Create a Similar Problem Later

There is a second issue that makes the new finding more interesting.

OpenZeppelin already warns in its documentation that threshold policies are not automatically synchronized when administrators add or remove signers from their parent context rules.

If a signer is removed after a threshold has been configured, the remaining authorization power can fall below the stored requirement.

A five-of-five multisig, for example, becomes impossible to satisfy if two signers disappear but the policy still requires five signatures.

Weighted policies create the same kind of risk in a less obvious form. A signer can be removed from the rule while the policy still retains a weight entry that effectively no longer contributes at runtime.

OpenZeppelin consequently tells administrators to verify that a threshold remains achievable before removing signers and to update weights or thresholds alongside changes to the signer set.

That leaves two related routes into an unusable configuration.

The newly reported bug can apparently allow an impossible state to be accepted from the beginning. Separately, a policy that started out valid can become unreachable later if membership changes and the threshold configuration does not change with it.

The Damage Depends on Which Authorization Rule Is Broken

It would be too strong to say that every affected configuration automatically freezes an entire wallet.

OpenZeppelin smart accounts can contain multiple context rules, each governing different activities.

One could cover a specific decentralized application. Another could authorize deployment of contracts. A broader default rule could handle administrative actions across the account.

If a narrowly scoped rule becomes impossible to satisfy but another authorized management path remains intact, the account may still be able to repair or remove the broken policy.

The more serious case is a circular authorization failure where the damaged rule is itself required to approve the transaction needed to fix that rule.

That is when a configuration bug can become a practical account lockout.

The issue deserves more attention as the Stellar ecosystem expands beyond straightforward payments toward increasingly complex smart-contract, DeFi and programmable financial applications.

Why This Matters Without an Active Exploit

This is not the sort of vulnerability that immediately produces an attacker address holding millions of dollars in stolen assets.

That can make the problem look less serious at first glance.

But authorization infrastructure really has two security responsibilities.

It must prevent people who should not have access from acting.

It must also ensure that the people who are supposed to have access can actually exercise it.

This finding sits squarely in the second category.

The concerning part is not merely that somebody can enter a bad configuration.

It is that the installation validation can tell the developer the threshold is valid when the actual runtime signer set says otherwise.

If setup failed immediately, the mistake would be obvious.

Accepting the rule and discovering later — perhaps only when a critical transaction has to be signed — that authorization is mathematically impossible is a much more difficult failure to recover from.

Self-Custody Can Fail Through Lockout, Not Only Theft

Crypto security discussions naturally focus on losing funds to an attacker.

Was a private key stolen? Was a seed phrase exposed? Did unauthorized transactions move the assets?

Those risks are obviously real. The recent Coldcard security incident demonstrated just how damaging a flaw in wallet infrastructure can become when attackers are actually able to recover keys and drain assets.

But security also includes availability.

If a self-custodial smart account still owns its funds on-chain but nobody can produce an authorization that satisfies the account’s own policy, ownership and practical control stop being quite the same thing.

That is also why the wider discussion around hardware wallet security cannot be reduced to whether private keys remain offline. Secure wallet architecture also has to stay recoverable, understandable and operational when something goes wrong.

The Code Fix Looks Straightforward — Existing Accounts Are the Harder Question

The issue reporter proposed a relatively direct fix.

When the weighted-threshold policy is installed, OpenZeppelin could reject every weight entry belonging to a signer that does not exist in the associated context rule.

Another option would be to calculate total available weight exclusively from legitimate members of the rule rather than every entry supplied in the weight map.

The same principle would need to apply whenever a threshold or signer weight is modified later.

That would prevent new malformed configurations from being accepted.

The more interesting question is whether any such configurations already exist on-chain.

The reporter says the issue was found while developing RuleLens, an open-source checker designed to analyze configurations of deployed OpenZeppelin Stellar smart accounts.

That suggests a practical next step: scan deployed accounts for weighted-threshold policies containing weight entries for non-members or thresholds that cannot be reached by the current legitimate signer set.

Such a scan could determine whether the finding remains a theoretical safety gap or whether deployed smart accounts already contain potentially unusable rules.

The SDK Should Probably Catch This Before the Blockchain Does

The strongest long-term fix probably should not stop at the policy contract.

Wallet SDKs and account-management interfaces can catch this kind of mistake much earlier.

If a user defines Alice and Bob as the only legitimate signers, the frontend should not allow Carol to contribute weight to the same authorization threshold unless Carol is also added to the rule.

Likewise, removing Alice should immediately trigger a calculation showing whether the remaining signers can still satisfy the policy.

That type of defensive validation becomes increasingly valuable as crypto accounts move beyond ordinary private keys toward passkeys, session credentials, multiple signing schemes and more advanced identity security.

The extra flexibility is useful.

It also creates more combinations that wallet software has to prove remain usable.

The Next Things to Watch Are a Patch and an On-Chain Audit

For now, there is no evidence that this OpenZeppelin issue has been used to steal funds or compromise Stellar smart accounts.

That limitation matters and should remain clear.

The reported bug does not let an unauthorized person bypass the weighted multisig requirement.

Its risk runs in the opposite direction: the genuine authorized signers can end up unable to satisfy it themselves.

The important next developments will therefore be technical.

OpenZeppelin can patch installation and setter validation so only usable signer weight contributes to threshold checks. Wallet and SDK tooling can test threshold reachability whenever the signer set changes. Developers using the affected accounts implementation can also examine deployed configurations for stale or non-member weight assignments.

That broader lesson is useful well beyond Stellar.

Open-source authorization infrastructure does not have to leak a private key to cause a serious security problem.

Sometimes the failure is simpler: the software accepts a lock that no legitimate key can open.

Financial Markets Analyst and Digital Assets Journalist at  |  More Posts

Shane Neagle is a financial markets analyst and digital assets journalist specializing in cryptocurrencies, memecoins, prediction markets, and blockchain-based financial systems. His work focuses on market structure, incentive design, liquidity dynamics, and how speculative behavior emerges across decentralized platforms.

He closely covers emerging crypto narratives, including memecoin ecosystems, on-chain activity, and the role of prediction markets in pricing political, economic, and technological outcomes. His analysis examines how capital flows, trader psychology, and platform design interact to create rapid market cycles across Web3 environments.

Alongside digital assets, Shane follows broader fintech and online trading developments, particularly where traditional financial infrastructure intersects with blockchain technology. His research-driven approach emphasizes understanding why markets behave the way they do, rather than short-term price movements, helping readers navigate fast-evolving crypto and speculative markets with clearer context.

Leave a Reply

Your email address will not be published. Required fields are marked *