Azure DevOps


Following the lateral movement to the robisl user, further advancement proved challenging as the user’s home directory was devoid of any content. Additionally, the examining of user privileges of the robisl user did not yield a path for progression.

I will check back at the Azure DevOps server instance. Given the user’s membership to the Production group, this may imply not only does the user possess access to the Azure DevOps instance, but also potentially wields higher privileges compared to the previous nathen user.

Successfully authenticated to the Azure DevOps instance as the robisl user

While the robisl user is also part of the ekenas collection, much like the nathen user, the project assigned to the user is different. PartsUnlimited is the project

parts unlimited is also PartsUnlimited is a fictional project created by Microsoft, serving as a comprehensive example for showcasing various features and practices in software development. It encompasses a broad range of aspects, including application architecture, continuous integration, deployment pipelines, and the utilization of Azure DevOps services. The project is designed to illustrate real-world scenarios and best practices in a practical and accessible manner. Source code is available

Since this project is also just another dummy project with arbitrary data, I will only report the key findings

Administrator and restorer users are also part of this project, alongside the previous SmartHotel360 project

Repos


In contrast to the previous HotelSmart360 project, there is only a single repository, PartsUnlimited, containing many more branches None of the files contain any considerable information

Pipelines


Interestingly, there is not a single pipeline configured for the PartsUnlimited application. Given the source management appears to be actively maintained with many branches, this is rather strange

I might be able to create a new pipeline. I will check the permissions of the current user below

Permission and Access


Checking the Security section in the Project settings reveals the exact same scenario as the previous case. The robisl user has a transitive group membership to the Contributors group via the PartUnlimited Team team This grants the user to conduct the exact same build exploitation technique that was previously used to gain the initial foothold

Agent pools


However, checking the Agent pool reveals the significant difference There is a single agent pool, Setup, that is owned by the administrator user

Given there are no additional service connections or service identities associated with the Setup agent pool in the PartsUnlimited project, and it’s owned by the administrator user, the build execution context is likely associated with the security context of the administrator user for the builds within this agent pool.

Although there is a small possibility of the difference between privileges of the administrator user set to the target system as a user account and privileges of the administrator user specifically assigned WITHIN the Azure DevOps server instance, it is highly unlikely

Setup.Agents


There are way more agents available within the Setup agent pool

Setup.Details


The Details section in the Setup agent pool indeed confirms the singular and exclusive ownership by the administrator user

Setup.Security


The Security section in the Setup agent pool shows that Pipeline permissions is enabled This is critical difference because enabling Pipeline permissions grants the ability to create, edit, and execute pipelines within the context of this agent pool It essentially means that I can leverage this configuration to escalate privilege by creating a pipeline itself. Build made using a newly created pipeline will then be executed under the security context of the administrator user as identified above

Moving on to the Privilege Escalation phase