# GCP - アーティファクト レジストリの持続性

{{#include ../../../banners/hacktricks-training.md}}

## アーティファクト レジストリ

アーティファクト レジストリに関する詳細情報は、以下を確認してください:

{{#ref}}
../gcp-services/gcp-artifact-registry-enum.md
{{#endref}}

### 依存関係の混乱

- **リモートと標準**のリポジトリが**仮想**リポジトリで**混在**し、両方にパッケージが存在する場合、どうなりますか？
- **仮想リポジトリ**で**優先度が最も高く設定されたもの**が使用されます
- **優先度が同じ**の場合:
- **バージョン**が**同じ**であれば、**仮想リポジトリ**で**アルファベット順に最初のポリシー名**が使用されます
- そうでない場合は、**最も高いバージョン**が使用されます

> [!CAUTION]
> したがって、リモートリポジトリがより高いまたは同じ優先度を持っている場合、**公開パッケージレジストリ**で**最高バージョン（依存関係の混乱）**を**悪用**することが可能です

この技術は、**持続性**と**認証されていないアクセス**に役立ちます。悪用するには、アーティファクト レジストリに保存されている**ライブラリ名**を**知っている**必要があり、**同じライブラリを公開リポジトリ（例えばPythonのPyPi）に**より高いバージョンで**作成**するだけです。

持続性のために従うべき手順は次のとおりです:

- **要件**: **仮想リポジトリ**が**存在**し、使用されている必要があります。**公開リポジトリ**に存在しない**名前**の**内部パッケージ**を使用する必要があります。
- リモートリポジトリが存在しない場合は作成します
- リモートリポジトリを仮想リポジトリに追加します
- リモートリポジトリにより高い（または同じ）優先度を与えるために、仮想レジストリのポリシーを編集します。\
次のようなコマンドを実行します:
- [gcloud artifacts repositories update --upstream-policy-file ...](https://cloud.google.com/sdk/gcloud/reference/artifacts/repositories/update#--upstream-policy-file)
- 正当なパッケージをダウンロードし、悪意のあるコードを追加して、同じバージョンで公開リポジトリに登録します。開発者がインストールするたびに、あなたのものがインストールされます！

依存関係の混乱に関する詳細情報は、以下を確認してください:

{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/dependency-confusion.html
{{#endref}}

{{#include ../../../banners/hacktricks-training.md}}
