Gitea Security
什么是 Gitea
Gitea 是一个用 Go 编写的 自托管社区管理的轻量级代码托管 解决方案。
基本信息
Basic Gitea Information实验室
要在本地运行 Gitea 实例,你可以运行一个 docker 容器:
连接到端口3000以访问网页。
你也可以使用kubernetes运行它:
未认证枚举
请注意,默认情况下 Gitea 允许新用户注册。这不会给新用户在其他组织/用户仓库上特别有趣的访问权限,但登录用户可能能够查看更多的仓库或组织。
内部利用
在这种情况下,我们假设你已经获得了一些github账户的访问权限。
使用用户凭证/网页Cookie
如果你已经拥有某个组织内用户的凭证(或你窃取了会话cookie),你可以直接登录并检查你对哪些仓库有哪些权限,你在哪些团队中,列出其他用户,以及仓库是如何保护的。
请注意,可能会使用2FA,所以你只有在能够通过该检查的情况下才能访问这些信息。
请注意,如果你设法窃取了 i_like_gitea
cookie(当前配置为SameSite: Lax),你可以完全冒充该用户,无需凭证或2FA。
使用用户SSH密钥
Gitea允许用户设置SSH密钥,这些密钥将用作代表用户部署代码的认证方法(不适用2FA)。
使用此密钥,你可以在用户有某些权限的仓库中进行更改,但不能用它访问gitea api来枚举环境。然而,你可以枚举本地设置以获取你有访问权限的仓库和用户的信息:
如果用户将其用户名配置为他的 gitea 用户名,您可以访问他账户中设置的公钥,网址为 https://github.com/<gitea_username>.keys,您可以检查此项以确认您找到的私钥是否可以使用。
SSH keys 也可以在仓库中设置为部署密钥。任何拥有此密钥的人都可以从仓库启动项目。通常在具有不同部署密钥的服务器中,本地文件 ~/.ssh/config
将为您提供有关密钥相关的信息。
GPG Keys
如此处所述,有时需要对提交进行签名,否则您可能会被发现。
在本地检查当前用户是否有任何密钥:
使用用户令牌
用户令牌可以代替密码来认证Gitea服务器通过API,它将拥有对用户的完全访问权限。
使用Oauth应用程序
攻击者可能会创建一个恶意的Oauth应用程序来访问接受它们的用户的特权数据/操作,可能是钓鱼活动的一部分。
如基本信息中所述,应用程序将拥有对用户账户的完全访问权限。
分支保护绕过
在Github中,我们有github actions,默认情况下会获得具有写访问权限的令牌,可以用来绕过分支保护。在这种情况下,这种功能不存在,所以绕过的方式更有限。但让我们看看可以做些什么:
启用推送:如果任何具有写访问权限的人可以推送到分支,只需推送即可。
白名单限制推送:同样,如果你在这个列表中,推送到分支。
启用合并白名单:如果有合并白名单,你需要在其中。
需要的批准数大于0:那么...你需要妥协另一个用户。
将批准限制为白名单用户:如果只有白名单用户可以批准...你需要妥协在该列表中的另一个用户。
取消过时的批准:如果批准不会因新提交而被移除,你可以劫持已批准的PR来注入你的代码并合并PR。
请注意,如果你是组织/仓库管理员,你可以绕过这些保护。
枚举Webhooks
Webhooks能够将特定的gitea信息发送到某些地方。你可能能够利用这种通信。 然而,通常在webhook中设置了一个无法检索的密钥,这将防止知道webhook URL但不知道密钥的外部用户利用该webhook。 但在某些情况下,人们没有将密钥设置在其位置,而是将其作为参数设置在URL中,因此检查URL可能会让你找到密钥和其他你可以进一步利用的地方。
Webhooks可以在仓库和组织级别设置。
后期利用
在服务器内部
如果你设法进入运行gitea的服务器,你应该搜索gitea配置文件。默认情况下,它位于/data/gitea/conf/app.ini
在这个文件中你可以找到密钥和密码。
在gitea路径(默认:/data/gitea)中,你还可以找到有趣的信息,例如:
sqlite数据库:如果gitea没有使用外部数据库,它将使用sqlite数据库。
会话文件夹中的会话:运行
cat sessions/*/*/*
你可以看到已登录用户的用户名(gitea也可能将会话保存在数据库中)。jwt文件夹中的jwt私钥。
在这个文件夹中可能会找到更多敏感信息。
如果你在服务器内部,你还可以使用gitea
二进制文件来访问/修改信息:
gitea dump
将转储gitea并生成一个.zip文件。gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET
将生成指定类型的令牌(持久性)。gitea admin user change-password --username admin --password newpassword
更改密码。gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token
创建新管理员用户并获取访问令牌。
Last updated