Gitea 安全

Tip

学习并练习 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

什么是 Gitea

Gitea 是一个 自托管的社区管理轻量级代码托管 解决方案,使用 Go 编写。

基本信息

Basic Gitea Information

实验室

要在本地运行 Gitea 实例,您只需运行一个 docker 容器:

docker run -p 3000:3000 gitea/gitea

连接到端口 3000 以访问网页。

您也可以使用 kubernetes 运行它:

helm repo add gitea-charts https://dl.gitea.io/charts/
helm install gitea gitea-charts/gitea

未认证枚举

请注意,默认情况下 Gitea 允许新用户注册。这不会给新用户提供对其他组织/用户仓库的特别有趣的访问权限,但登录用户可能能够查看更多的仓库或组织

内部利用

在这个场景中,我们假设你已经获得了一些对 GitHub 账户的访问权限。

如果你以某种方式已经获得了组织内某个用户的凭证(或者你偷了一个会话 Cookie),你可以直接登录并检查你对哪些仓库拥有权限,你在哪些团队中,列出其他用户,以及仓库是如何保护的

请注意,可能会使用 2FA,因此你只有在能够通过该检查的情况下才能访问这些信息。

Note

请注意,如果你设法偷取了 i_like_gitea cookie(当前配置为 SameSite: Lax),你可以完全冒充该用户而无需凭证或 2FA。

使用用户 SSH 密钥

Gitea 允许用户设置SSH 密钥,该密钥将作为代表他们部署代码的身份验证方法(不适用 2FA)。

使用此密钥,你可以对用户拥有某些权限的仓库进行更改,但是你不能使用它访问 Gitea API 来枚举环境。然而,你可以枚举本地设置以获取有关你有访问权限的仓库和用户的信息:

# Go to the the repository folder
# Get repo config and current user name and email
git config --list

如果用户将其用户名配置为他的 gitea 用户名,您可以在 https://github.com/<gitea_username>.keys 中访问他在账户中设置的 公钥,您可以检查此项以确认您找到的私钥是否可以使用。

SSH 密钥 也可以在仓库中设置为 部署密钥。任何拥有此密钥的人都能够 从仓库启动项目。通常在具有不同部署密钥的服务器上,本地文件 ~/.ssh/config 将提供与密钥相关的信息。

GPG 密钥

这里 所述,有时需要签署提交,否则您可能会被发现。

在本地检查当前用户是否有任何密钥:

gpg --list-secret-keys --keyid-format=long

使用用户令牌

有关用户令牌的介绍,请查看基本信息

用户令牌可以替代密码验证对Gitea服务器的访问通过API。它将对用户拥有完全访问权限

使用Oauth应用程序

有关Gitea 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创建新管理员用户并获取访问令牌。

Tip

学习并练习 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks