SlowMist:Udesk 惡意 JS 偷取資料並更改轉帳地址

iconMetaEra
分享
AI summary icon精華摘要
SlowMist 發現 Udesk 系統中存在惡意 JS 腳本,與 mgbx.com 和 bitxex.io 等受攻擊平台的鏈上新聞相關。該腳本通過 udeskApi.2026-10-16.cached.js 和 deeps.js 載入,竊取會話資料並更改充值地址。攻擊者使用遠端載入器注入代碼,有資金被盜風險。通脹數據與市場波幅可能加劇受影響用戶的損失。此漏洞凸顯了多個交易所面臨的緊迫安全問題。
一次腳本投毒,如何同時瞄準用戶數據與轉賬資金?

文章作者、來源:慢霧科技

背景

近日,慢霧安全人員在日常威脅情報挖掘中,監測到一起涉及 Udesk 客服系統相關腳本遭投毒的攻擊活動。團隊隨後獲取了 udeskApi.2026-10-16.cached.js 和 deeps.js 兩份 JavaScript 樣本,並展開分析,追查惡意代碼如何借助客服腳本進入頁面,以及它對用戶數據和業務操作做了什麼。

對樣本的檢查逐步揭示了兩類風險:惡意腳本一邊採集網頁中的會話數據和用戶提交的敏感信息,一邊按站點規則修改充值地址和複製內容。前者可能使攻擊者冒用登錄會話或接管賬號,後者則可能讓用戶將充值資金轉入被替換的收款地址。我們從客服腳本的加載入口展開,沿著數據讀取、網絡發送和頁面修改邏輯,還原這兩類行為的實現方式與觸發條件。

MistEye 响應

MistEye 是由 SlowMist 自主研發的 Web3 威脅情報與動態安全監控系統,整合了安全監控與情報聚合能力,為用戶提供實時的風險預警與資產守護。

MistEye 已透過情報推送與客戶警報通道即時同步風險。

惡意載入器與遠端載荷載入機制

打開 udeskApi.2026-10-16.cached.js 後,可以看到客服按鈕、聊天 iframe、訪客追蹤和訊息通信等功能代碼。繼續檢查文件尾部,主幹結束後還有一個獨立函數:它通過 _ud() 解碼兩個字串,建立元素並插入當前文檔的 head。

This section does not explicitly state the tag name or remote URL. If only searching for plain-text domain names, the entry point may easily be missed. By examining the implementation of _ud(), we found that it retrieves two hexadecimal characters at a time and converts them into characters; after expanding the constants, the loading target becomes clear.

736372697074 解碼為 script,另一處常量解碼為 https[:]//udeskqlobal[.]com/deeps.js。域名中的 qlobal 以字母 q 開頭,檢索時應保留這一拼寫。加載器將腳本設為異步,再插入頁面;執行到該位置且瀏覽器策略和網絡允許時,遠端代碼便可進入當前文檔。

該 URL 對應的載荷為 deeps.js。調查重點已從客服 SDK 轉向載荷本身。第三方經典腳本在嵌入文檔的上下文中執行,其能接觸的資料取決於實際運行的頁面或 iframe。客服聊天視窗使用 iframe,並不會自動隔離宿主頁面中加載的腳本。

網頁數據採集機制與影響範圍

deeps.js 開始時先讀取 window.location.hostname,並根據三個站點規則生成配置 C。要判斷哪些頁面會被採集,僅靠這組配置仍不夠:它限制的是整個腳本,還是其中某個模組,需要繼續追蹤退出判斷的位置。

沿控制流向下檢查,我們看到 Cookie 和網頁存儲讀取、啟動快照發送,以及表單和認證請求鉤子都出現在 if (!C) return; 之前。下面按原始碼順序摘取快照發送語句和末尾 XHR 鉤子;註釋標出了中間省略的代碼,對應格式化視圖 D:L100、D:L151–L166。

退出判斷的位置已明確影響範圍:即使 hostname 沒有命中三個站點規則,腳本仍會先進入資料採集路徑並安裝鉤子,隨後才退出地址模組。排查暴露頁面時,不能僅圍繞這三個站點配置進行查找。

啟動時,載荷讀取當前網頁可訪問的 Cookie、localStorage 和 sessionStorage。這些位置可用於儲存登入狀態、使用者資料和業務資料;若其中包含仍有效且可重用的登入令牌,攻擊者取得後可能冒用使用者會話。腳本還附帶頂層頁面 URL 和當前文件的 origin,使這些資料與來源頁面一併提交。

