Όταν χρησιμοποιείτε το `όταν χρησιμοποιείτε ()` στο GraphQL, το οποίο είναι συνήθως μια μέθοδος για τη φόρτωση δεδομένων που σχετίζονται με την υπό όρους ή τις συσχετίσεις (π.χ. σε resolvers που βασίζονται σε ORM), μπορούν να προκύψουν αρκετές κοινές παγίδες ασφαλείας. Αυτές οι παγίδες σχετίζονται κυρίως με ευρύτερα ζητήματα ασφαλείας GraphQL, αλλά είναι ιδιαίτερα σημαντικά, διότι «όταν φορτώθηκαν ()« συχνά συνεπάγονται την ανάληψη πρόσθετων ενσωματωμένων ή σχετικών δεδομένων, αυξάνοντας την πολυπλοκότητα και τον κίνδυνο.
Κοινές παγίδες ασφαλείας με `Whenloaded ()` στο GraphQL
** 1. Ασυνεπείς ή ελλείποντες ελέγχους εξουσιοδότησης
"Όταν φορτώνεται ()` συχνά ενεργοποιεί τη φόρτωση ένθετων ή σχετικών δεδομένων μετά την εκτέλεση του αρχικού διαλυτή. Εάν η λογική εξουσιοδότησης δεν εφαρμόζεται σταθερά σε κάθε σημείο διαλυτή ή φόρτισης δεδομένων (συμπεριλαμβανομένων εκείνων που ενεργοποιούνται από το "Whenloaded ()`), οι μη εξουσιοδοτημένοι χρήστες μπορούν να αποκτήσουν πρόσβαση σε ευαίσθητα δεδομένα. Αυτό είναι ένα κοινό ζήτημα όπου προστατεύονται ορισμένα μονοπάτια στα ίδια δεδομένα, αλλά άλλα (όπως αυτά μέσω του "Whenloaded ()`) δεν επιτρέπουν στους επιτιθέμενους να παρακάμψουν τα στοιχεία ελέγχου πρόσβασης [4] [6]. Η εξουσιοδότηση πρέπει να εφαρμόζεται τόσο στο επίπεδο ερωτημάτων όσο και σε όλους τους ένθετους διαλυτές ή φορτωτές δεδομένων.
** 2. Υπερβολικά και σύνθετα ερωτήματα που οδηγούν σε άρνηση υπηρεσίας (DOS)
Χρησιμοποιώντας το `όταν φορτώνεται ()` μπορεί να προκαλέσει βαθιά ενωμένα ερωτήματα που φέρνουν μεγάλες ποσότητες σχετικών δεδομένων. Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό με την κατασκευή ερωτημάτων που προκαλούν υπερβολική φόρτωση και επεξεργασία δεδομένων, οδηγώντας σε εξάντληση των πόρων και DOS. Η ικανότητα του GraphQL να παρατηρεί πολλαπλά συναφή αντικείμενα σε ένα μόνο ερώτημα καθιστά δύσκολο να προβλέψουμε τη χρήση των πόρων και το "Whenloaded () μπορεί να το επιδεινώσει με τη φόρτωση πρόσθετων δεδομένων υπό όρους [4] [5]. Οι μετριασμοί περιλαμβάνουν τον περιορισμό του βάθους των ερωτημάτων, τη βαθμολόγηση της πολυπλοκότητας και τον περιορισμό των επιτοκίων.
** 3. Έκθεση ευαίσθητων δεδομένων μέσω ακατάλληλης επιλογής πεδίου
Εάν το "Whenloaded () φορτώνει τα δεδομένα που σχετίζονται με τα δεδομένα χωρίς προσεκτικό έλεγχο σε ποια πεδία εκτίθενται, ευαίσθητες πληροφορίες, όπως κωδικούς πρόσβασης, μάρκες ή ιδιωτικά στοιχεία χρήστη, ενδέχεται να επιστραφούν ακούσια στην απόκριση GraphQL [5]. Αυτός ο κίνδυνος αυξάνεται εάν λείπουν οι έλεγχοι εξουσιοδότησης ή εάν τα μηνύματα σφάλματος διαρρέουν ευαίσθητες πληροφορίες. Οι προγραμματιστές πρέπει να διασφαλίζουν ότι τα ευαίσθητα πεδία δεν είναι ποτέ εκτεθειμένα, ακόμη και όταν φορτώνονται ένθετα δεδομένα.
** 4. Επιθέσεις έγχυσης μέσω ακατάλληλης επικύρωσης εισόδου
Όταν το `όταν χρησιμοποιείται ()` `χρησιμοποιείται με δυναμικά επιχειρήματα ή φίλτρα, η ακατάλληλη επικύρωση εισόδου μπορεί να οδηγήσει σε ευπάθειες έγχυσης, όπως η έγχυση ερωτήματος GraphQL ή ακόμα και η έγχυση SQL εάν τα υποκείμενα δεδομένα δεν είναι σωστά παραμετροποιημένα [6]. Οι επιτιθέμενοι ενδέχεται να εισάγουν κακόβουλα ερωτήματα ή εντολές που χειρίζονται τη λογική που λαμβάνουν τα δεδομένα. Η σωστή επικύρωση εισόδου και η χρήση παραμετροποιημένων ερωτημάτων είναι απαραίτητη.
** 5. Παρακάμπτοντας τον περιορισμό του ρυθμού και την προστασία της βίαιης δύναμης
Επειδή το `όταν φορτώνεται ()` μπορεί να προκαλέσει πολλαπλά ένθετα δεδομένα που εισέρχονται μέσα σε ένα μόνο ερώτημα, οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό για να παρακάμψουν τον παραδοσιακό περιορισμό του επιτοκίου. Για παράδειγμα, μπορούν να στείλουν ένα ενιαίο σύνθετο ερώτημα που ενεργοποιεί πολλά δεδομένα ή μεταλλάξεις, εκτελώντας αποτελεσματικά επιθέσεις βίαιης δύναμης ή απαρίθμησης χωρίς να προκαλούν όρια ανά-ανταποκριτική [4] [7]. Οι στρατηγικές περιορισμού των επιτοκίων πρέπει να εξετάσουν την πολυπλοκότητα των ερωτημάτων και τις ένθετες λειτουργίες.
** 6. Αυξημένη επιφάνεια επίθεσης λόγω της ενδοσκόπησης και των εργαλείων του σχήματος
Η χρήση του `όταν φορτώνεται ()` συχνά αντικατοπτρίζει ένα σύνθετο σχήμα με πολλαπλές ένθετες σχέσεις. Οι επιτιθέμενοι μπορούν να χρησιμοποιήσουν την ενδοσκόπηση GraphQL και εργαλεία όπως το GraphIQL για να ανακαλύψουν αυτές τις σχέσεις και τα ερωτήματα βιοτεχνίας που εκμεταλλεύονται «όταν φορτώθηκαν ()« για να αποκτήσουν πρόσβαση σε ακούσια δεδομένα [1] [8]. Η απενεργοποίηση της ενδοσκόπησης στην παραγωγή ή ο περιορισμός της σε εξουσιοδοτημένους χρήστες μπορεί να μειώσει αυτόν τον κίνδυνο.
Περίληψη
Οι κύριες παγίδες ασφαλείας όταν χρησιμοποιείτε το `Whenloaded ()` στο GraphQL περιστρέφονται γύρω:
- Αποτυχία επιβολής συνεπής εξουσιοδότηση σε όλες τις ένθετες διαδρομές φόρτωσης δεδομένων.
- επιτρέποντας υπερβολικά σύνθετα ή βαθιά ερωτήματα που προκαλούν DOS.
- Εκθέτοντας ευαίσθητα δεδομένα μέσω ένθετων πεδίων.
- Ανεπαρκής επικύρωση εισόδου που οδηγεί σε επιθέσεις έγχυσης.
- Παράκαμψη των ορίων ρυθμού λόγω σύνθετων ένθετων ερωτημάτων.
- Αυξημένη έκθεση λόγω της ενδοσκόπησης και των εργαλείων του σχήματος.
Οι μετριασμοί περιλαμβάνουν αυστηρούς ελέγχους εξουσιοδότησης σε κάθε διαλυτή, πολυπλοκότητα των ερωτημάτων και περιορισμό βάθους, αυστηρή επικύρωση εισροών, σχεδιασμό προσεκτικού σχήματος, απενεργοποίηση της ενδοσκόπησης στην παραγωγή και περιεκτικό περιορίζοντα επιτοκίων για τη δομή ερωτήματος GraphQL [3] [4] [5] [6] [8].
Αναφορές:
[1] https://portswigger.net/web-security/graphql
[2] https://www.imperva.com/blog/graphql-vulnerability-common-attacks/
[3] https://tyk.io/blog/graphql-security-7-common-vulnerabilities-and-how-to-mitigate-theisks/
[4] https://www.brightsec.com/blog/graphql-security/
[5] https://blog.convisoappsec.com/en/security-in-graphql/
[6] https://wundergraph.com/blog/the_complete_graphql_security_guide_fixing_the_13_moth
[7] https://beaglesecurity.com/blog/article/graphql-attacks-vulnerabilities.html
[8] https://www.fastly.com/blog/exploring-the-security-implications-of-graphql