Skip to content

6- Insecure Data Storage - Part 4

InsecureDataStorage3Activity.java

Pasted image 20260825203212
java
package jakhar.aseem.diva;

import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import java.io.File;
import java.io.FileWriter;

public class InsecureDataStorage4Activity extends AppCompatActivity {

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

    public void saveCredentials(View view) {
        EditText usr = (EditText) findViewById(R.id.ids4Usr);
        EditText pwd = (EditText) findViewById(R.id.ids4Pwd);

        File sdir = Environment.getExternalStorageDirectory();

        try {
            File uinfo = new File(sdir.getAbsolutePath() + "/.uinfo.txt");
            uinfo.setReadable(true);
            uinfo.setWritable(true);
            FileWriter fw = new FileWriter(uinfo);
            fw.write(usr.getText().toString() + ":" + pwd.getText().toString() + "\n");
            fw.close();
            Toast.makeText(this, "3rd party credentials saved successfully!", Toast.LENGTH_SHORT).show();
            // Now you can read the temporary file where ever the credentials are required.
        }
        catch (Exception e) {
            Toast.makeText(this, "File error occurred", Toast.LENGTH_SHORT).show();
            Log.d("Diva", "File error: " + e.getMessage());
        }

Esto es mucho peor, aquí se está guardando en el almacenamiento externo compartido

java
Environment.getExternalStorageDirectory()

La cosa es que para comprobarlo tenemos que dar acceso al almacenamiento externo

Pasted image 20260825211537Pasted image 20260825211622

Ahora ya se guardan

Pasted image 20260825211744

Aquí el problema es hasta peor, no se guarda en el sandbox compartido de la app, se guarda en el almacenamiento externo, cualquier App con acceso al almacenamiento externo puede leer las credenciales.

Además está

java
uinfo.setReadable(true);
uinfo.setWritable(true);

Lo que lo hace legible / escribible por cualquier App sin necesitar root ni debug.

Notas personales de seguridad ofensiva.