Gh Actions - Context Script Injections
Βασικές Πληροφορίες
Σημειώστε ότι υπάρχουν ορισμένα πεδία πλαισίου του github των οποίων οι τιμές ελέγχονται από τον χρήστη που δημιουργεί το PR. Εάν η ενέργεια του github χρησιμοποιεί αυτά τα δεδομένα για να εκτελέσει οτιδήποτε, μπορεί να οδηγήσει σε αυθαίρετη εκτέλεση κώδικα. Αυτά τα πεδία πλαισίου συνήθως τελειώνουν με body
, default_branch
, email
, head_ref
, label
, message
, name
, page_name
,ref
και title
. Για παράδειγμα (λίστα από αυτό το άρθρο):
github.event.comment.body
github.event.issue.body
github.event.issue.title
github.head_ref
github.pull_request.*
github.*.*.authors.name
github.*.*.authors.email
Σημειώστε ότι υπάρχουν λιγότερο προφανείς πηγές πιθανώς μη αξιόπιστης εισόδου, όπως ονόματα κλαδιών και διευθύνσεις email, που μπορούν να είναι αρκετά ευέλικτες όσον αφορά το επιτρεπόμενο περιεχόμενο τους. Για παράδειγμα, zzz";echo${IFS}"hello";#
θα ήταν ένα έγκυρο όνομα κλαδιού και θα μπορούσε να αποτελέσει ένα δυνητικό διανυσματικό επίθεσης για έναν στόχο αποθετηρίου.
Παράδειγμα μιας επίθεσης εισαγωγής σεναρίου
Μια επίθεση εισαγωγής σεναρίου μπορεί να συμβεί απευθείας μέσα στο ενσωματωμένο σενάριο μιας ροής εργασίας. Στο παρακάτω παράδειγμα, μια ενέργεια χρησιμοποιεί μια έκφραση για να ελέγξει την ορθότητα του τίτλου ενός pull request, αλλά προσθέτει επίσης τον κίνδυνο εισαγωγής σεναρίου:
Πριν την εκτέλεση του shell script, οι εκφράσεις μέσα στο ${{ }}
αξιολογούνται και στη συνέχεια αντικαθίστανται με τις αντίστοιχες τιμές, πράγμα που μπορεί να το καθιστά ευάλωτο σε εντολές εισαγωγής κελύφους.
Για να εισαχθούν εντολές σε αυτήν τη ροή εργασίας, ο επιτιθέμενος μπορεί να δημιουργήσει ένα αίτημα εξαγωγής με τίτλο a"; ls $GITHUB_WORKSPACE"
Σε αυτό το παράδειγμα, το χαρακτήρας "
χρησιμοποιείται για να διακόψει την δήλωση title=
"${{ github.event.pull_request.title }}"
, επιτρέποντας την εκτέλεση της εντολής ls
στον runner.
Last updated