Ευπάθεια διέλευσης διαδρομής

Αυτές οι πληροφορίες προορίζονται για προγραμματιστές με εφαρμογές που περιέχουν ευπάθειες διέλευσης διαδρομής.

Τι συμβαίνει

Από τις 16 Ιανουαρίου 2018, το Google Play ξεκίνησε να αποκλείει τη δημοσίευση νέων εφαρμογών και ενημερώσεων που περιέχουν την ευπάθεια διέλευσης διαδρομής. Ανατρέξτε στην ειδοποίηση στο Play ConsoleΜετά την πάροδο των προθεσμιών που εμφανίζονται στο Play Console, όλες οι εφαρμογές που περιέχουν ευπάθειες ασφαλείας που δεν έχουν αντιμετωπιστεί, ενδέχεται να καταργηθούν από το Google Play.

Απαιτείται ενέργεια​

  1. Συνδεθείτε στο Play Console και μεταβείτε στην ενότητα Ειδοποιήσεις για να δείτε τις επηρεαζόμενες εφαρμογές και τις προθεσμίες για την επίλυση των σχετικών ζητημάτων.
  2. Ενημερώστε τις επηρεαζόμενες εφαρμογές και διορθώστε την ευπάθεια.
  3. Υποβάλετε τις ενημερωμένες εκδόσεις των επηρεαζόμενων εφαρμογών.

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

Πρόσθετα στοιχεία

Οι υλοποιήσεις ενός στοιχείου openFile στο εξαγόμενο στοιχείο ContentProviders μπορεί να είναι ευπαθείς εάν δεν επικυρώνουν σωστά τις εισερχόμενες παραμέτρους URI. Μια κακόβουλη εφαρμογή μπορεί να παρέχει ένα κατασκευασμένο URI (για παράδειγμα ένα που περιέχει το στοιχείο "/../") για να εξαπατήσει την εφαρμογή σας ώστε να επιστρέψει το στοιχείο ParcelFileDescriptor για ένα αρχείο εκτός του προβλεπόμενου καταλόγου, επιτρέποντας έτσι στην κακόβουλη εφαρμογή να αποκτήσει πρόσβαση σε οποιοδήποτε αρχείο είναι προσβάσιμο στην εφαρμογή σας.

Υπάρχουν δύο προτεινόμενες στρατηγικές για την κατάργηση της ευπάθειας διέλευσης διαδρομής σε έναν ContentProvider.

1. Εάν ο ContentProvider δεν χρειάζεται να εκτεθεί σε άλλες εφαρμογές:

  • Μπορείτε να τροποποιήσετε την ετικέτα <provider> του επηρεαζόμενου στοιχείου ContentProvider στο μανιφέστο σας, για να ρυθμίσετε το android:exported=”false”. Αυτό θα εμποδίσει την αποστολή intent στον επηρεαζόμενο ContentProvider από άλλες εφαρμογές.
  • Μπορείτε, επίσης, να ορίσετε το χαρακτηριστικό android:permission ως permission με το στοιχείο android:protectionLevel=“signature”, για να εμποδίσετε τις εφαρμογές που έχουν δημιουργήσει άλλοι προγραμματιστές να στέλνουν intent στο επηρεαζόμενο στοιχείο ContentProvider. 

2. Εάν ο ContentProvider πρέπει να εκτεθεί σε άλλες εφαρμογές:

Πρέπει να διασφαλίσετε σωστά ότι οι είσοδοι στο openFile που περιέχουν χαρακτήρες διέλευσης διαδρομής δεν μπορούν να προκαλέσουν την επιστροφή μη αναμενόμενων αρχείων από την εφαρμογή σας. Μπορείτε να το κάνετε αυτό ελέγχοντας την κανονική διαδρομή του αρχείου. Για παράδειγμα:

public ParcelFileDescriptor openFile (Uri uri, String mode)
   throws FileNotFoundException {
 File f = new File(DIR, uri.getLastPathSegment());
 if (!f.getCanonicalPath().startsWith(DIR)) {
   throw new IllegalArgumentException();
 }
 return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
 

Προειδοποιήσεις: Λάβετε υπόψη ότι η κλήση του στοιχείου getLastPathSegment στην παράμετρο URI δεν είναι ασφαλής. Μια κακόβουλη εφαρμογή μπορεί να παρέχει μια κωδικοποιημένη διαδρομή URI όπως %2F..%2F..path%2Fto%2Fsecret.txt επομένως το αποτέλεσμα του getLastPathSegment θα είναι /../../path/to/secret.txt. Για παράδειγμα, η ακόλουθη εφαρμογή εξακολουθεί να είναι ευάλωτη σε επίθεση.

public ParcelFileDescriptor openFile(Uri uri, String mode){
 File f = new File(DIR, uri.getLastPathSegment());
 return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
 

Είμαστε εδώ για να σας βοηθήσουμε

Αν έχετε τεχνικές ερωτήσεις σχετικά με τη συγκεκριμένη ευπάθεια, μπορείτε να τις δημοσιεύσετε στον ιστότοπο Stack Overflow με την ετικέτα “android-security”. Για διευκρινίσεις σχετικά με τα βήματα που πρέπει να ακολουθήσετε για την επίλυση του προβλήματος, μπορείτε να επικοινωνήσετε με την ομάδα υποστήριξης προγραμματιστών.

false
Κύριο μενού
12650398650579462725
true
Αναζήτηση στο Κέντρο Βοήθειας
true
true
true
true
true
5016068
false
false