WIKI

7.11 Intent不安全反射风险检测

(1)描述

通过Intent接收的Extra参数来构造反射对象会导致从不受信任的源加载类。攻击者可以通过巧妙地构造达到加载其它类的目的。

(2)风险等级

低危

(3)影响范围

所有。

(4)检测方法

Step1:检测出导出的组件

Step2:在导出的组件下,检测两个关键函数,分别是:getIntent()Class.forName(“....”)

public class SecondActivity extends Activity {

 

        @Override

        protected void onCreate(Bundle savedInstanceState) {

                super.onCreate(savedInstanceState);

                setContentView(R.layout.activity_second);

               

                Intent intent = getIntent();

                String className = intent.getStringExtra("className");

                String methodName = intent.getStringExtra("methodName");

               

                try {

                        Class<?> clz = null;

                        clz = Class.forName(className);

                       

                        Date object = (Date) clz.newInstance();

                        Method method = clz.getMethod(methodName);

                       

                        Toast.makeText(getApplicationContext(), method.invoke(object, null) + "======", Toast.LENGTH_LONG).show();

                       

                } catch (Exception e) {

                        e.printStackTrace();

                }

               

        }

 

}

逆向后对应的smali代码如下:

......

invoke-virtual {p0}, Lcom/bug/intent/reflection/SecondActivity;->getIntent()Landroid/content/Intent;

......

invoke-static {v0}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;

......

(5)修复建议

ü  不要通过Intent接收的Extra传播的反射函数

ü  将接受反射的组件设置为非导出组件