Έγχυση προτύπου από την πλευρά του διακομιστή - ευπάθεια ssti - ωφέλιμα φορτία ssti

Εξήγηση της εισαγωγής προτύπου από την πλευρά του διακομιστή με παραδείγματα πραγματικού κώδικα

Πώς λειτουργεί η έγχυση προτύπων από την πλευρά του διακομιστή στο παρασκήνιο

Μια εισαγωγή προτύπου από την πλευρά του διακομιστή συμβαίνει όταν η είσοδος του χρήστη ενσωματώνεται απευθείας σε μια μηχανή δημιουργίας προτύπων και αξιολογείται χωρίς κατάλληλη απολύμανση ή απομόνωση. Αυτό δημιουργεί μια ευπάθεια SSTI που επιτρέπει σε έναν εισβολέα να εισάγει ειδικά κατασκευασμένα ωφέλιμα φορτία SSTI (για παράδειγμα, {{7*7}} στο Jinja2), το οποίο η μηχανή θα αξιολογήσει, επιτρέποντας τα πάντα, από την αποκάλυψη δεδομένων έως την αυθαίρετη εκτέλεση κώδικα στο περιβάλλον του διακομιστή. Επειδή διαφορετικές μηχανές προτύπων εκθέτουν διαφορετικά αντικείμενα και API, τα ωφέλιμα φορτία SSTI ποικίλλουν ανά πλατφόρμα, αλλά μοιράζονται τον ίδιο κίνδυνο: αφήνουν μη αξιόπιστη είσοδο να ξεφύγει από την αναμενόμενη ροή απόδοσης και να εκτελεστεί στον χρόνο εκτέλεσης της εφαρμογής, οδηγώντας συχνά σε πλήρη απομακρυσμένη εκτέλεση κώδικα ή πλευρική κίνηση εάν δεν ελεγχθεί.

Παράδειγμα ελάχιστης ευπάθειας στο Jinja2

from flask import request, render_template_string @app.route("/hello") def hello():     name = request.args.get("name", "world")     # ❌ Vulnerable: directly rendering user input     return render_template_string("Hello " + name) 

Εάν ένας χρήστης στείλει ?name={{7*7}}, η εφαρμογή θα το αξιολογήσει, επιστρέφοντας Γεια σας 49Αυτή είναι μια ευπάθεια SSTI που συναντάται σε σχολικό επίπεδο.

Παράδειγμα ελάχιστης ευπάθειας στο Twig

// ❌ Vulnerable Twig usage $template = $twig->createTemplate("Welcome " . $_GET['user']); echo $template->render([]); 

Ένας εισβολέας μπορεί να εισάγει ωφέλιμα φορτία SSTI όπως {{7*7}} για να αποδειχθεί η εκτέλεση κώδικα. Ο κίνδυνος: η απλή έγχυση μπορεί να κλιμακωθεί στην ανάγνωση αρχείων, στην εκτέλεση εντολών λειτουργικού συστήματος ή στην περαιτέρω στροφή στην υποδομή.

Πραγματικά Εκμεταλλεύματα: Φορτία SSTI που ενεργοποιούν την απομακρυσμένη εκτέλεση κώδικα

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

ωφέλιμα φορτία Jinja2

  • {{7*7}} → αριθμητική εκτέλεση
  • {{config.items()}} → διαρροές ρυθμίσεων διακομιστή.
  • {{ ”.__class__.__mro__[2].__subclasses__() }} → διαδρομή προς το RCE

Ωφέλιμα φορτία ταχύτητας

  • #set($x=”7″)${x} → παράκαμψη έγχυσης
  • #set($a=$class.inspect(“java.lang.Runtime”)) → άμεση πρόσβαση κατά τον χρόνο εκτέλεσης

Ωφέλιμα φορτία Twig

  • {{7*7}} → αριθμητική
  • {{app.request.server.all}} → μεταβλητές περιβάλλοντος
  • {{_self.env.registerUndefinedFilterCallback(‘system’)}} → εκτέλεση κώδικα

Αυτά τα ωφέλιμα φορτία SSTI καταδεικνύουν πώς η ίδια ευπάθεια σε διαφορετικούς κινητήρες οδηγεί σε διαφορετικά διαδρομές εκμετάλλευσης, αλλά είναι πάντα επικίνδυνοι.

Πού κρύβεται η έγχυση προτύπου από την πλευρά του διακομιστή CI/CD-Εφαρμογές που καθοδηγούνται από

Η εισαγωγή προτύπων από την πλευρά του διακομιστή δεν αποτελεί απλώς κίνδυνο για μια εφαρμογή ιστού. Εμφανίζεται και σε σύγχρονος CI/CD pipelines πάρα πολύ. Τυπικές κρυψώνες περιλαμβάνουν:

  • Διαγράμματα τιμόνι στο Kubernetes, όπου οι τιμές του προτύπου αποδίδονται δυναμικά
  • Email templates που συνενώνουν εισόδους που ελέγχονται από τον χρήστη
  • Dashboards όπου οι συμβολοσειρές ερωτήματος ή τα δεδομένα διαμόρφωσης εισάγονται σε πρότυπα
  • Σενάρια DevOps που δημιουργούν HTML/Markdown χρησιμοποιώντας μηχανές δημιουργίας προτύπων.

Παράδειγμα:

# ❌ Insecure Helm values with user input configMap:   appMessage: "{{ .Values.message }}" 

If.Values.message προέρχεται από μη αξιόπιστη είσοδο, εισάγει μια έγχυση προτύπου από την πλευρά του διακομιστή στην ανάπτυξή σας pipeline Itself.

