Συνεχίζοντας τον κύκλο άρθρων σχετικά με την ασφάλεια σε δικτυακά περιβάλλοντα σε συνεργασία με τον Παναγιώτη Καλαντζή, στην όγδοη θέση των συνηθέστερων αδυναμιών παρουσιάζεται η χρήση πλαστών / κακόβουλων αιτημάτων μεταξύ ιστοσελίδων / διαδικτυακών εφαρμογών (Cross-Site Request Forgery). Οι σύγχρονοι φυλλομετρητές (browsers) αποστέλλουν τα διαπιστευτήρια (credentials ή username+pass ή λεπτομέρειες συνεδρίας – session details) αυτόματα για τους ήδη διαπιστευμένους (συνήθως συνδεδεμένους) χρήστες με αποτέλεσμα αν ένας σύνδεσμος (αίτημα προς τον εξυπηρετητή) είναι κακόβουλος και κρυμμένος να εκτελείται χωρίς να το καταλάβει ο χρήστης.
Το πρόβλημα ξεκινά από το γεγονός πως η διαδικτυακή εφαρμογή επιτρέπει στους κακόβουλους χρήστες να προβλέψουν ενδελεχώς όλες τις λεπτομέρειες μιας δράσης της εφαρμογής. Έτσι ο επιτιθέμενος σχεδιάζει ένα αίτημα, στην απλούστερη των περιπτώσεων βάσει αιτήματος HTTP GET, και το κρύβει σε μια εικόνα, ένα σύνδεσμο ακόμα και στο scroll του ποντικού. Λίγη JavaScript και οι ιδιότητες (attributes) on* των ετικετών της html αρκούν για την εμφανή ή μη φόρτωση σελίδας!
Σκεφτείτε την περίπτωση όπου ο χρήστης έχει πολλές καρτέλες (tabs) ή παράθυρα του συνδεδεμένου φυλλομετρήτη του ανοικτά (ιδιαίτερα σπάνιο – NOT) και κάνει ταυτόχρονα πολλές δουλειές (επίσης σπάνιο – NOT). Συνεχίζοντας το παράδειγμα ας κάνουμε την υπερβολική υπόθεση ότι μια από τις καρτέλες είναι το σπανιότατο facebook (αυτός κι άλλοι ~1.000.000.000 χρήστες). Έστω επίσης ότι ένας «φίλος» του χρήστη του στέλνει email ή facebook-message με τον (έστω λειτουργικό) σύνδεσμο με κείμενο το “Δες τι κάνει αυτός ρε, δεν υπάρχει!” και :
href="http://www.facebook.com/?user=victim_id&action=unfriend&friend_id=a_victims_friend"
ή τον προωθεί σε ιστοσελίδα της οποίας η ετικέτα body περιέχει μια ετικέτα με ιδιότητες τις
style="display: none;" src="http://www.facebook.com/?user=victim_id&action=unfriend&friend_id=a_victims_friend" height="240" width="320"
Ευτυχώς ο εντοπισμός των προβληματικών εφαρμογών στις εν λόγω επιθέσεις είναι εύκολος με τη χρήση δοκιμών διείσδυσης ή ανάλυση του κώδικα της εφαρμογής. Ο οργανισμός OWASP έχει ετοιμάσει ένα εξειδικευμένο στις συγκεκριμένες επιθέσεις εργαλείο που επιτρέπει το σχεδιασμό δοκιμών για την επιβεβαίωση ύπαρξης κίνδυνου από επιθέσεις πλαστών/κακόβουλων αιτημάτων μεταξύ ιστοσελίδων/διαδικτυακών εφαρμογών.
Τα συνήθη αποτελέσματα της εκμετάλλευσης της αδυναμίας αυτής είναι πως ο επιτιθέμενος μπορεί (ακόμα και με μη εμφανή τρόπο) να εξαπατήσει το θύμα στην εκτέλεση διαδικασίας που παρότι το θύμα έχει δικαίωμα να κάνει δεν επιθυμεί να κάνει!
Ακολούθως, σε επιχειρηματικό επίπεδο πρέπει κανείς να θεωρεί τις συνέπειες των επιθέσεων τύπου «πλαστών/κακόβουλων αιτημάτων μεταξύ ιστοσελίδων/διαδικτυακών εφαρμογών» ιδιαίτερα σοβαρές καθώς οδηγούν τους χρήστες στο να κάνουν πράξεις που τους επιτρέπονται και τις οποίες το σύστημα δεν είναι σε θέση να βεβαιώσει αν τις επιθυμούσαν. Επομένως, η επιχειρηματική υπόληψη μπορεί να βλαφθεί ανεπανόρθωτα από την αίσθηση των χρηστών πως τους εξέθεσε η εφαρμογή κάνοντας κάτι που δεν ήθελαν χωρίς να το κάνουν οι ίδιοι.
Για την αντιμετώπιση της εν λόγω αδυναμίας, η συνήθης λύση απαιτεί τη χρήση μη προβλέψιμων μεταβλητών στα HTTP αιτήματα (μοναδικά ανά συνεδρία):
- Χρήση μοναδικής και μη προβλέψιμης μεταβλητής σε κρυφό πεδίο, αποφεύγοντας την εύκολη εμφάνισή της,
- Χρήση μοναδικής μεταβλητής στο URL του αιτήματος, που ωστόσο έχει μειωμένη απόδοση μιας είναι εμφανής/προβλέψιμη η ύπαρξη του πεδίου,
- Χρήση επανά-επιβεβαίωσης του αιτήματος του χρήστη με captcha, που ωστόσο εισαγάγει επιβάρυνση του χρήστη
Στο επόμενο άρθρο θα δούμε την αδυναμία που προκαλείται από τη μη επιβεβαίωση των δικαιωμάτων των χρηστών που κάνουν αιτήματα στην εφαρμογή (Missing Function Level Access Control).
Επικοινωνήστε μαζί μας για να συζητήσουμε πώς μπορεί το διαδικτυακού λογισμικό σας να γίνει ασφαλέστερο προστατεύοντας την επιχείρησή και τους πελάτες σας.