Informasi ini ditujukan bagi developer dengan aplikasi yang berisi Kerentanan Traversal Lokasi.
Yang terjadi
Mulai tanggal 16 Januari 2018, Google Play memblokir publikasi aplikasi baru atau update yang berisi Kerentanan Path traversal. Lihat pemberitahuan di Konsol Play Anda. Setelah tenggat waktu yang ditampilkan di Konsol Play, aplikasi apa pun dengan kerentanan keamanan yang belum diperbaiki mungkin akan dihapus dari Google Play.
Tindakan yang diperlukan
- Login ke Konsol Play Anda, lalu buka bagian Notifikasi untuk melihat aplikasi yang terpengaruh dan tenggat waktu untuk mengatasi masalah ini.
- Update aplikasi yang terpengaruh dan perbaiki kerentanannya.
- Kirimkan versi terupdate aplikasi yang terpengaruh.
Setelah pengiriman ulang, aplikasi Anda akan ditinjau kembali. Proses ini dapat memerlukan waktu beberapa jam. Jika aplikasi berhasil melewati peninjauan dan dipublikasikan, Anda tidak perlu melakukan tindakan lebih lanjut. Jika aplikasi gagal ditinjau, versi aplikasi baru tidak akan dipublikasikan dan Anda akan menerima pemberitahuan via email.
Detail tambahan
Implementasi openFile pada ContentProviders yang diekspor dapat menimbulkan kerentanan jika parameter Uri yang masuk tidak divalidasi dengan benar. Aplikasi berbahaya dapat membuat Uri buatan (misalnya, Uri yang berisi “/../”) mengelabui aplikasi agar menampilkan ParcelFileDescriptor untuk file di luar direktori yang dimaksud, sehingga memungkinkan aplikasi berbahaya mengakses file apa pun yang dapat diakses aplikasi Anda.
Ada 2 strategi yang direkomendasikan untuk menghilangkan Kerentanan Traversal Lokasi di PenyediaKonten.
1. Jika PenyediaKonten tidak perlu terlihat ke aplikasi lain:
- Anda dapat mengubah tag <provider> ContentProvider yang terpengaruh di Manifes Anda untuk menyetel android:exported=”false”. Tindakan ini akan mencegah aplikasi lain agar tidak mengirimkan Intent ke PenyediaKonten yang terpengaruh.
- Anda juga dapat menyetel atribut android:permission menjadi permission dengan android:protectionLevel=“signature” agar aplikasi yang ditulis oleh developer lain tidak mengirim Intent ke ContentProvider yang terpengaruh.
2. Jika PenyediaKonten harus terlihat ke aplikasi lain:
Anda harus benar-benar memastikan bahwa masukan untuk openFile yang berisi karakter traversal lokasi tidak dapat membuat aplikasi menampilkan file yang tidak terduga. Anda dapat melakukan hal ini dengan memeriksa lokasi kanonis file. Sebagai contoh:
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);
}
Peringatan: Perlu diperhatikan bahwa pemanggilan getLastPathSegment pada parameter Uri bersifat tidak aman. Aplikasi berbahaya dapat membuat lokasi Uri terenkode seperti %2F..%2F..path%2Fto%2Fsecret.txt sehingga hasil getLastPathSegment akan menjadi /../../path/to/secret.txt. Misalnya, penerapan berikut masih rentan terhadap serangan.
public ParcelFileDescriptor openFile(Uri uri, String mode){
File f = new File(DIR, uri.getLastPathSegment());
return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
Kami siap membantu
Jika ada pertanyaan teknis tentang kerentanan, Anda dapat mengirim postingan ke Stack Overflow dan menggunakan tag “android-security”. Untuk penjelasan tentang langkah-langkah yang diperlukan untuk menyelesaikan masalah ini, Anda dapat menghubungi tim dukungan developer.