Gitea Security
什么是 Gitea
Gitea 是一个 自托管的社区管理轻量级代码托管 解决方案,使用 Go 编写。
基本信息
实验室
要在本地运行 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 密钥 也可以在仓库中设置为 部署密钥。任何拥有此密钥的人都将能够 从仓库启动项目。通常在具有不同部署密钥的服务器上,本地文件 ~/.ssh/config
将提供与密钥相关的信息。
GPG 密钥
如 这里 所述,有时需要签署提交,否则您可能会被发现。
在本地检查当前用户是否有任何密钥:
使用用户令牌
用户令牌可以替代密码来认证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