Skip to content

3- Insecure Data Storage - Part 1

Pasted image 20260825183607

InsecureDataStorage1Activity.java

java
package jakhar.aseem.diva;

import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class InsecureDataStorage1Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_insecure_data_storage1);
    }

    public void saveCredentials(View view) {
        SharedPreferences spref = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor spedit = spref.edit();
        EditText usr = (EditText) findViewById(R.id.ids1Usr);
        EditText pwd = (EditText) findViewById(R.id.ids1Pwd);

        spedit.putString("user", usr.getText().toString());
        spedit.putString("password", pwd.getText().toString());
        spedit.commit();

        Toast.makeText(this,"3rd party credentials saved successfully!", Toast.LENGTH_SHORT).show();
    }
}

Introducimos unas credenciales de prueba para ver como se están guardando

Listamos los paquetes para ver el nombre de diva

bash
adb shell pm list packages | grep diva

Se habrá creado una carpeta llamada shared_prefs

adb shell
su

ls /data/data/jakhar.aseem.diva/shared_prefs/

Y hay un xml con las creds en texto plano

jakhar.aseem.diva_preferences.xml

xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <string name="password">ggttt</string>
    <string name="user">test</string>
</map>

El problema es de nuevo la forma de guardar credenciales (sobretodo si son de terceros como se menciona) Cualquiera con acceso root puede acceder o si la app está en android:allowBackup="true" y leer las creds de terceros en texto plano

Notas personales de seguridad ofensiva.