Gitea Security
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Giteaは、自己ホスト型のコミュニティ管理の軽量コードホスティングソリューションで、Goで書かれています。
ローカルでGiteaインスタンスを実行するには、Dockerコンテナを実行するだけです:
ポート3000に接続してウェブページにアクセスします。
Kubernetesで実行することもできます:
公開リポジトリ: http://localhost:3000/explore/repos
デフォルトではGiteaは新しいユーザーの登録を許可します。これにより、新しいユーザーは他の組織やユーザーのリポジトリに対して特に興味深いアクセスを得ることはありませんが、ログインしたユーザーはより多くのリポジトリや組織を視覚化できるかもしれません。
このシナリオでは、あなたがgithubアカウントへのアクセスを取得したと仮定します。
もしあなたが組織内のユーザーの資格情報を何らかの方法で持っている場合(またはセッションクッキーを盗んだ場合)、ただログインして、どのリポジトリに対してどの権限を持っているか、どのチームにいるか、他のユーザーをリストアップし、リポジトリがどのように保護されているかを確認できます。
2FAが使用される可能性があるため、そのチェックを通過できる場合にのみこの情報にアクセスできることに注意してください。
もしあなたが**i_like_gitea
クッキーを盗むことに成功した場合**(現在SameSite: Laxで設定されています)、資格情報や2FAを必要とせずにユーザーを完全に偽装することができます。
GiteaはユーザーがSSHキーを設定することを許可しており、これがコードをデプロイするための認証方法として使用されます(2FAは適用されません)。
このキーを使用して、ユーザーがいくつかの権限を持つリポジトリで変更を行うことができますが、gitea APIにアクセスして環境を列挙するためには使用できません。しかし、ローカル設定を列挙して、アクセスできるリポジトリやユーザーに関する情報を取得することができます。
ユーザーが自分のgiteaユーザー名としてユーザー名を設定している場合、https://github.com/<gitea_username>.keys で彼のアカウントに設定された公開鍵にアクセスできます。これを確認して、見つけた秘密鍵が使用できるかどうかを確認できます。
SSH鍵はリポジトリにデプロイ鍵としても設定できます。この鍵にアクセスできる人は、リポジトリからプロジェクトを起動できるようになります。通常、異なるデプロイ鍵を持つサーバーでは、ローカルファイル**~/.ssh/config
**が関連する鍵に関する情報を提供します。
こちらで説明されているように、コミットに署名する必要がある場合や、発見される可能性があります。
現在のユーザーが鍵を持っているかどうかをローカルで確認してください:
ユーザートークンは、GiteaサーバーにAPIを介して認証するためにパスワードの代わりに使用できます。ユーザーに対して完全なアクセスを持ちます。
Gitea Oauthアプリケーションについての基本情報を確認するの紹介。
攻撃者は、フィッシングキャンペーンの一環として、ユーザーが受け入れる可能性のある悪意のあるOauthアプリケーションを作成して、特権データやアクションにアクセスするかもしれません。
基本情報で説明されているように、アプリケーションはユーザーアカウントに対して完全なアクセスを持ちます。
Githubには、デフォルトでリポジトリに対して書き込みアクセスを持つトークンを取得するgithub actionsがあります。これを使用してブランチ保護をバイパスできます。この場合、それは存在しないため、バイパスはより制限されます。しかし、何ができるか見てみましょう:
プッシュを有効にする: 書き込みアクセスを持つ誰かがブランチにプッシュできる場合、単にプッシュします。
制限されたプッシュをホワイトリストに追加: 同様に、このリストの一部であればブランチにプッシュします。
マージホワイトリストを有効にする: マージホワイトリストがある場合、その中にいる必要があります。
承認が0より大きいことを要求: それなら...別のユーザーを妥協する必要があります。
承認をホワイトリストに制限: ホワイトリストに登録されたユーザーのみが承認できる場合...そのリストにいる別のユーザーを妥協する必要があります。
古い承認を無効にする: 新しいコミットで承認が削除されない場合、すでに承認されたPRをハイジャックしてコードを注入し、PRをマージできます。
あなたがorg/repoの管理者である場合、保護をバイパスできます。
ウェブフックは、特定の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
新しい管理ユーザーを作成し、アクセストークンを取得します。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する: HackTricks Training GCP Red Team Expert (GRTE)