Πρόληψη SSTI με ασφαλέστερα πρότυπα προτύπων και στατική ανάλυση

Ο μετριασμός των τρωτών σημείων του SSTI απαιτεί καλύτερα πρότυπα κωδικοποίησης και έγκαιρη ανίχνευση.

Ασφαλή μοτίβα

  • ❌ Μην χρησιμοποιείτε συμβολοσειρά_προτύπου_απόδοσης ή ισοδύναμο
  • ✅ Χρησιμοποιήστε προκαθορισμένα αρχεία προτύπων και μεταβιβάστε αποστειρωμένες μεταβλητές
  • ✅ Μηχανές προτύπων sandbox όταν είναι διαθέσιμες
  • ✅ Επικύρωση και διαφυγή εισόδου χρήστη πριν από την απόδοση

Μη ασφαλής έναντι ασφαλούς χειρισμού cookie (σχετικός κίνδυνος εισόδου)

# ❌ Insecure: session cookie without flags response.set_cookie("session", token) # ✅ Secure: session cookie hardened response.set_cookie("session", token, httponly=True, secure=True, samesite="Strict") 

Μικρή λίστα ελέγχου για προγραμματιστές

  • Να μην αποδίδονται ποτέ απευθείας οι ακατέργαστες εισροές χρήστη
  • Χρησιμοποιήστε πρότυπα σε περιβάλλον δοκιμών (sandboxed) όταν υποστηρίζονται
  • Απολύμανση και επικύρωση όλων των μεταβλητών προτύπου
  • Αποφύγετε τους αξιολογητές προσαρμοσμένων προτύπων
  • Σάρωση κωδικού για συμβολοσειρά_προτύπου_απόδοσης ή μοτίβα συνένωσης συμβολοσειρών

Στατική ανάλυση και τα linters μπορούν να επισημάνουν επικίνδυνες κατασκευές πριν φτάσουν στην παραγωγή.

Ενσωμάτωση ελέγχων SSTI στο DevSecOps Pipelines

Η έγκαιρη ανίχνευση της έγχυσης προτύπου από την πλευρά του διακομιστή είναι φθηνότερη και ασφαλέστερη από την επιδιόρθωσή της αργότερα. Οι ομάδες DevSecOps θα πρέπει να ενσωματώνουν ελέγχους σε pipelines:

  • Commit hooks: απόρριψη commits με επικίνδυνες λειτουργίες (συμβολοσειρά_προτύπου_απόδοσης)
  • Στατικοί αναλυτές: σάρωση για κίνδυνο έγχυσης προτύπου από την πλευρά του διακομιστή στον κώδικα προτύπου
  • Επικύρωση εξάρτησης: επισήμανση παρωχημένων μηχανισμών προτύπων με γνωστά τρωτά σημεία SSTI
  • Pipeline πύλες: τα μπλοκ συγχωνεύονται μέχρι να περάσουν οι έλεγχοι SSTI

Κάνοντας την ανίχνευση ωφέλιμου φορτίου SSTI μέρος του CI/CD, αποτρέπετε την αποστολή εκμεταλλεύσιμου κώδικα.

Μην αφήσετε την έγχυση προτύπου από την πλευρά του διακομιστή να γλιστρήσει στη στοίβα σας

Μια μεμονωμένη εισαγωγή προτύπου από την πλευρά του διακομιστή μπορεί να κλιμακωθεί από μαθηματικά κόλπα ({{7*7}}) σε πλήρη απομακρυσμένη εκτέλεση κώδικα. Τα τρωτά σημεία του SSTI εμφανίζονται όχι μόνο σε εφαρμογές ιστού αλλά και σε CI/CD pipelines, γραφήματα Helm και πρότυπα email.

Βασικά καραβάνια

  • Να μην αποδίδονται ποτέ ακατέργαστες εισόδους χρήστη σε πρότυπα
  • Επικύρωση και απολύμανση όλων των δυναμικών μεταβλητών
  • Διαφορετικές μηχανές (Jinja2, Velocity, Twig) έχουν διαφορετικά φορτία SSTI, αλλά όλες μπορούν να χρησιμοποιηθούν ως όπλα.
  • Χρησιμοποιήστε στατική ανάλυση και πύλες fail-fast σε pipelines
  • Ελέγχετε τακτικά τα πρότυπα στη στοίβα σας

Εργαλεία όπως Ξυγένη βοηθούν τις ομάδες να εντοπίζουν τη μη ασφαλή χρήση προτύπων, να αποκλείουν τα τρωτά σημεία του SSI και να επιβάλλουν ασφαλείς πρακτικές σε όλες τις pipelines και εξαρτήσεις. Στο DevSecOps, η αντιμετώπιση των ωφέλιμων φορτίων SSTI ως κινδύνου κορυφαίας βαθμίδας είναι απαραίτητη επειδή μια εφάπαξ ένεση στο pipeline ή μια εφαρμογή μπορεί να θέσει σε κίνδυνο ολόκληρο το περιβάλλον σας.

εργαλεία-ανάλυσης-σύνθεσης-λογισμικού-sca
Ιεράρχηση, αποκατάσταση και ασφάλεια των κινδύνων λογισμικού σας
Αποκτήστε τον Δωρεάν Λογαριασμό σας.
Δεν απαιτείται πιστωτική κάρτα.

Ασφαλίστε την ανάπτυξη και την παράδοση λογισμικού σας

με το Xygeni Product Suite