From efdd375bc947cfc1b5293f164f6feac61b24dced Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 19 Jul 2026 09:25:46 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/azure-security/az-services/az-containe --- .../__pycache__/translator.cpython-312.pyc | Bin 27040 -> 0 bytes src/pentesting-ci-cd/argocd-security.md | 157 +++++++++--------- .../az-post-exploitation/README.md | 4 + ...az-container-registry-post-exploitation.md | 87 ++++++++++ .../az-services/az-container-registry.md | 80 ++++----- 5 files changed, 212 insertions(+), 116 deletions(-) delete mode 100644 scripts/__pycache__/translator.cpython-312.pyc create mode 100644 src/pentesting-cloud/azure-security/az-post-exploitation/az-container-registry-post-exploitation.md diff --git a/scripts/__pycache__/translator.cpython-312.pyc b/scripts/__pycache__/translator.cpython-312.pyc deleted file mode 100644 index 1b472af5ecb08db90b27a43eef0e7d40be2273b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27040 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 diff --git a/src/pentesting-ci-cd/argocd-security.md b/src/pentesting-ci-cd/argocd-security.md index b5e957c74..2c805448f 100644 --- a/src/pentesting-ci-cd/argocd-security.md +++ b/src/pentesting-ci-cd/argocd-security.md @@ -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 443 nc -vz 8081 nc -vz 6379 ``` -## Public API / UI Attacks +## Επιθέσεις στο Public API / UI -Αν έχετε Argo CD credentials ή ένα exposed instance, ξεκινήστε με το κανονικό API surface: +Αν διαθέτεις credentials του Argo CD ή ένα εκτεθειμένο instance, ξεκίνα από τη συνηθισμένη επιφάνεια API: ```bash argocd login argocd account get-user-info @@ -51,13 +51,13 @@ argocd admin settings rbac can ``` Χρήσιμες διαδρομές επίθεσης: -- **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 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 --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}} diff --git a/src/pentesting-cloud/azure-security/az-post-exploitation/README.md b/src/pentesting-cloud/azure-security/az-post-exploitation/README.md index 52b7c1b91..ed71bf4d6 100644 --- a/src/pentesting-cloud/azure-security/az-post-exploitation/README.md +++ b/src/pentesting-cloud/azure-security/az-post-exploitation/README.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}} diff --git a/src/pentesting-cloud/azure-security/az-post-exploitation/az-container-registry-post-exploitation.md b/src/pentesting-cloud/azure-security/az-post-exploitation/az-container-registry-post-exploitation.md new file mode 100644 index 000000000..f39a853e2 --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-post-exploitation/az-container-registry-post-exploitation.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 απευθείας στο `.azurecr.io`. +```bash +az acr show --resource-group --name --query adminUserEnabled +az acr update --resource-group --name --admin-enabled true +az acr credential show -n +docker login .azurecr.io -u -p +``` +Αυτό είναι χρήσιμο επειδή τα 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 +az acr repository show-tags -n --repository --detail +docker pull .azurecr.io/: + +container_id=$(docker create .azurecr.io/:) +docker cp "$container_id":/ ./extracted_container +docker rm "$container_id" +docker inspect .azurecr.io/: | jq -r '.[0].Config.Env[]?' +dive .azurecr.io/: +``` +Στόχοι υψηλής αξίας περιλαμβάνουν **μεταβλητές περιβάλλοντος**, **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 : .azurecr.io/: +docker push .azurecr.io/: + +# If your workstation architecture differs from the target runtime, build for the consumer platform first + +docker buildx build --platform linux/amd64 -t .azurecr.io/: --load . +docker push .azurecr.io/: +``` +Πριν αντικαταστήσετε ένα 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.azure.net/secrets/?api-version=7.4' +az container restart --resource-group --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}} diff --git a/src/pentesting-cloud/azure-security/az-services/az-container-registry.md b/src/pentesting-cloud/azure-security/az-services/az-container-registry.md index 3f8c845a1..81a2d52c8 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-container-registry.md +++ b/src/pentesting-cloud/azure-security/az-services/az-container-registry.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 --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 -p ` -- **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 --admin-enabled true`. Σημειώστε ότι το username είναι συνήθως το όνομα του registry και όχι `admin`. +- **Με token**: Είναι δυνατή η δημιουργία ενός **token** με ένα **συγκεκριμένο `scope map`** (δικαιώματα) για πρόσβαση στο registry. Στη συνέχεια, μπορείτε να χρησιμοποιήσετε το όνομα του token ως username και οποιοδήποτε από τα passwords που δημιουργήθηκαν για authentication στο registry με `docker login -u -p ` +- **Με 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 έχει τη μορφή `.azurecr.io` και ένα private endpoint έχει τη μορφή `.privatelink.azurecr.io`. Για αυτόν τον λόγο, το όνομα του registry πρέπει να είναι μοναδικό σε όλο το Azure. +Μόνο το **Premium SKU** υποστηρίζει **private endpoints**. Τα υπόλοιπα υποστηρίζουν μόνο **public access**. Ένα public endpoint έχει τη μορφή `.azurecr.io` και ένα private endpoint έχει τη μορφή `.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 # Get cache details az acr cache show --name --registry ``` -## Μη εξουσιοδοτημένη πρόσβαση +## Μη αυθεντικοποιημένη πρόσβαση {{#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)