September 8th, 2024

Exploiting CI / CD Pipelines for fun and profit

A severe exploit chain can occur from publicly exposed .git directories, allowing unauthorized server access. Regular audits and secure configurations are essential to prevent such vulnerabilities in deployment pipelines.

Read original articleLink Icon
Exploiting CI / CD Pipelines for fun and profit

The Razz Security Blog discusses a severe exploit chain that can occur due to the public exposure of a .git directory, which can lead to a complete server takeover. The author discovered that many websites still expose their .git directories, which contain sensitive information, including credentials. By accessing the .git/config file, the author was able to clone the repository and found that the code owners used Bitbucket Pipelines for deployment. The pipeline was configured to log into the production server and execute a git pull command, which allowed the author to modify the pipeline configuration to add their SSH key to the server's authorized_keys file. After pushing these changes, the author gained shell access to the server, effectively compromising it. The blog emphasizes the importance of monitoring SSH keys, not exposing .git directories publicly, and regularly auditing code repositories and deployment pipelines to prevent such vulnerabilities.

- Public exposure of .git directories poses significant security risks.

- Bitbucket Pipelines can be exploited if not properly secured.

- Modifying pipeline configurations can lead to unauthorized access.

- Regular audits of SSH keys and server configurations are essential for security.

- Developers and sysadmins should take proactive measures to secure their CI/CD processes.

Link Icon 7 comments
By @theamk - 4 months
The real problem is keeping sensetive information in .git directory. Like WTH would you put your password, in plaintext, in some general ini file? (or into a source file for that matter)?

When I see things like those, they look so wrong to me. But sadly it's apparently uncommon nowadays: not only random bloggers, even my coworkers see nothing wrong with putting passwords or tokens into general config or source code files. "it's just for a quick test"1 they say and then they forget about it and the password is getting checked in, or shown at screenshare meeting.

Maybe that's why there are so many security problems in industry? /rant

(For those curious: for git specifically, use ssh with key auth. If for some reason you don't want this, you can set up git's credential helper to use your OS key store; or use plaintext git-crendetials, or even just good-old .netrc. For source code, something like "PASSWORD = open("/home/user/.config/mypass.txt").read().strip()" is barely longer than hardcoding it, but 100% eliminates chance of accidental secret checkin or upload)

By @TiddoLangerak - 4 months
Am I missing something, or does the step in

> Pushing Malicious Changes to the Pipeline

mean that they already have full access to the repository in the first place? Normally I wouldn't expect an attacker to be able to push to master (or any branch for that matter). Without that, the exploit won't work. And with that access, there's so many other exploits one can do that it's really no longer about ci/cd vulns.

By @ransom1538 - 4 months
100% of the script kiddies moved to .env and .git. My logs are filled with request for GET /.env 404. All the kiddies focus mainly on those two, I think the return is the best for their effort. The .env file is super trendy now and used across languages now.
By @sebazzz - 4 months
I don’t understand why some authentication mechanisms, like Github Tokens don’t use a refresh token mechanism. So the token can be handed in once to create a refresh token, and then with that expiring access token can be requested. Now we (as users) have to bother with constantly expiring long-term tokens, not nothing in which of the hunderds of places we’ve might have put them.
By @ghxst - 4 months
Does this actually occur with real or high-value targets? I'm genuinely curious, as I can only envision this happening with smaller side projects. However, I'd be interested to hear any stories of encountering this in the wild. It's a good reminder to stay mindful of what might accidentally be exposed.
By @mlhpdx - 4 months
I’ve never deployed a .git folder and wonder what systems/approaches lead to such a thing. How does that happen?
By @ram_rattle - 4 months
naive question: Doesn't github secret scan kind of thing wont catch this?