OWASP API Security Top 10: 0xa3 excessive data exposure

# API3:2019 Excessive Data Exposure

| Παράγοντες Απειλής (Threat agents) / Φορείς Επίθεσης (Attack vectors) | Αδυναμία Ασφαλείας (Security Weakness) | Επιπτώσεις (Impacts) |
| - | - | - |
| Εξαρτώνται από το API : Εκμεταλλευσιμότητα **3** | Επικράτηση (Prevalence) **2** : Ανιχνευσιμότητα **2** | Τεχνικές Επιπτώσεις **2** : Εξαρτώνται από την Επιχείρηση |
| Η εκμετάλλευση (exploitation) της υπερβολικής έκθεσης δεδομένων (Excessive Data Exposure) είναι απλή και συνήθως πραγματοποιείται ανιχνεύοντας και αναλύοντας την κίνηση των δεδομένων που επιστρέφονται από το API στον χρήστη. Στόχος της ανάλυσης των δεδομένων είναι η αναζήτηση πιθανής έκθεσης σε ευαίσθητα δεδομένα που δεν πρέπει να επιστραφούν στον χρήστη. | Το κενό ασφαλείας εμφανίζεται όταν APIs βασίζονται στις εφαρμογές-πελάτες (client) για την εκτέλεση του φιλτραρίσματος δεδομένων. Δεδομένου ότι τα APIs χρησιμοποιούνται ως πηγές δεδομένων, συχνά οι προγραμματιστές προσπαθούν να τα υλοποιήσουν με γενικό τρόπο χωρίς να σκεφτούν την ευαισθησία των δεδομένων που εκτίθενται. Τα αυτόματα εργαλεία συνήθως δεν μπορούν να εντοπίσουν αυτόν τον τύπο ευπάθειας, επειδή είναι δύσκολο να γίνει διάκριση μεταξύ των μη-ευαίσθητων δεδομένων που επιστρέφονται από το API και των ευαίσθητων δεδομένων που δεν πρέπει να επιστραφούν. Η δυσκολία αυτή προκύπτει επειδή τα αυτόματα εργαλεία δεν κατανοούν σε βάθος την εφαρμογή. | Η υπερβολική έκθεση δεδομένων οδηγεί συνήθως σε έκθεση ευαίσθητων δεδομένων. |

## Πότε το API είναι ευάλωτο

Το API επιστρέφει ευαίσθητα δεδομένα στην εφαρμογή-πελάτη (client) βάσει σχεδίασης. Αυτά τα δεδομένα συνήθως φιλτράρονται από την πλευρά της εφαρμογής-πελάτη πριν παρουσιαστούν στον χρήστη. Ένας εισβολέας μπορεί εύκολα να δει τα ευαίσθητα δεδομένα ανιχνεύοντας την κίνηση.

## Παραδείγματα από Σενάρια Επίθεσης

### Σενάριο Επίθεσης #1

Η ομάδα που ασχολείται με το development για κινητά χρησιμοποιεί το τελικό σημείο προορισμού
`/api/articles/{articleId}/comments/{commentId}` στην σελίδα προβολής άρθρων για την εμφάνιση 
των μεταδεδομένων των σχολίων. Ανιχνεύοντας την κίνηση της εφαρμογής για κινητά, ένας εισβολέας 
ανακαλύπτει ότι επιστρέφονται και άλλα ευαίσθητα δεδομένα που σχετίζονται 
με τον συντάκτη του σχολίου. Η υλοποίηση τελικού σημείου προορισμού (endpoint), χρησιμοποιεί μια 
γενική μέθοδο `toJSON()` για τη σειριοποίηση (serialization) του αντικειμένου στο μοντέλο `User`, 
το οποίο περιέχει ευαίσθητα δεδομένα (PII).

### Σενάριο Επίθεσης #2

Ένα σύστημα επιτήρησης που βασίζεται στο IOT επιτρέπει στους διαχειριστές να δημιουργούν χρήστες με διαφορετικά δικαιώματα. Ένας διαχειριστής δημιούργησε έναν λογαριασμό χρήστη για έναν νέο φύλακα που θα πρέπει να έχει πρόσβαση μόνο σε συγκεκριμένα κτίρια στον ιστότοπο. Μόλις ο φύλακας χρησιμοποιήσει την εφαρμογή του για κινητά, ενεργοποιείται μια κλήση API στη διεύθυνση: `/api/sites/111/cameras` προκειμένου να ληφθούν δεδομένα σχετικά με τις διαθέσιμες κάμερες και να εμφανίστουν στον πίνακα ελέγχου. Η απάντηση περιέχει μια λίστα με λεπτομέρειες σχετικά με τις κάμερες στην ακόλουθη μορφή: `{"id":"xxx","live_access_token":"xxxx-bbbbb","building_id":"yyy"}`. Ενώ το GUI της εφαρμογής-πελάτη εμφανίζει μόνο κάμερες στις οποίες θα πρέπει να έχει πρόσβαση ο φύλακας, η πραγματική απόκριση API περιέχει μια πλήρη λίστα με όλες τις κάμερες στον ιστότοπο.

## Τρόπος Πρόληψης

* Μην βασίζεστε ποτέ στην πλευρά της εφαρμογής-πελάτη για να φιλτράρετε ευαίσθητα δεδομένα.
* Ελέγξτε τις απαντήσεις από το API για να βεβαιωθείτε ότι περιέχουν μόνο αποδεκτά δεδομένα.
* Οι back-end προγραμματιστές θα πρέπει πάντα να διερωτόνται "ποιος είναι ο καταναλωτής των δεδομένων;", 
 πριν εκθέσουν δημόσια ένα νέο τελικό σημείο προορισμού API.
* Αποφύγετε τη χρήση γενικών μεθόδων όπως `to_json()` και `to_string()`. 
Αντίθετα, επιλέξτε συγκεκριμένα πεδία που θέλετε πραγματικά να επιστρέψετε.
* Ταξινομήστε όλες τις ευαίσθητες και προσωπικά αναγνωρίσιμες πληροφορίες (PII) 
τις οποίες αποθηκεύει και συνεργάζεται η εφαρμογή σας, ελέγχοντας όλες τις κλήσεις 
API που επιστρέφουν τέτοιες πληροφορίες για να δείτε εάν αυτές οι απαντήσεις 
δημιουργούν πρόβλημα ασφαλείας.
* Εφαρμόστε έναν μηχανισμό επικύρωσης απόκρισης που βασίζεται σε σχήματα (schema-based)
ως ένα επιπλέον επίπεδο ασφαλείας. Ως μέρος αυτού του μηχανισμού ορίστε και επιβάλλετε 
δεδομένα που επιστρέφονται από όλες τις μεθόδους API, συμπεριλαμβανομένων των σφαλμάτων.


## Αναφορές (References)

### Εξωτερικές Αναφορές

* [CWE-213: Intentional Information Exposure][1]

[1]: https://cwe.mitre.org/data/definitions/213.html