Gitea Security

HackTricksをサポートする

Giteaとは

Giteaは、自己ホスト型のコミュニティ管理の軽量コードホスティングソリューションで、Goで書かれています。

基本情報

ラボ

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アカウントへのアクセスを取得したと仮定します。

ユーザー資格情報/ウェブクッキーを使用して

もしあなたが組織内のユーザーの資格情報を何らかの方法で持っている場合(またはセッションクッキーを盗んだ場合)、ただログインして、どのリポジトリに対してどの権限を持っているか、**どのチームにいるか、他のユーザーをリストし、リポジトリがどのように保護されているかを確認できます。

2FAが使用される可能性があるため、そのチェックを通過できる場合にのみ、この情報にアクセスできることに注意してください。

もしあなたが**i_like_giteaクッキーを盗むことに成功した場合**(現在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をマージできます。

あなたが組織/リポジトリの管理者である場合、保護をバイパスできることに注意してください。

ウェブフックの列挙

ウェブフックは、特定のgitea情報をいくつかの場所に送信することができます。その通信を悪用することができるかもしれません。 しかし、通常、秘密ウェブフックに設定されており、これはウェブフックのURLを知っているが秘密を知らない外部ユーザーがそのウェブフックを悪用するのを防ぎます。 しかし、時には、人々が秘密をその場所に設定する代わりに、URLにパラメータとして設定することがあります。そのため、URLを確認することで秘密を見つけることや、さらに悪用できる他の場所を見つけることができるかもしれません。

ウェブフックはリポジトリと組織レベルで設定できます。

ポストエクスプロイテーション

サーバー内

もし何らかの方法でgiteaが実行されているサーバーに入ることができたら、giteaの設定ファイルを探すべきです。デフォルトでは、/data/gitea/conf/app.iniにあります。

このファイルにはキーパスワードが含まれています。

giteaのパス(デフォルト:/data/gitea)には、次のような興味深い情報も見つかります:

  • sqlite DB: giteaが外部DBを使用していない場合、sqlite DBを使用します。

  • セッションフォルダー内のセッション: cat sessions/*/*/*を実行すると、ログインしているユーザーのユーザー名を見ることができます(giteaはセッションをDB内に保存することもあります)。

  • 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 新しい管理ユーザーを作成し、アクセストークンを取得します。

HackTricksをサポートする

Last updated