Translated ['src/pentesting-cloud/azure-security/az-services/az-containe

This commit is contained in:
Translator
2026-07-19 09:25:46 +00:00
parent 6bebfbb5a6
commit efdd375bc9
5 changed files with 212 additions and 116 deletions
Binary file not shown.
+79 -78
View File
@@ -1,19 +1,19 @@
# Argo CD Security
# Ασφάλεια του Argo CD
{{#include ../banners/hacktricks-training.md}}
## Βασικές Πληροφορίες
## Βασικές πληροφορίες
[Argo CD](https://argo-cd.readthedocs.io/) είναι μια GitOps πλατφόρμα continuous delivery για Kubernetes. Παρακολουθεί Git repositories, αποδίδει Kubernetes manifests με εργαλεία όπως Helm, Kustomize, Jsonnet ή config management plugins, και συγχρονίζει το live cluster state με το desired state που είναι αποθηκευμένο στο Git.
Το [Argo CD](https://argo-cd.readthedocs.io/) είναι μια πλατφόρμα continuous delivery GitOps για Kubernetes. Παρακολουθεί Git repositories, δημιουργεί Kubernetes manifests με εργαλεία όπως τα Helm, Kustomize, Jsonnet ή config management plugins και συγχρονίζει την κατάσταση του ενεργού cluster με την επιθυμητή κατάσταση που είναι αποθηκευμένη στο Git.
Από την οπτική του attacker, αντιμετώπισε το Argo CD ως μια **deployment engine με Kubernetes credentials**. Ένας χρήσιμος compromise του Argo CD μπορεί να οδηγήσει σε:
Από την οπτική γωνία ενός attacker, αντιμετωπίστε το Argo CD ως **deployment engine με Kubernetes credentials**. Ένα χρήσιμο compromise του Argo CD μπορεί να οδηγήσει σε:
- Πρόσβαση σε private Git repositories και repository credentials.
- Πρόσβαση σε Kubernetes cluster secrets που χρησιμοποιούνται από το Argo CD.
- Manifest generation code execution στο `argocd-repo-server`.
- Μη εξουσιοδοτημένο Kubernetes object deployment μέσω trusted Git repositories, Argo CD applications, ή cache manipulation.
- Εκτέλεση κώδικα κατά τη δημιουργία manifests στο `argocd-repo-server`.
- Μη εξουσιοδοτημένο deployment Kubernetes objects μέσω trusted Git repositories, Argo CD applications ή χειραγώγησης του cache.
## Αρχιτεκτονική & Ενδιαφέροντα Components
## Αρχιτεκτονική και ενδιαφέροντα components
Συνηθισμένα Kubernetes objects και services:
```bash
@@ -22,23 +22,23 @@ kubectl get applications,appprojects,applicationsets -A 2>/dev/null
kubectl get secrets,configmaps -n argocd 2>/dev/null
kubectl get networkpolicy -n argocd 2>/dev/null
```
Ενδιαφέροντες services:
Ενδιαφέρουσες υπηρεσίες:
- **`argocd-server`**: public API, web UI, CLI API, authentication and authorization.
- **`argocd-application-controller`**: συγκρίνει το desired και το live state, και μετά εφαρμόζει resources στο Kubernetes.
- **`argocd-repo-server`**: κάνει clone repositories, αποθηκεύει Git data στην cache, και τρέχει Helm/Kustomize/Jsonnet/plugins για να δημιουργήσει manifests. Το default gRPC port είναι **8081**.
- **`argocd-redis`**: cache για application, manifest και Git reference data. Το default Redis port είναι **6379**.
- **`argocd-server`**: public API, web UI, CLI API, authentication και authorization.
- **`argocd-application-controller`**: συγκρίνει την επιθυμητή και την τρέχουσα κατάσταση και, στη συνέχεια, εφαρμόζει resources στο Kubernetes.
- **`argocd-repo-server`**: κάνει clone repositories, αποθηκεύει Git data σε cache και εκτελεί Helm/Kustomize/Jsonnet/plugins για τη δημιουργία manifests. Το προεπιλεγμένο gRPC port είναι το **8081**.
- **`argocd-redis`**: cache για application, manifest και Git reference data. Το προεπιλεγμένο Redis port είναι το **6379**.
- **`argocd-applicationset-controller`**: δημιουργεί Argo CD `Application` objects από generators όπως Git, SCM, clusters και pull requests.
Από ένα compromised pod ή internal network segment, έλεγξε το internal reachability:
Από ένα compromised pod ή ένα internal network segment, ελέγξτε την internal reachability:
```bash
nc -vz <argocd-server> 443
nc -vz <argocd-repo-server> 8081
nc -vz <argocd-redis> 6379
```
## Public API / UI Attacks
## Επιθέσεις στο Public API / UI
Αν έχετε Argo CD credentials ή ένα exposed instance, ξεκινήστε με το κανονικό API surface:
Αν διαθέτεις credentials του Argo CD ή ένα εκτεθειμένο instance, ξεκίνα από τη συνηθισμένη επιφάνεια API:
```bash
argocd login <argocd-server>
argocd account get-user-info
@@ -51,13 +51,13 @@ argocd admin settings rbac can <subject> <action> <resource> <object>
```
Χρήσιμες διαδρομές επίθεσης:
- **Application write access**: τροποποίησε `source.repoURL`, `source.path`, Helm values, Kustomize options, plugin settings ή sync options ώστε το Argo CD να κάνει deploy attacker-controlled manifests.
- **Project misconfiguration**: τα `AppProject` objects μπορούν να επιτρέπουν ευρείς `sourceRepos`, ευρείς `destinations`, μη ασφαλή `clusterResourceWhitelist`, ή αδύναμους περιορισμούς namespace.
- **Repository credential abuse**: repository secrets, GitHub App credentials, SSH keys και tokens μπορούν να επιτρέψουν push σε trusted repos ή την προσθήκη malicious dependencies.
- **Cluster credential abuse**: cluster secrets μπορεί να περιέχουν bearer tokens ή exec-provider configuration που χρησιμοποιούνται από το Argo CD για deploy στα target clusters.
- **Local admin / project tokens**: μακράς διάρκειας Argo CD tokens μπορούν να επαναχρησιμοποιηθούν μέσω του API, εκτός αν ανακληθούν ή λήξουν.
- **Application write access**: τροποποιήστε τα `source.repoURL`, `source.path`, τις τιμές Helm, τις επιλογές Kustomize, τις ρυθμίσεις plugin ή τις επιλογές συγχρονισμού, ώστε το Argo CD να κάνει deploy manifests που ελέγχει ο attacker.
- **Project misconfiguration**: τα αντικείμενα `AppProject` μπορεί να επιτρέπουν ευρέα `sourceRepos`, ευρείς `destinations`, μη ασφαλές `clusterResourceWhitelist` ή ανεπαρκείς περιορισμούς namespace.
- **Repository credential abuse**: τα repository secrets, τα διαπιστευτήρια GitHub App, τα SSH keys και τα tokens μπορεί να επιτρέπουν push σε trusted repos ή την προσθήκη κακόβουλων dependencies.
- **Cluster credential abuse**: τα cluster secrets μπορεί να περιέχουν bearer tokens ή ρυθμίσεις exec-provider που χρησιμοποιούνται από το Argo CD για deploy στα target clusters.
- **Local admin / project tokens**: τα Argo CD tokens μεγάλης διάρκειας μπορούν να επαναχρησιμοποιηθούν μέσω του API, εκτός αν ανακληθούν ή λήξουν.
Απαρίθμησε τη διαμόρφωση από Kubernetes όταν έχεις cluster read access:
Enumerate τη configuration από το Kubernetes όταν έχετε cluster read access:
```bash
kubectl get applications.argoproj.io -A -o yaml
kubectl get appprojects.argoproj.io -A -o yaml
@@ -65,49 +65,49 @@ 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 cm -n argocd argocd-cm argocd-rbac-cm argocd-cmd-params-cm -o yaml
```
## Κατάχρηση Αξιόπιστου Git Repository
## Κατάχρηση αξιόπιστου Git Repository
Αν μπορείς να κάνεις push σε ένα repository που εμπιστεύεται το Argo CD, συνήθως μπορείς να επηρεάσεις τι γίνεται deployed. Ο αντίκτυπος εξαρτάται από τα όρια του `AppProject` και τα permissions του service account που χρησιμοποιεί ο application controller.
Αν μπορείτε να κάνετε push σε ένα repository που θεωρείται αξιόπιστο από το Argo CD, συνήθως μπορείτε να επηρεάσετε το τι γίνεται deployed. Ο αντίκτυπος εξαρτάται από τα όρια του `AppProject` και τα δικαιώματα του service account που χρησιμοποιεί ο application controller.
Συνηθισμένες θέσεις για payload:
Συνηθισμένες τοποθεσίες για payloads:
- Raw Kubernetes YAML κάτω από application path.
- Helm chart templates και `values.yaml`.
- Ακατέργαστο Kubernetes YAML κάτω από ένα application path.
- Πρότυπα Helm chart και `values.yaml`.
- Kustomize overlays, remote bases και generators.
- Jsonnet ή input του config management plugin.
- ApplicationSet generator files που δημιουργούν ή ενημερώνουν `Application` objects.
- Είσοδος Jsonnet ή config management plugin.
- Αρχεία generator του ApplicationSet που δημιουργούν ή ενημερώνουν αντικείμενα `Application`.
Έλεγξε αν το app χρησιμοποιεί automated sync, pruning, self-heal, sync windows ή manual approvals:
Ελέγξτε αν η εφαρμογή χρησιμοποιεί automated sync, pruning, self-heal, sync windows ή manual approvals:
```bash
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'
```
## Άμεση κατάχρηση του `argocd-repo-server`
## Άμεση Κατάχρηση του `argocd-repo-server`
Μην υποθέτετε ότι το δημόσιο Argo CD API είναι η μόνη επιφάνεια επίθεσης. Τα εσωτερικά components του Argo CD επικοινωνούν με το `argocd-repo-server` μέσω gRPC. Αν arbitrary pods μπορούν να φτάσουν το repo-server, τα ελεγχόμενα από τον attacker εσωτερικά requests μπορεί να παρακάμψουν ελέγχους που κανονικά επιβάλλονται από το `argocd-server`.
Μην υποθέτετε ότι το public Argo CD API είναι η μοναδική επιφάνεια επίθεσης. Τα εσωτερικά components του Argo CD επικοινωνούν με το `argocd-repo-server` μέσω gRPC. Αν αυθαίρετα pods μπορούν να συνδεθούν στο repo-server, requests που ελέγχονται από τον attacker και προέρχονται από το εσωτερικό μπορούν να παρακάμψουν τους ελέγχους που εφαρμόζονται κανονικά από το `argocd-server`.
Practical checks:
Πρακτικοί έλεγχοι:
```bash
kubectl get svc -n argocd argocd-repo-server -o yaml
kubectl get endpoints -n argocd argocd-repo-server -o wide
nc -vz <argocd-repo-server> 8081
```
Ενδιαφέροντα σημάδια:
Ενδιαφέρουσες ενδείξεις:
- Το repo-server gRPC endpoint είναι προσβάσιμο από μη-Argo CD pods.
- Τα NetworkPolicies λείπουν ή επιτρέπουν μόνο allow-list egress χωρίς να αρνούνται ingress.
- Το repo-server έχει πρόσβαση σε custom config management plugins, decryption tools, ή repository content από πολλαπλούς tenants.
- Το Redis είναι προσβάσιμο από μη-Argo CD pods, επιτρέποντας cache inspection ή tampering αν τα credentials είναι διαθέσιμα ή δεν απαιτούνται.
- Το gRPC endpoint του repo-server είναι προσβάσιμο από pods εκτός Argo CD.
- Τα NetworkPolicies απουσιάζουν ή επιτρέπουν μόνο allow-list για το egress χωρίς να αρνούνται το ingress.
- Το repo-server έχει πρόσβαση σε custom config management plugins, εργαλεία decryption ή περιεχόμενο repositories από πολλαπλούς tenants.
- Το Redis είναι προσβάσιμο από pods εκτός Argo CD, επιτρέποντας την επιθεώρηση ή την παραποίηση της cache, εάν τα credentials είναι διαθέσιμα ή δεν απαιτούνται.
## Unauthenticated Repo-Server RCE via Kustomize Options
## Unauthenticated Repo-Server RCE μέσω Kustomize Options
Τον Ιούλιο του 2026, η Synacktiv δημοσίευσε μια unauthenticated chain εκτέλεσης κώδικα στο `repo-server` του Argo CD, όταν ένας attacker μπορεί να φτάσει την internal gRPC service. Η attack εκμεταλλεύεται direct access στο `/repository.RepoServerService/GenerateManifest` και attacker-controlled `KustomizeOptions`.
Τον Ιούλιο του 2026, η Synacktiv αποκάλυψε μια αλυσίδα εκτέλεσης κώδικα χωρίς authentication στο `repo-server` του Argo CD, όταν ένας attacker μπορεί να έχει πρόσβαση στην εσωτερική gRPC service. Η επίθεση καταχράται την άμεση πρόσβαση στο `/repository.RepoServerService/GenerateManifest` και σε attacker-controlled `KustomizeOptions`.
Το επικίνδυνο primitive είναι να εξαναγκαστεί το repo-server να κάνει clone attacker-controlled repository content και να τρέξει Kustomize με υποστήριξη Helm:
Το επικίνδυνο primitive είναι η εξαναγκασμένη κλωνοποίηση περιεχομένου repository που ελέγχεται από τον attacker από το repo-server και η εκτέλεση του Kustomize με υποστήριξη Helm:
```bash
kustomize build <attacker_repo_path> --enable-helm --helm-command ./payload.sh
```
Ελάχιστο malicious Kustomize input χρειάζεται για να ενεργοποιηθεί η επεξεργασία Helm:
Ελάχιστη κακόβουλη είσοδος Kustomize που απαιτείται για την ενεργοποίηση της επεξεργασίας Helm:
```yaml
helmCharts:
- name: pwn
@@ -115,37 +115,37 @@ version: 0.0.1
```
Γιατί αυτό λειτουργεί:
- Το `argocd-repo-server` κλωνοποιεί το repository πριν από το rendering.
- Το `--helm-command ./payload.sh` επιλύεται relative προς το κλωνοποιημένο repository.
- Το code execution δεν απαιτεί shell metacharacter injection αν ο attacker μπορεί να ελέγξει το rendered repository και τα Kustomize build options.
- Το `argocd-repo-server` κάνει clone το repository πριν από το rendering.
- Το `--helm-command ./payload.sh` επιλύεται σε σχέση με το cloned repository.
- Η εκτέλεση κώδικα δεν απαιτεί injection shell metacharacters, εάν ο attacker μπορεί να ελέγξει το rendered repository και τις επιλογές build του Kustomize.
Τη στιγμή της δημοσιοποίησης της Synacktiv στις 1 Ιουλίου 2026, ανέφεραν ότι το issue δεν είχε επίσημο fix ή CVE. Αντιμετώπισέ το πρώτα ως network-exposure issue: το exploitation απαιτεί reachability προς το εσωτερικό repo-server gRPC port.
Κατά τη disclosure της Synacktiv την 1η Ιουλίου 2026, αναφέρθηκε ότι το issue δεν είχε official fix ή CVE. Αντιμετωπίστε το πρώτα ως ζήτημα network exposure: η exploitation απαιτεί reachability στη θύρα gRPC του εσωτερικού repo-server.
## Redis Cache Poisoning to Deploy Manifests
## Redis Cache Poisoning για την ανάπτυξη Manifests
Μετά από code execution στο `argocd-repo-server`, ή μετά από direct access στο Redis με valid credentials, εξέτασε τα Redis-backed cache entries. Το Argo CD συνήθως αποθηκεύει gzip-compressed JSON values.
Μετά την εκτέλεση κώδικα στο `argocd-repo-server` ή μετά από άμεση πρόσβαση στο Redis με valid credentials, ελέγξτε τα Redis-backed cache entries. Το Argo CD αποθηκεύει συνήθως gzip-compressed JSON values.
Interesting key prefixes:
Ενδιαφέροντα key prefixes:
```text
mfst|... # cached rendered manifests
git-refs|... # Git branch/ref to commit mappings
app|... # application resource/cache data
cluster|... # cluster cache information
```
Η επίθεση cache poisoning που περιγράφει η Synacktiv εκμεταλλεύεται δύο κομμάτια state:
Η επίθεση cache poisoning που περιγράφεται από τη Synacktiv καταχράται δύο τμήματα state:
1. Τροποποίησε το σχετικό `mfst|...` manifest cache entry ώστε να περιλαμβάνει ένα Kubernetes manifest που ελέγχει ο attacker.
2. Τροποποίησε το σχετικό `git-refs|...` mapping ώστε το Argo CD να πιστεύει ότι το branch μετακινήθηκε και μετά να reconciles back to το cached revision.
1. Τροποποιεί τη σχετική καταχώριση cache manifest `mfst|...` ώστε να περιλαμβάνει ένα Kubernetes manifest ελεγχόμενο από τον attacker.
2. Τροποποιεί τη σχετική αντιστοίχιση `git-refs|...`, ώστε το Argo CD να πιστεύει ότι το branch μετακινήθηκε και στη συνέχεια να εκτελεί reconcile στην cached revision.
Επίπτωση:
Impact:
- Με ενεργοποιημένο Auto Sync, το Argo CD μπορεί να εφαρμόσει αυτόματα το poisoned cached manifest.
- Χωρίς Auto Sync, το payload μπορεί να εφαρμοστεί ακόμα και όταν ένας user κάνει manual sync την application.
- Η τελική επίπτωση περιορίζεται από το destination της target application και τα Kubernetes permissions που είναι διαθέσιμα στο Argo CD.
- Με ενεργοποιημένο το Auto Sync, το Argo CD ενδέχεται να εφαρμόσει αυτόματα το poisoned cached manifest.
- Χωρίς Auto Sync, το payload μπορεί και πάλι να εφαρμοστεί όταν ένας χρήστης κάνει manual sync στην application.
- Το τελικό impact περιορίζεται από το destination της target application και τα Kubernetes permissions που είναι διαθέσιμα στο Argo CD.
## ApplicationSet Attacks
Το ApplicationSet είναι ιδιαίτερα ευαίσθητο επειδή δημιουργεί ή ενημερώνει `Application` objects από το generator output.
Το ApplicationSet είναι ιδιαίτερα ευαίσθητο, επειδή δημιουργεί ή ενημερώνει αντικείμενα `Application` από το generator output.
Review:
```bash
@@ -154,15 +154,15 @@ kubectl get appprojects.argoproj.io -A -o yaml
```
Ενδιαφέροντα patterns:
- Git generators που διαβάζουν attacker-writable αρχεία που ελέγχουν app names, paths, projects ή destinations.
- Pull request generators για δημόσια repositories όπου untrusted contributors μπορούν να επηρεάσουν τα generated applications.
- Git generators που διαβάζουν αρχεία εγγράψιμα από attacker και ελέγχουν app names, paths, projects ή destinations.
- Pull request generators για public repositories, όπου untrusted contributors μπορούν να επηρεάσουν τα generated applications.
- Template fields που επιτρέπουν broad destination clusters/namespaces.
- AppProjects που επιτρέπουν `sourceRepos: ["*"]` ή broad `destinations`.
- Generated applications που κληρονομούν automated sync και pruning.
## Post-Exploitation
Από ένα Argo CD pod shell, δώσε προτεραιότητα στα εξής:
Από ένα Argo CD pod shell, δώστε προτεραιότητα στα εξής:
```bash
env
cat /proc/1/environ 2>/dev/null | tr '\0' '\n'
@@ -171,24 +171,24 @@ mount | grep -E 'secret|token|config'
```
Χρήσιμοι στόχοι:
- Κλέψε `REDIS_PASSWORD` ή Redis TLS/client υλικό.
- Εξήγαγε repository credentials από mounted secrets ή Argo CD Kubernetes secrets.
- Εντόπισε cluster credentials που χρησιμοποιούνται από το Argo CD.
- Διάβασε generated manifests και plugin output που μπορεί να περιέχουν injected secrets.
- Έλεγξε αν custom plugins, SOPS, Helm secrets, Vault plugins ή cloud CLIs εκθέτουν decryption keys και cloud credentials.
- Κλέψτε το `REDIS_PASSWORD` ή υλικό Redis TLS/client.
- Εξαγάγετε credentials repository από mounted secrets ή Argo CD Kubernetes secrets.
- Εντοπίστε τα cluster credentials που χρησιμοποιεί το Argo CD.
- Διαβάστε generated manifests και plugin output που ενδέχεται να περιλαμβάνουν injected secrets.
- Ελέγξτε αν custom plugins, SOPS, Helm secrets, Vault plugins ή cloud CLIs εκθέτουν decryption keys και cloud credentials.
## Detection & Hardening
Σημαντικοί έλεγχοι:
- Περιορίστε το `argocd-repo-server` port **8081** και το Redis port **6379** με NetworkPolicies ώστε μόνο τα αναμενόμενα Argo CD components να μπορούν να τα προσεγγίσουν.
- Σε Helm deployments, επαληθεύστε ότι τα network policies δημιουργούνται όντως. Τα Argo CD Helm chart values ιστορικά είχαν προεπιλογή το component network policy creation σε disabled.
- Κρατήστε το `argocd-server` ως το authenticated entry point. Εσωτερικές υπηρεσίες δεν πρέπει να είναι reachable από arbitrary workloads.
- Απενεργοποιήστε αχρησιμοποίητα config management tools και plugins.
- Περιορίστε τα `AppProject` `sourceRepos`, `destinations`, namespace permissions και cluster-scoped resources.
- Αποφύγετε την αποθήκευση broad repository credentials όπου ένας low-privileged Argo CD user μπορεί να προκαλέσει επαναχρησιμοποίησή τους.
- Παρακολουθείτε repo-server requests, Kustomize build options, plugin executions, Redis writes και απροσδόκητη πρόσβαση σε `mfst|` / `git-refs|` keys.
- Περιστρέψτε Argo CD local users, project tokens, repository credentials και cluster credentials μετά από compromise.
- Περιορίστε τη θύρα **8081** του `argocd-repo-server` και τη θύρα **6379** του Redis με NetworkPolicies, ώστε να μπορούν να έχουν πρόσβαση μόνο τα αναμενόμενα Argo CD components.
- Σε Helm deployments, επαληθεύστε ότι οι network policies δημιουργούνται πράγματι. Οι τιμές του Argo CD Helm chart έχουν ιστορικά ορίσει τη δημιουργία network policy των components ως disabled.
- Διατηρήστε το `argocd-server` ως το authenticated entry point. Οι internal services δεν πρέπει να είναι προσβάσιμες από αυθαίρετα workloads.
- Απενεργοποιήστε τα μη χρησιμοποιούμενα config management tools και plugins.
- Περιορίστε τα `AppProject` `sourceRepos`, `destinations`, τα namespace permissions και τα cluster-scoped resources.
- Αποφύγετε την αποθήκευση broad repository credentials σε σημείο όπου ένας low-privileged Argo CD user μπορεί να προκαλέσει την επαναχρησιμοποίησή τους.
- Παρακολουθείτε τα repo-server requests, τα Kustomize build options, τις plugin executions, τα Redis writes και την απρόσμενη πρόσβαση σε keys `mfst|` / `git-refs|`.
- Κάντε rotate τα Argo CD local users, τα project tokens, τα repository credentials και τα cluster credentials μετά από compromise.
Χρήσιμες εντολές:
```bash
@@ -197,19 +197,19 @@ 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-redis-network-policy 2>/dev/null
```
## Σημείωση Static Analysis: Typed API Requests in CodeQL
## Σημείωση Static Analysis: Typed API Requests στο CodeQL
Για Go services που χρησιμοποιούν gRPC/REST handlers, τα default CodeQL remote sources μπορεί να χάσουν flows μόλις το raw input έχει unmarshaled σε typed request objects. Ένα χρήσιμο model για Argo CD-style services είναι:
Για Go services που χρησιμοποιούν gRPC/REST handlers, τα προεπιλεγμένα CodeQL remote sources ενδέχεται να παραλείπουν flows αφού το raw input έχει γίνει unmarshaled σε typed request objects. Ένα χρήσιμο model για services τύπου Argo CD είναι:
- Receiver type όπως `Server` ή `Service`.
- Πρώτο parameter είναι `context.Context`.
- Δεύτερο parameter είναι ένα typed request object.
- Η πρώτη παράμετρος είναι `context.Context`.
- Η δεύτερη παράμετρος είναι ένα typed request object.
Μοντελοποίησε αυτό το δεύτερο parameter ως remote source και πρόσθεσε custom sinks για τα `exec.Command` / `exec.CommandContext` arguments. Αυτό βοηθά να βρεθούν flows από internal API request fields προς command execution helpers.
Model αυτή τη δεύτερη παράμετρο ως remote source και πρόσθεσε custom sinks για arguments των `exec.Command` / `exec.CommandContext`. Αυτό βοηθά στον εντοπισμό flows από internal API request fields προς command execution helpers.
## References
- [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 - Εντοπίστηκε στο Octopus Trap: Unauthenticated RCE στο Argo CD με 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 - High Availability](https://argo-cd.readthedocs.io/en/stable/operator-manual/high_availability/)
- [Argo CD docs - repo-server command reference](https://argo-cd.readthedocs.io/en/stable/operator-manual/server-commands/argocd-repo-server/)
@@ -217,3 +217,4 @@ kubectl describe networkpolicy -n argocd argocd-redis-network-policy 2>/dev/null
- [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)
- [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
{{#endref}}
{{#ref}}
az-container-registry-post-exploitation.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}
@@ -0,0 +1,87 @@
# Az - Container Registry Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## Azure Container Registry
Για περισσότερες πληροφορίες σχετικά με αυτό το service, δείτε:
{{#ref}}
../az-services/az-container-registry.md
{{#endref}}
### `Microsoft.ContainerRegistry/registries/listCredentials/action`, `Microsoft.ContainerRegistry/registries/write`
Μια ταυτότητα με πρόσβαση στο management plane του ACR μπορεί να μετατρέψει αυτή την πρόσβαση σε **επαναχρησιμοποιήσιμα Docker credentials**. Αν ο **admin user** είναι απενεργοποιημένος, αλλά το principal έχει επίσης `registries/write`, ενεργοποιήστε τον, ανακτήστε τα passwords και κάντε authentication απευθείας στο `<registry>.azurecr.io`.
```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>
```
Αυτό είναι χρήσιμο επειδή τα credentials που ανακτήθηκαν μπορούν να επαναχρησιμοποιηθούν εκτός του Azure CLI για **list, pull, push, overwrite και μερικές φορές delete** περιεχομένου του registry, μέχρι να απενεργοποιηθεί ο admin λογαριασμός ή να γίνει rotation των passwords.
### `Microsoft.ContainerRegistry/registries/pull/read`
Χρησιμοποιήστε pull access για **reconnaissance των repositories** και **secret hunting** μέσα στα images. Ελέγξτε τόσο το τελικό configuration του container όσο και τα ιστορικά filesystem layers, επειδή αρχεία που αντιγράφηκαν σε ένα layer μπορεί να παραμείνουν recoverable ακόμη και αν διαγράφηκαν αργότερα.
```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>
```
Στόχοι υψηλής αξίας περιλαμβάνουν **μεταβλητές περιβάλλοντος**, **configs εφαρμογών**, **scripts ανάπτυξης**, **πιστοποιητικά**, **access tokens** και **connection strings**. Για περισσότερες ιδέες κατά την εξέταση των layers, δείτε τη σελίδα Docker forensics:
{{#ref}}
https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.html
{{#endref}}
### `Microsoft.ContainerRegistry/registries/push/write`
Η πρόσβαση push επιτρέπει σε έναν attacker να **μολύνει trusted repositories** ή να **αντικαταστήσει mutable tags**, όπως τα `latest`, `prod` ή `stable`. Οποιοδήποτε workload εξακολουθεί να κάνει deploy βάσει tag αντί για digest μπορεί να κάνει pull το image του attacker στο επόμενο deployment, scale-out event ή restart.
```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>
```
Πριν αντικαταστήσετε ένα tag, επαληθεύστε ποια repositories και tags καταναλώνονται στην πραγματικότητα από downstream workloads. Οι **digest-pinned** consumers (`@sha256:...`) είναι πολύ δυσκολότερο να ανακατευθυνθούν σε σχέση με τους consumers που βασίζονται σε tag.
### `Microsoft.ContainerRegistry/registries/push/write`, `Microsoft.ContainerInstance/containerGroups/restart/action`
Εάν μπορείτε τόσο να **αντικαταστήσετε το image** που χρησιμοποιείται από ένα downstream container workload όσο και να κάνετε **restart** σε αυτό το workload, το κακόβουλο entrypoint εκτελείται μέσα στο **network και managed identity context** του target container. Από εκεί, το image μπορεί να ζητήσει tokens από το IMDS και να αποκτήσει πρόσβαση σε Azure resources στα οποία έχει πρόσβαση αυτή η workload identity.
```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>
```
Αυτό μετατρέπει ένα overwrite tag του ACR σε **εκτέλεση κώδικα**, **κλοπή secrets** ή **lateral movement** μέσα σε οποιοδήποτε container consumer που εμπιστεύεται το τροποποιημένο tag και εκθέτει μια χρήσιμη identity.
### Σχετική διαδρομή privesc: managed identities των ACR Tasks
Αν διαθέτετε επίσης `Microsoft.ContainerRegistry/registries/tasks/write` και `Microsoft.ContainerRegistry/registries/runs/write`, μεταβείτε στη διαδρομή ACR privesc και κάντε abuse απευθείας της managed identity του task:
{{#ref}}
../az-privilege-escalation/az-container-registry-privesc.md
{{#endref}}
## Αναφορές
- [TrustedSec - Pandora's Container Part 1: Unpacking Azure Container Security](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,39 +2,39 @@
{{#include ../../../banners/hacktricks-training.md}}
## Βασικές Πληροφορίες
## Βασικές πληροφορίες
Azure Container Registry (ACR) είναι ένα ασφαλές, private registry που σου επιτρέπει να **store, manage, and access container images στο Azure cloud**. Ενσωματώνεται ομαλά με αρκετές Azure services, παρέχοντας automated build και deployment workflows σε κλίμακα. Με features όπως geo-replication και vulnerability scanning, το ACR βοηθά να διασφαλιστεί enterprise-grade security και compliance για containerized applications.
Το Azure Container Registry (ACR) είναι ένα ασφαλές, ιδιωτικό registry που σας επιτρέπει να **αποθηκεύετε, να διαχειρίζεστε και να αποκτάτε πρόσβαση σε container images στο Azure cloud**. Ενσωματώνεται απρόσκοπτα με διάφορες Azure services, παρέχοντας αυτοματοποιημένα workflows για build και deployment σε μεγάλη κλίμακα. Με λειτουργίες όπως geo-replication και vulnerability scanning, το ACR συμβάλλει στην εξασφάλιση enterprise-grade ασφάλειας και συμμόρφωσης για containerized εφαρμογές.
### Permissions
### Δικαιώματα
Αυτές είναι οι **different permissions** [according to the docs](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager) που μπορούν να δοθούν πάνω σε ένα Container Registry:
Αυτά είναι τα **διαφορετικά δικαιώματα** [σύμφωνα με το documentation](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager) που μπορούν να δοθούν σε ένα Container Registry:
- Access Resource Manager
- Create/delete registry
- Πρόσβαση στο Resource Manager
- Δημιουργία/διαγραφή registry
- Push image
- Pull image
- Delete image data
- Change policies
- Sign images
- Διαγραφή image data
- Αλλαγή policies
- Υπογραφή images
Υπάρχουν επίσης κάποια **built-in roles** που μπορούν να ανατεθούν, και είναι επίσης δυνατό να δημιουργήσεις **custom roles**.
Υπάρχουν επίσης ορισμένοι **built-in roles** που μπορούν να ανατεθούν, ενώ είναι επίσης δυνατή η δημιουργία **custom roles**.
![Azure Container Registry built-in roles permissions matrix for managing registry, image, data, policies, and signing actions](/images/registry_roles.png)
![Πίνακας δικαιωμάτων των built-in roles του Azure Container Registry για τη διαχείριση ενεργειών registry, image, data, policies και signing](/images/registry_roles.png)
### Authentication
> [!WARNING]
> Είναι πολύ imporatant ότι ακόμα κι αν το όνομα του registry περιέχει κάποια uppercase letters, θα πρέπει πάντα να χρησιμοποιείς **lowercase letters** για να κάνεις login, push και pull images.
> Είναι πολύ σημαντικό, ακόμη κι αν το όνομα του registry περιέχει κεφαλαία γράμματα, να χρησιμοποιείτε πάντα **πεζά γράμματα** για login, push και pull images.
Υπάρχουν 4 τρόποι για να authenticate σε ένα ACR:
Υπάρχουν 4 τρόποι για authentication σε ένα ACR:
- **With Entra ID**: Αυτός είναι ο **default** τρόπος για να authenticate σε ένα ACR. Χρησιμοποιεί την εντολή **`az acr login`** για να authenticate στο ACR. Αυτή η εντολή θα **store the credentials** στο αρχείο **`~/.docker/config.json`**. Επιπλέον, αν τρέχεις αυτή την εντολή από environment χωρίς access σε docker socket όπως σε ένα **cloud shell**, είναι δυνατό να χρησιμοποιήσεις το flag **`--expose-token`** για να πάρεις το **token** για authentication στο ACR. Μετά, για να authenticate χρειάζεται να χρησιμοποιήσεις ως user name το `00000000-0000-0000-0000-000000000000` όπως: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN`
- **With an admin account**: Ο admin user είναι disabled by default αλλά μπορεί να ενεργοποιηθεί και τότε θα είναι δυνατό να access το registry με το **username** και **password** του admin account με full permissions στο registry. Αυτό υποστηρίζεται ακόμα επειδή κάποια Azure services το χρησιμοποιούν. Σημείωσε ότι δημιουργούνται **2 passwords** για αυτόν τον user και και τα δύο είναι valid. Μπορείς να το ενεργοποιήσεις με `az acr update -n <acrName> --admin-enabled true`. Σημείωσε ότι το username είναι συνήθως yhe registry name (και όχι `admin`).
- **With a token**: Είναι δυνατό να δημιουργήσεις ένα **token** με ένα **specific `scope map`** (permissions) για να access το registry. Μετά, είναι δυνατό να χρησιμοποιήσεις το name του token ως username και οποιοδήποτε από τα generated passwords για authentication στο registry με `docker login -u <registry-name> -p <password> <registry-url>`
- **With a Service Principal**: Είναι δυνατό να δημιουργήσεις ένα **service principal** και να αναθέσεις ένα role όπως **`AcrPull`** για να pull images. Μετά, θα είναι δυνατό να **login to the registry** χρησιμοποιώντας το SP appId ως username και ένα generated secret ως password.
- **Με Entra ID**: Αυτός είναι ο **προεπιλεγμένος** τρόπος authentication σε ένα ACR. Χρησιμοποιεί την εντολή **`az acr login`** για authentication στο ACR. Αυτή η εντολή θα **αποθηκεύσει τα credentials** στο αρχείο **`~/.docker/config.json`**. Επιπλέον, αν εκτελείτε αυτή την εντολή από environment χωρίς πρόσβαση σε docker socket, όπως ένα **cloud shell**, μπορείτε να χρησιμοποιήσετε το flag **`--expose-token`** για να λάβετε το **token** που απαιτείται για authentication στο ACR. Στη συνέχεια, για authentication, πρέπει να χρησιμοποιήσετε ως username το `00000000-0000-0000-0000-000000000000`, όπως στο εξής: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN`
- **Με admin account**: Ο admin user είναι απενεργοποιημένος από προεπιλογή, αλλά μπορεί να ενεργοποιηθεί. Έπειτα, θα είναι δυνατή η πρόσβαση στο registry με το **username** και το **password** του admin account, με πλήρη δικαιώματα στο registry. Αυτό εξακολουθεί να υποστηρίζεται επειδή ορισμένες Azure services το χρησιμοποιούν. Σημειώστε ότι δημιουργούνται **2 passwords** για αυτόν τον user και ότι και τα δύο είναι έγκυρα. Μπορείτε να τον ενεργοποιήσετε με `az acr update -n <acrName> --admin-enabled true`. Σημειώστε ότι το username είναι συνήθως το όνομα του registry και όχι `admin`.
- **Με token**: Είναι δυνατή η δημιουργία ενός **token** με ένα **συγκεκριμένο `scope map`** (δικαιώματα) για πρόσβαση στο registry. Στη συνέχεια, μπορείτε να χρησιμοποιήσετε το όνομα του token ως username και οποιοδήποτε από τα passwords που δημιουργήθηκαν για authentication στο registry με `docker login -u <registry-name> -p <password> <registry-url>`
- **Με Service Principal**: Είναι δυνατή η δημιουργία ενός **service principal** και η ανάθεση ενός role, όπως το **`AcrPull`**, για pull images. Έπειτα, θα είναι δυνατή η **σύνδεση στο registry** χρησιμοποιώντας το appId του SP ως username και ένα secret που έχει δημιουργηθεί ως password.
Example script from the [docs](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) to generate a SP with access over a registry:
Παράδειγμα script από το [documentation](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) για τη δημιουργία ενός SP με πρόσβαση σε ένα registry:
```bash
#!/bin/bash
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 password: $PASSWORD"
```
### Encryption
### Κρυπτογράφηση
Μόνο το **Premium SKU** υποστηρίζει **encryption at rest** για τα images και άλλα artifacts.
Μόνο το **Premium SKU** υποστηρίζει **encryption at rest** για τα images και τα άλλα artifacts.
### Networking
### Δικτύωση
Μόνο το **Premium SKU** υποστηρίζει **private endpoints**. Τα υπόλοιπα υποστηρίζουν μόνο **public access**. Ένα public endpoint έχει τη μορφή `<registry-name>.azurecr.io` και ένα private endpoint έχει τη μορφή `<registry-name>.privatelink.azurecr.io`. Για αυτόν τον λόγο, το όνομα του registry πρέπει να είναι μοναδικό σε όλο το Azure.
Μόνο το **Premium SKU** υποστηρίζει **private endpoints**. Τα υπόλοιπα υποστηρίζουν μόνο **public access**. Ένα public endpoint έχει τη μορφή `<registry-name>.azurecr.io` και ένα private endpoint έχει τη μορφή `<registry-name>.privatelink.azurecr.io`. Για αυτόν τον λόγο, το όνομα του registry πρέπει να είναι μοναδικό σε ολόκληρο το Azure.
### Microsoft Defender for Cloud
Αυτό σου επιτρέπει να **scan the images** στο registry για **vulnerabilities**.
Αυτό επιτρέπει το **scan των images** στο registry για **vulnerabilities**.
### Soft-delete
Το **soft-delete** feature σου επιτρέπει να **recover a deleted registry** μέσα στον αριθμό ημερών που ορίζεται. Αυτό το feature είναι **disabled by default**.
Η δυνατότητα **soft-delete** επιτρέπει την **ανάκτηση ενός διαγραμμένου registry** εντός του καθορισμένου αριθμού ημερών. Αυτή η δυνατότητα είναι **απενεργοποιημένη από προεπιλογή**.
### Webhooks
Είναι δυνατό να **create webhooks** μέσα σε registries. Σε αυτό το webhook χρειάζεται να καθορίσεις το URL όπου θα σταλεί ένα **request whenever a push or delete action is performed**. Επιπλέον, τα Webhooks μπορούν να υποδείξουν ένα scope για να καθορίσουν τα repositories (images) που θα επηρεαστούν. Για παράδειγμα, 'foo:\*' σημαίνει events under repository 'foo'.
Είναι δυνατή η **δημιουργία webhooks** μέσα στα registries. Σε αυτό το webhook πρέπει να καθοριστεί το URL στο οποίο θα **αποστέλλεται ένα request κάθε φορά που εκτελείται μια ενέργεια push ή delete**. Επιπλέον, τα Webhooks μπορούν να καθορίζουν ένα scope για να υποδεικνύουν τα repositories (images) που θα επηρεαστούν. Για παράδειγμα, το 'foo:\*' σημαίνει events μέσα στο repository 'foo'.
Από την οπτική ενός attacker, είναι ενδιαφέρον να το ελέγξεις αυτό **before performing any action** στο registry, και να το αφαιρέσεις terporarely αν χρειάζεται, ώστε να αποφύγεις να εντοπιστείς.
Από την οπτική γωνία ενός attacker, είναι ενδιαφέρον να ελεγχθεί αυτό **πριν από την εκτέλεση οποιασδήποτε ενέργειας** στο registry και να αφαιρεθεί προσωρινά, αν χρειάζεται, ώστε να αποφευχθεί ο εντοπισμός.
### Connected registries
Αυτό βασικά επιτρέπει να **mirror the images** από ένα registry σε ένα άλλο, συνήθως located on-premises.
Αυτό ουσιαστικά επιτρέπει το **mirroring των images** από ένα registry σε ένα άλλο, το οποίο συνήθως βρίσκεται on-premises.
Έχει 2 modes: **ReadOnly** και **ReadWrite**. Στο πρώτο, τα images **pulled** μόνο από το source registry, και στο δεύτερο, τα images μπορούν επίσης να **pushed** προς το source registry.
Υποστηρίζει 2 modes: **ReadOnly** και **ReadWrite**. Στο πρώτο, τα images γίνονται μόνο **pull** από το source registry, ενώ στο δεύτερο, τα images μπορούν επίσης να γίνουν **push** στο source registry.
Για να μπορούν οι clients να έχουν πρόσβαση στο registry από το Azure, δημιουργείται ένα **token** όταν χρησιμοποιείται το conected registry.
Για να έχουν οι clients πρόσβαση στο registry από το Azure, δημιουργείται ένα **token** όταν χρησιμοποιείται το connected registry.
### Runs & Tasks
Το Runs & Tasks επιτρέπει την εκτέλεση στο Azure container σχετικών actions που συνήθως χρειαζόταν να κάνεις τοπικά ή σε ένα CI/CD pipeline. Για παράδειγμα, μπορείς να **build, push, and run images in the registry**.
Το Runs & Tasks επιτρέπει την εκτέλεση στο Azure ενεργειών σχετικών με containers, τις οποίες συνήθως χρειάζεται να εκτελέσετε τοπικά ή σε ένα CI/CD pipeline. Για παράδειγμα, μπορείτε να **κάνετε build, push και run images στο registry**.
Ο ευκολότερος τρόπος για να κάνεις build και να τρέξεις ένα container είναι χρησιμοποιώντας ένα κανονικό Run:
Ο ευκολότερος τρόπος για να κάνετε build και run ένα container είναι να χρησιμοποιήσετε ένα κανονικό Run:
```bash
# Build
echo "FROM mcr.microsoft.com/hello-world" > Dockerfile
@@ -92,20 +92,20 @@ az acr build --image sample/hello-world:v1 --registry mycontainerregistry008 --f
# Run
az acr run --registry mycontainerregistry008 --cmd '$Registry/sample/hello-world:v1' /dev/null
```
Ωστόσο, αυτό θα ενεργοποιήσει runs που δεν είναι ιδιαίτερα ενδιαφέροντα από την οπτική ενός attacker, επειδή δεν έχουν καμία managed identity συνδεδεμένη με αυτά.
Ωστόσο, αυτό θα ενεργοποιήσει runs που δεν είναι ιδιαίτερα ενδιαφέροντα από την οπτική γωνία ενός attacker, επειδή δεν έχουν συνδεδεμένο managed identity.
Ωστόσο, τα **tasks** μπορούν να έχουν συνδεδεμένη μια **system και user managed identity**. Αυτά τα tasks είναι τα χρήσιμα για να **escalate privileges** στο container. Στην ενότητα privilege escalation είναι δυνατό να δεις πώς να χρησιμοποιήσεις tasks για να escalate privileges.
Ωστόσο, τα **tasks** μπορούν να έχουν συνδεδεμένα **system και user managed identity**. Αυτά τα tasks είναι χρήσιμα για **escalate privileges** στο container. Στην ενότητα privileges escalation μπορείτε να δείτε πώς να χρησιμοποιήσετε tasks για escalate privileges.
### Cache
Το χαρακτηριστικό cache επιτρέπει να **download images from an external repository** και να αποθηκεύει τις νέες εκδόσεις στο registry. Απαιτεί να έχουν ρυθμιστεί κάποιες **credentials** επιλέγοντας τα credentials από ένα Azure Vault.
Η λειτουργία cache επιτρέπει το **download images from an external repository** και την αποθήκευση των νέων εκδόσεων στο registry. Απαιτείται να υπάρχουν **credentials configured**, επιλέγοντας τα credentials από ένα Azure Vault.
Αυτό είναι πολύ ενδιαφέρον από την οπτική ενός attacker, επειδή επιτρέπει να **pivot to an external platform** αν ο attacker έχει αρκετά permissions για να αποκτήσει πρόσβαση στα credentials, το να **download images from an external repository** και η ρύθμιση ενός cache θα μπορούσαν επίσης να χρησιμοποιηθούν ως **persistence mechanism**.
Αυτό είναι πολύ ενδιαφέρον από την οπτική γωνία ενός attacker, επειδή επιτρέπει το **pivot to an external platform** εάν ο attacker έχει επαρκή permissions για πρόσβαση στα credentials. Το **download images from an external repository** και η ρύθμιση ενός cache μπορούν επίσης να χρησιμοποιηθούν ως **persistence mechanism**.
## Enumeration
> [!WARNING]
> Είναι πολύ σημαντικό ότι, ακόμη κι αν το όνομα του registry περιέχει κάποια κεφαλαία γράμματα, πρέπει να χρησιμοποιείς μόνο πεζά γράμματα στο url για να αποκτήσεις πρόσβαση σε αυτό.
> Είναι πολύ σημαντικό, ακόμη και αν το όνομα του registry περιέχει κεφαλαία γράμματα, να χρησιμοποιείτε μόνο πεζά γράμματα στο url για την πρόσβαση σε αυτό.
```bash
# List of all the registries
# Check the network, managed identities, adminUserEnabled, softDeletePolicy, url...
@@ -143,18 +143,22 @@ az acr cache list --registry <registry-name>
# Get cache details
az acr cache show --name <cache-name> --registry <registry-name>
```
## Μη εξουσιοδοτημένη πρόσβαση
## Μη αυθεντικοποιημένη πρόσβαση
{{#ref}}
../az-unauthenticated-enum-and-initial-entry/az-container-registry-unauth.md
{{#endref}}
## Κλιμάκωση προνομίων & Post Exploitation
## Privilege Escalation & Post Exploitation
{{#ref}}
../az-privilege-escalation/az-container-registry-privesc.md
{{#endref}}
{{#ref}}
../az-post-exploitation/az-container-registry-post-exploitation.md
{{#endref}}
## Αναφορές
- [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)