採集過程逐項容錯。當跨源讀取頂層 URL 失敗時,腳本會用 x 代替並繼續處理其他欄位;兩類網頁存儲被序列化為 JSON。Cookie 的範圍則以 document.cookie 可讀取內容為限,HttpOnly Cookie 不包含在內。

腳本也為後續提交的數據保留了入口。當用戶提交表單時,它會遍歷 input、select 和 textarea,複製非空內容,然後繼續原始的提交過程。帳號、密碼、驗證碼等頁面實際填寫的欄位都可能進入額外的數據發送路徑,洩露後可能被用於登入帳戶或接管帳號。

此路徑透過包裝 HTMLFormElement.prototype.submit 及監聽捕獲階段的 submit 事件實現。對於直接透過介面提交資料的頁面,腳本還包裝了 fetch 和 XHR:當請求帶有主體、URL 包含 login|signin|auth|register|signup|password 等關鍵字時,複製對應內容並保留原始請求呼叫。fetch 分支另要求 URL 為字串,主體來自請求選項;當 FormData 等物件直接進行 JSON 序列化時,採集的內容可能缺少實際欄位。

數據外傳機制與備用通道

上述採集入口最終調用同一個 _send()。繼續追蹤這個函數,可見固定接收端 https[:]//udeskqlobal[.]com/c.php。啟動快照使用 s、o、c、l、ss 字段分別承載頁面地址、當前源、可讀 Cookie 和兩類網頁存儲;後續表單及認證請求則在各自觸發時發送。

函數將 URL 問號後的參數拆出,放入非同步 POST 正文,設定 Content-Type: application/x-www-form-urlencoded。以下完整保留發送函數(D:L45–L60):

發送路徑還包含圖片請求備用:當 XHR 錯誤或發送過程中發生同步異常時,腳本會建立 Image 對象,將帶參數的 URL 賦值給 src,嘗試通過 GET 再次攜帶數據。URL 會被截斷為前 8,000 個 JavaScript 字符,較長內容可能不完整。

在理解此路徑時,需區分「請求發送」與「響應讀取」。腳本不會讀取 c.php 的響應;符合簡單請求條件的跨源 POST 可先發出,再由瀏覽器限制響應讀取,因此 CORS 錯誤可能與請求發送同時發生。排查記錄應同時檢查 POST 正文和圖片 GET 參數,出口策略則分別核對 connect-src 與 img-src。若普通表單引發文檔導航,也會影響非同步請求能否完成。

至此,網頁會話數據和後續提交內容的去向已經清楚。但載荷在網站退出判斷之後還保留了另一組操作:識別地址格式、修改頁面文字,以及接管複製路徑。這些代碼將調查進一步引向充值業務。

充值地址替換與剪貼板劫持機制

通過 if (!C) return; 後,腳本進入地址模組。開頭的三個 hostname 規則此時有了明確用途:匹配 mgbx[.]com、bikingex[.] 和 bitxex[.]io,為不同頁面選擇地址和複製按鈕的元素選擇器。

這些正則表達式沒有首尾錨點,匹配範圍比精確域名比較更廣。頁面規則還會檢查完整的 location.href,查詢參數或片段中的 deposit、recharge、assets 等關鍵詞也會參與判斷。當頁面、元素和地址格式匹配後,腳本每 200 毫秒掃描一次,將識別出的充幣地址改為配置值。若用戶使用被替換的地址完成有效轉賬,收款目標就會變為該地址。

三個站點分支共用六個配置值,代碼標記為 BTC、EVM、TRON、Solana、LTC 和 DOGE。地址識別僅依據字元形態和匹配順序,不核對用戶選擇的網絡或地址校驗碼,也可能誤識別普通業務標識符。

繼續檢查複製相關代碼,能夠看到樣本同時干預頁面顯示與剪貼板內容。這樣,用戶即使把頁面地址與複製結果相互比較,也可能得到一致的篡改值。三條路徑分別是:

  • 封裝剪貼板 API。navigator.clipboard.writeText 先調用 R() 替換參數,再交由原方法處理。此路徑僅受 hostname 配置限制,不再檢查充值頁面條件,亦不依賴 DOM 掃描已命中元素。
  • 替換複製按鈕。腳本克隆匹配的按鈕,安裝新的 click 監聽器,並替換原節點。新增監聽器阻止預設動作和事件傳播,嘗試複製共享變數 _cur 中儲存的地址。
  • 攔截 copy 事件。當 _cur 非空且頁面規則成立時,document 上的監聽器會將複製內容改為 _cur,不檢查用戶選中的文字是否為地址。

其中,剪貼板 API 封裝與 copy 監聽器在原始碼中相鄰(D:L260–L275),但觸發條件不同:

