Yol Geçişi Güvenlik Açığı

Bu bilgi, Path Traversal Güvenlik Açığını içeren uygulamaların geliştiricileri için hazırlanmıştır.

Neler oluyor?

Google Play, 16 Ocak 2018'den itibaren Path Traversal Güvenlik Açığını içeren yeni uygulamaların veya güncellemelerin yayınlanmasını engellemeye başlamıştır. Lütfen Play Console hesabınızdaki bildirime bakın. Play Console'unuzda gösterilen son tarihten sonra, düzeltilmemiş güvenlik açıkları içeren tüm uygulamalar Google Play'den kaldırılabilir.

Yapılması gerekenler​

  1. Play Console hesabınızda oturum açıp Uyarılar bölümüne gidin. Burada hangi uygulamaların etkilendiğini ve bu sorunları çözmeniz gereken son tarihleri görebilirsiniz.
  2. Etkilenen uygulamalarınızı güncelleyin ve güvenlik açığını düzeltin.
  3. Etkilenen uygulamalarınızın güncellenmiş sürümlerini gönderin.

Uygulamanız, yeniden göndermenizin ardından tekrar incelenir. Bu işlem birkaç saat sürebilir. Uygulama incelemeden başarıyla geçerek yayınlanırsa başka bir işleme gerek yoktur. Uygulamada inceleme başarısız olursa, yeni uygulama sürümü yayınlanmaz ve bir e-posta bildirimi alırsınız.

Ek ayrıntılar

Dışa aktarılan ContentProvider sınıflarındaki openFile kullanımları, gelen Uri parametrelerini gerektiği şekilde doğrulamadıkları takdirde güvenlik açığı oluşturabilmektedir. Kötü amaçlı bir uygulama, istenen dizinin dışındaki bir dosya için ParcelFileDescriptor döndürecek şekilde uygulamanızı kandırmak amacıyla özel olarak hazırlanmış bir Uri (örneğin, "/../" içeren bir tane) sağlayabilir. Böyle bir durumda kötü amaçlı uygulama, sizin uygulamanızın erişebileceği tüm dosyalara erişebilir.

ContentProvider sınıfındaki Yol Geçiş Güvenlik Açığını ortadan kaldırmak için iki strateji önerilmektedir.

1. Diğer uygulamaların ContentProvider sınıfınıza erişmesi gerekmiyorsa:

  • Manifest'inizde, etkilenen ContentProvider'ın <provider> etiketini android: exported = "false" olarak ayarlayabilirsiniz. Bu ayar, diğer uygulamaların, etkilenen ContentProvider'a Amaç göndermelerini engelleyecektir.
  • Ayrıca android:permission özelliğini android:protectionlevel = “signature” koruma düzeyine sahip bir izin olacak şekilde ayarlayabilirsiniz. Bu şekilde, diğer geliştiriciler tarafından yazılmış uygulamaların, etkilenen ContentProvider'a Amaç göndermesini engellemiş olursunuz. 

2. Diğer uygulamaların ContentProvider'a erişmesi gerekiyorsa:

Yol geçişi karakterlerini içeren openFile girişlerinin, uygulamanızın beklenmedik dosyaları döndürmesine yol açmadığından emin olmanız gerekir. Bunu, dosyanın standart yolunu kontrol ederek yapabilirsiniz. Örneğin:

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);
}
 

Uyarılar: Uri parametresinde getLastPathSegment'in çağırılması güvenli değildir. Kötü amaçlı bir uygulama, %2F..%2F..path%2Fto%2Fsecret.txt şeklinde kodlanmış bir Uri yolunu sağlayabilir. Bu durumda getLastPathSegment'in değeri /../../path/to/secret.txt olacaktır. Örneğin, aşağıdaki uygulamada saldırılara karşı hâlâ güvenlik açığı bulunmaktadır.

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

Yardıma hazırız

Güvenlik açığı hakkında teknik sorularınız varsa sorularınızı Stack Overflow'da yayınlayabilir ve “android-security” etiketini kullanabilirsiniz. Bu sorunu çözmek için uygulamanız gereken adımlarla ilgili bilgi almak isterseniz geliştirici destek ekibimize ulaşabilirsiniz.

Bu size yardımcı oldu mu?

Bunu nasıl iyileştirebiliriz?
false
Ana menü
13433725002084189664
true
Yardım Merkezinde Arayın
true
true
true
true
true
5016068
false
false