[RSCH] 7 分鐘閱讀OraCore 編輯部

Android AI Agent 會把主機命令跑出來

研究顯示,五個開源 Android AI agent 框架都能被隱藏文字、截圖競態與廣播注入,進一步讓主機電腦執行命令。

分享 LinkedIn
Android AI Agent 會把主機命令跑出來

五個開源 Android AI agent 框架,都能被隱藏文字和截圖競態誘導,最後在主機電腦上跑出命令。

這篇研究很直接。手機畫面可以騙過模型,模型又把指令送進主機 shell。結果就從「自動操作手機」變成「替攻擊者打字」。

研究團隊測了 5 個框架,7 種攻擊路徑,全部都中至少 6 種。這不是邊角案例。這是 agent 工具鏈本身的信任邊界出問題。

框架主要弱點研究結果
AppAgentShell 命令注入、截圖競態7 種攻擊中命中 6 種
AppAgentXShell 命令注入、截圖競態7 種攻擊中命中 6 種
Mobile-Agent-v3Shell 注入路徑、截圖競態7 種攻擊中命中 6 種
Open-AutoGLM輸入廣播暴露7 種攻擊中命中 6 種
MobA輸入廣播暴露7 種攻擊中命中 6 種

研究到底證明了什麼

訂閱 AI 趨勢週報

每週精選模型發布、工具應用與深度分析,直送信箱。不定期,不騷擾。

不會寄垃圾信,隨時可取消。

論文先放在 arXiv,日期是 7 月 1 日,7 月 14 日又更新了一版。作者來自 Simon Fraser University、Chinese University of Hong Kong、Shandong University,還有 QAX 的 Xingtu Lab。這組人不是在做玩具 demo,而是在拆真實 agent 工具的骨架。

Android AI Agent 會把主機命令跑出來

他們看的是一條很常見的流程。模型先看手機截圖,再決定下一步,最後透過 ADB 或廣播把字打回去。問題就出在這條鏈路太長,每一段都可能被插手。

一旦攻擊者能動到截圖、文字輸入,或兩者之間的時間差,模型就會把惡意內容當成任務內容。這時候,AI 只是轉送器,不是防火牆。

  • 研究測了 5 個開源框架。
  • 總共設計 7 類攻擊路徑。
  • 每個框架都失守至少 6 種。
  • 一個會啟動 calc.exe 的 payload,對 4 個框架做 20 次全中。

最直接的洞,是命令注入

最粗暴的問題在 host shell。研究指出,AppAgent 的控制端把模型輸出直接丟進 subprocess.run(..., shell=True)。如果字串裡有 shell metacharacters,主機就會照單全收。

這種寫法在 demo 場景很常見。大家想先跑起來,再慢慢補安全。但 agent 工具一旦接到真實手機,就不再是 demo。它會碰到外部輸入,也會碰到惡意 app。

研究團隊展示的 payload 很直白。有人可以讓主機跳出計算機,也可以用 test;pwd>rce_success 把工作目錄寫進檔案。這代表攻擊者不只是在亂打字,而是在控制主機端的執行路徑。

“Your LLM is not a security boundary.” — Microsoft

這句話很適合放在這裡。模型可以決定下一步,但邊界還是在 shell、ADB 和 glue code。只要 glue code 寫得隨便,模型就會變成攻擊者的輸入產生器。

截圖競態,讓攻擊者多一個洞

第二個問題是時間差。很多框架先把截圖寫進裝置儲存,再拉回主機。這中間有空窗。研究量到的間隔大約在 50 到 500 毫秒,100 次平均約 210 毫秒。

Android AI Agent 會把主機命令跑出來

210 毫秒看起來很短,但對背景服務來說夠用了。研究者示範,若服務每 5 到 10 毫秒輪詢一次,就有機會先鎖住檔案,再換掉 PNG,最後放回去。對四個框架來說,這種 tampering 成功率是 19/20 或 20/20。

