Feature Request: Multi-Owner Authorization (Quorum) for Sensitive Org-Level Actions #12451
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Existing problems this enhancement addresses
Currently, a single organization owner has the unilateral power to perform "destructive" or high-impact actions, such as transferring a repository to a different organization or deleting it entirely. This creates two major risks:
Enhancement description
Proposed Workflow:
Possible Configuration Options:
Xowners to approve" or "Require $X$% of owners."Details and notes
Security vs. Governance:
This should be viewed strictly as a security layer. It is not intended to replace project governance or consensus-building, but rather to ensure that a single compromised account or rogue owner cannot hijacked a project's history and home.
The "Deadlock" Scenario:
What happens if the number of active owners falls below the required quorum?
Possible solution brought up by @zoe:
If after a predetermined period there is no (significant?) opposition, it is approved.
Audit Logs:
Not sure if there should be an audit log?
@wetneb is this by any chance within the area you wanted to work on for organizations?
Just a thought here. That would also require being able to change it. The code would need to ensure, that an owner cannot just change this value to 1 and then delete.
So maybe a quorum change would also need to be configurable. Also would have to think about deadlock situations (what if someone becomes inactive, is not reachable anymore and thus cannot Approve a change).
Even a waiting period would be good in general. If the minimal quorum is met it is executed directly. Otherwise after a (predetermined time) it is also executed unless the number of "disagrees" is higher.
This would solve the first problem.
Also imagine a bad actor adding enough people to the Owners Team and then letting them all execute the action (I do not have a solution for that).
@zoe wrote in https://codeberg.org/forgejo/forgejo/issues/12451#issuecomment-14450666:
yeah all the settings related to this enhancement should also be protectable.
Yeah that is a good idea to auto-execute if there isn't opposition after the predetermined time as it indeed elegantly handles the
Deadlock Scenario. It just means you have to wait a bit longer.FYI Github enterprise has some capabilities in this direction https://docs.github.com/en/enterprise-cloud@latest/admin/managing-accounts-and-repositories/managing-repositories-in-your-enterprise/governing-how-people-use-repositories-in-your-enterprise
Note that for single-owner projects extra fiddling should not be introduced (if I fully control project I want to be able to delete/move/whatever it).
Though opt-in may be wanted, to limit damage in case of a hack?
another attack would be adding 20 dummy accounts as co-owners and voting with such sockpuppets to approve move
or kicking out co-owners/co-maintainers and then performing restricted action
maybe minimal time instead? so no matter what some action cannot be taken within first 24h?
(though there may be a valid reason for immediate action to be taken....)
That's a really interesting issue, thanks for the ping @Gusted. It does fit the overall scope of my work interests.
It seems difficult to design something around this specific actions (transfer, deletion, archival).
That being said, one way of making this danger less of an issue would be to reduce the need to make people "Owners" of organizations in the first place. Which can be done in various ways (both of which I am interested in exploring):
@wetneb wrote in https://codeberg.org/forgejo/forgejo/issues/12451#issuecomment-14463461:
I don't think that this issue can really be solved by trying to circumvent it. As long as there are owners, there can be problems. https://www.theregister.com/software/2025/09/25/open-source-to-closed-doors-rubygems-control-fight-erupts/1440976 is another example how it can play out.
In Forgejo Actions, I'm striving for moving things out of the Git repository into the settings. Having settings in the Git repository is a giant headache because almost everybody has write access to the repository. That makes things like
permissionsin workflows almost pointless.