conda-smithy vulnerable to misrouted repository invitation by conda-forge-webservices[bot] due to GitHub username takeover leading to unintended write access in conda-forge feedstock repository
Description
conda-smithy is a tool for combining a conda recipe with configurations to build using freely hosted CI services into a single repository. Prior to version 3.61.0, a vulnerability in the conda-forge automated webservices allowed unintended write access to feedstock repositories through GitHub username takeover. The root cause is the use of mutable GitHub usernames as identifiers for repository invitation routing, rather than stable, immutable GitHub user IDs. Version 3.61.0 fixes the issue.
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
Affected products
2<3.61.0+ 1 more
- (no CPE)range: <3.61.0
- (no CPE)range: <3.61.0
Patches
Vulnerability mechanics
Root cause
"Use of mutable GitHub usernames as identifiers for repository invitation routing instead of stable, immutable GitHub user IDs."
Attack vector
An attacker monitors GitHub for usernames that have been freed (e.g., after a maintainer changes their username) and that still have pending conda-forge repository invitations. By registering the freed username, the attacker becomes the recipient of any future invitations tied to that old username. Accepting the invitation grants unintended write access to the associated feedstock repository, enabling supply-chain compromise [ref_id=2]. The root cause is the use of mutable GitHub usernames as identifiers instead of immutable GitHub user IDs [CWE-287].
Affected code
The vulnerability resides in the `configure_github_team` function within `conda-smithy`. The original code routed repository invitations and team membership based on GitHub usernames (mutable strings) rather than immutable GitHub user IDs. The patch introduces a durable mapping file (`.recipe_maintainers.json`) and checks that a username's current GitHub user ID matches the previously recorded ID before granting access [ref_id=1][ref_id=2].
What the fix does
The patch introduces a durable mapping file (`.recipe_maintainers.json`) stored in each feedstock repository that records the GitHub user ID associated with each maintainer username. Before adding a new maintainer to the GitHub team, the code now fetches the current user ID for that username and compares it against the previously recorded ID. If the IDs do not match, the user is not added, preventing a new registrant of a recycled username from gaining access. The same ID check is used when removing maintainers, ensuring that legitimate username changes are not treated as removals [ref_id=1].
Preconditions
- configA conda-forge maintainer must have changed their GitHub username, freeing the old username.
- inputThe freed username must still have a pending repository invitation or be listed as a maintainer in a feedstock recipe.
- authAn attacker must register the freed GitHub username before the legitimate maintainer updates the recipe.
Generated on Jun 19, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
2- github.com/conda-forge/conda-smithy/commit/3b0bcd92ebd6f41edd341401d84583a20911c587mitrex_refsource_MISC
- github.com/conda-forge/conda-smithy/security/advisories/GHSA-g95q-3cmj-fvh8mitrex_refsource_CONFIRM
News mentions
0No linked articles in our index yet.