這類攻擊很煩。因為你以為自己讀的是手機原圖,實際上讀到的是被改過的畫面。模型只看像素,不看你的善意。

  • Open-AutoGLMscreencap -p /sdcard/tmp.pngadb pull
  • Mobile-Agent-v3 寫死 /sdcard/screenshot.png,中間還 sleep 0.5 秒。
  • AppAgent 的預設截圖目錄還是 /sdcard
  • MobA 改成用 exec-out 串流,避開了檔案競態。

看不見的字,模型還是會讀

研究接著打 perception 層。團隊把指令藏進 2% opacity 的文字,藏進螢幕圓角和瀏海區域,也用 overlay 假裝系統提示。人眼很難注意到,模型卻照樣吃進去。

這點很刺耳。因為很多人直覺會覺得,肉眼看不到就沒事。可是在 vision model 的世界裡,只要像素存在,文字就存在。它不會因為你覺得太淡就自動忽略。

論文裡,6 個 vision models 都能在至少 18/20 次抓到 2% opacity 文字。包含 GPT-4oClaude Opus 4.5Gemini 在內的 4 個模型,甚至做到 20/20。

  • Pixel 4 的角落可用區域大約只有 78 像素寬。
  • 5 個 agent 都讀到了角落藏字。
  • 100 次測試裡,假登入提示透過 accessibility overlay 全數成功。

這裡的結論很硬。螢幕不是可信來源。只要 app 能蓋上去,或截圖在取樣後被動過手腳,模型就可能跟著假訊息走。

廣播和 accessibility,讓輸入路徑更危險

輸入路徑也有問題,而且常常比畫面更糟。Open-AutoGLM 把輸入做成 base64,送到 ADB_INPUT_B64,再由 ADB Keyboard 收。這是測試工具沒錯,但也等於開了一條可被廣播攔截的通道。

Mobile-Agent-v3 會把 ASCII 走 adb shell input text,非 ASCII 則走 ADB_INPUT_TEXTMobA 更粗暴,只要字串裡有一個非 ASCII,就整包丟廣播。

廣播的麻煩在於,任何註冊同樣 action 的 app 都可能收到。沒有跳窗提醒,也沒有明確警告。如果 accessibility service 介入,研究還指出 TYPE_VIEW_TEXT_CHANGED 會外洩明文,包含密碼。

  • ADB Keyboard 是測試工具,不是攻擊工具。
  • Open-AutoGLM 的廣播路徑可被同 action 的 app 攔到。
  • accessibility 外洩在研究裡影響了 5 個框架。

這對做 agent 工具的人很直接

研究作者說,他們在發表前先私下通知維護者。可是在 5 個 repo 裡,The Hacker News 7 月 17 日檢查時,沒有看到專門的 security policy。這很現實,也很常見。很多開源 agent 專案是先把功能堆上去,再談治理。

問題是,這些工具不是玩具。使用者會照著安裝說明開 USB debugging,會把鍵盤 sidecar 接上去,會信任模型幫他在手機上點來點去。這種信任一旦接到 host shell,就很脆。

研究給的修法其實很務實。移除 shell=True,改用參數陣列,截圖直接串流,不要落地到裝置儲存,廣播加上 signature permission,動作前後比對 foreground app。這些都不是 fancy 技巧,但很有效。

也有些問題沒那麼好修。像硬體圓角、瀏海遮住的角落像素,研究就認為沒有乾淨的軟體解法。這提醒我們,agent 安全不只看模型強不強,還要看每個邊界有沒有守住。

接下來該盯什麼

如果你正在做 Android agent,我會先看三件事。第一,任何會進 shell 的字串都要當成不可信輸入。第二,截圖不要寫到可被別的程序碰到的地方。第三,所有廣播和 accessibility 都要當成攻擊面。

我覺得這篇研究最有價值的地方,不在於它又證明 AI 會出包。大家早就知道模型會出包。真正麻煩的是,這次出包的地方在工具鏈,還會直接碰到主機權限。

接下來幾版 agent 工具,如果還在用拼字串、落地截圖、寬鬆廣播,安全問題只會更早爆出來。對開發者來說,現在就該把這些洞補掉,而不是等別人幫你測。