_cur 保存最後一次實際替換的地址。當同一畫面有多個地址時,後一次替換會覆蓋前一次記錄,多個按鈕可能複製相同的值。若頁面初始已顯示配置地址,掃描不會因此初始化 _cur,新增的按鈕監聽器也不會寫入內容;克隆保留的 HTML 內聯事件屬性仍可參與事件處理。

分析中還遇到一處影響行為判斷的實現缺陷:腳本試圖從 Element.prototype 讀取 textContent 的自有屬性描述符,而標準屬性定義在 Node.prototype。在標準原型關係下,隨後訪問 .set 會拋出異常。這一分支失敗後,catch 會吞掉異常;繼續核對其前後的代碼可見,輪詢已經登記,後續複製鉤子仍會按各自條件安裝。單個分支的錯誤沒有終止地址劫持模塊。

總結

在追蹤客服腳本尾部的載入器後,我們明確了樣本的攻擊目標:蒐集可用於盜用會話或登入帳戶的資料,同時將充值頁面及複製操作中的收款地址改為配置值。前者不受三個站點配置限制,後者則依站點和具體複製路徑啟用,排查時需覆蓋不同的暴露情境。

仍加載相關腳本的業務應停止繼續分發,處置暴露的憑證,並透過可信後台和交易記錄核查充值目標。

建議

  1. 保護並停止分發受污染的資源。若生產環境仍加載相關腳本,請在保存實際響應、請求鏈、快取資訊和採集時間後盡快阻斷;從獨立核驗的可信版本恢復,並檢查站點託管、CDN、構建及標籤管理配置。
  2. 檢索加載與外傳記錄。聯合查詢惡意網域、兩個路徑和檔案雜湊;外傳記錄同時檢查 POST 正文與 GET 參數。排查壓縮腳本時也檢索加載器中的十六進位 URL,避免僅查明文導致漏檢。
  3. 結束受污染的文件並處置已暴露的憑證。完整關閉相關頁面或 WebView 文件,避免重新載入舊資源。根據實際暴露範圍,從乾淨環境中撤銷會話、輪換令牌和密碼;移除 script 標籤不會撤銷已經安裝的鉤子和定時器。
  4. 獨立核對充值地址和交易。對於執行載荷的頁面,請透過可信渠道核對原始充值地址、相關交易與實際轉賬目標,並根據交易記錄評估影響。
  5. 驗證腳本與數據出口限制。結合業務設置腳本來源和完整性控制,分別驗證 connect-src、img-src 等策略,針對 udeskqlobal[.]com 限制腳本加載與數據外傳。

IOC

Domain name

udeskqlobal[.]com

URL

https[:]//udeskqlobal[.]com/deeps[.]js

https[:]//udeskqlobal[.]com/c[.]php

錢包地址

BTC:bc1qhzppfj69ywp22swj50jwcfxdamg3ym245srng9

EVM:0x9B6EcD0023a28E1391c5124eCe578A9751A337b2

TRON: TH4L5YAhhxtC8qALbZKbPZZgausbGi25nF

Solana: AFmCUe3nNbjTaC585CcdA3vvC9iWVR8YunooFKpaQx2Z

LTC:ltc1qwz0zp39ywl34kahvn9lyk7j5x63wsy9tcxhm3w

DOGE: DAoy2w8uvFtZ92q87s9qKEoHbWgV7mVThj

惡意檔案

filename: udeskApi.2026-10-16.cached.js

SHA256: 45b4e8f160d8d5177819f6c1dc67acc7abbdc65eeaffc909e668799dc778bcf6

檔案名:deeps.js

SHA256: 57c1441c4f5bb3260981a2df64f9ff35f117abde0d8667c8c66a047880074c59

關於 MistEye

MistEye 是由 SlowMist 自主研發的 Web3 威脅情報與動態安全監控平台,透過 API 提供開源包生態的惡意活動檢測與供應鏈風險預警能力。

All malicious packages and IOCs involved in this campaign have been integrated into the MistEye threat detection engine. Developers can use the API to automate detection of project dependencies, quickly determine whether known malicious packages have been triggered, and receive remediation recommendations.

免責聲明:本頁面資訊可能來自第三方,不一定反映KuCoin的觀點或意見。本內容僅供一般參考之用,不構成任何形式的陳述或保證,也不應被解釋為財務或投資建議。 KuCoin 對任何錯誤或遺漏,或因使用該資訊而導致的任何結果不承擔任何責任。 虛擬資產投資可能存在風險。請您根據自身的財務狀況仔細評估產品的風險以及您的風險承受能力。如需了解更多信息,請參閱我們的使用條款和風險披露 。