← 返回 Siami 首頁

AliExpress 首頁悄悄開 WebAudio:指紋追蹤還會卡住你的藍牙耳機

▲ 910 💬 295
AliExpress 首頁悄悄開 WebAudio:指紋追蹤還會卡住你的藍牙耳機

編按:本文綜合整理自 laserphile 部落格原文(m-c-tech)、Firefox 工程師 Tom Ritter 的技術回應、Hacker News 討論串(910 分、295 則留言),並加入 Siami 編輯部觀點與分析。

一位 Blogger 工程師 m-c-tech 近日發現,只要在 Firefox 或 Chrome 開啟 AliExpress(阿里巴巴旗下跨境電商)首頁,瀏覽器就會在背景偷偷啟動兩個 WebAudio 圖(Audio Graph),用零音量卻仍在運作的方式,產生可供指紋追蹤(fingerprinting)的訊號——而這個訊號強到可以讓 Windows 的藍牙音訊路由「卡住」,直接干擾支援 multipoint 多點連線的耳機。

這則調查在 Hacker News 上線 24 小時衝到 910 分、295 則留言,連 Firefox 核心工程師 Tom Ritter 都親自下場回應,是近期瀏覽器隱私與指紋追蹤領域最熱門的實戰案例之一。

從一個奇怪 bug 開始追

m-c-tech 擁有一副支援 multipoint 藍牙音訊的耳機,可以同時連 PC 與手機。原本的行為是:PC 沒在播音樂時,耳機會自動切回手機當音源;PC 一播 YouTube 或通知音效,又會切回 PC。

但他最近觀察到,只要 Firefox 或 Chrome 開著 AliExpress 首頁,這個自動切換就壞了——手機的音樂完全沒聲音,即使電腦上沒有任何媒體正在播放。

「我通常用手機聽音樂,PC 端跑通知跟 YouTube,過去切換都很順,直到我某天打開 AliExpress 首頁——手機音訊就再也回不來了。關掉分頁,馬上恢復。」—— m-c-tech

第一輪排查很直觀:是不是有隱藏的影片或音樂在自動播放?他用 DevTools 檢查 <audio>、<video> 元素、HTMLMediaElement.play() 呼叫、MediaSession 狀態——全部都是空的。分頁靜音、整個瀏覽器靜音、Windows 系統層靜音,三層都壓不下來。

把 AudioContext 包起來才看見真相

他換了一條路:用 JavaScript 攔截 AudioContext 建構子與 AudioNode.prototype.connect(),把每一個音訊節點的建立與連線都記錄下來。

const OriginalAudioContext = window.AudioContext;

window.AudioContext = class extends OriginalAudioContext {
    constructor(...args) {
        super(...args);
        console.log("AudioContext created", {
            state: this.state,
            stack: new Error().stack
        });
    }
};

結果發現,AliExpress 首頁在沒人點任何東西的情況下,建立了兩個 AudioContext 物件,都進入 running 狀態,並且都串接到了 AudioContext.destination——也就是系統音訊輸出的根節點。

建構時的 stack trace 指向兩個極度混淆(obfuscated)的 Alibaba 自有腳本:

  • https://assets.aliexpress-media.com/g/AWSC/uab/1.140.0/collina.js
  • https://assets.aliexpress-media.com/g/AWSC/fireyejs/1.231.67/fireyejs.js

兩個檔案都放在 /AWSC/ 這個資料夾底下,從命名與行為推測,屬於阿里巴巴內部的「Anti-Abuse Web Security Client」(反濫用網頁安全客戶端)元件。


音訊圖長這樣:鋸齒波 → 分析 → 零增益

兩個 script 各自建構了幾乎相同的 WebAudio 圖:

鋸齒波振盪器(Sawtooth Oscillator)
→ AnalyserNode
→ ScriptProcessorNode
→ 增益為零的 GainNode
→ AudioContext.destination

振盪器產生已知波形,AnalyserNode 量測瀏覽器音訊實作處理後的結果,script 從中讀取頻率資料。增益歸零,使用者聽不到聲音——但這個圖仍然真實地接到系統音訊出口,瀏覽器會持續主動處理它。

關鍵差異在於:這不是一個 <audio> 元素,沒有任何「媒體播放」標記可供瀏覽器的分頁靜音機制攔截。對作業系統與藍牙驅動程式來說,這就是一個「active audio processing graph」——足以讓 Windows 認為 PC 端正在佔用音訊路由。

這也解釋了為什麼 multipoint 耳機一直不放手機音樂:PC 端的音訊路徑被一個零聲音的指紋腳本佔住了。


這不是單純音訊指紋,是整套瀏覽器指紋

m-c-tech 進一步拆解兩個 bundle 後發現,WebAudio 只是冰山一角。這兩個 script 還會查詢或量測:

  • Canvas 渲染與 toDataURL() 結果
  • WebGL renderer 資訊、擴充功能、shader precision
  • 螢幕與 viewport 尺寸、device pixel ratio
  • 硬體並行數(hardware concurrency)、device memory
  • 已安裝的瀏覽器外掛、支援的音訊/視訊格式
  • WebRTC 行為
  • 瀏覽器效能時序(performance timing)
  • 滑鼠、觸控、焦點、捲動事件
  • 裝置動作感測(device motion / orientation)
  • 常被自動化框架改動的屬性

加上序列化、加密、發送到 Alibaba telemetry endpoint 的程式碼,這構成了一套相當完整的瀏覽器與裝置指紋。

Audio fingerprinting 之所以有效,是因為不同瀏覽器版本、作業系統、音訊函式庫、硬體在處理同一個訊號時會產生細微差異。單獨看 WebAudio 不一定能唯一識別一台裝置,但跟 canvas、WebGL、硬體、時序、互動資料組合起來,識別力就高很多。

m-c-tech 同時引用了 Firefox 工程師 Tom Ritter 的獨立驗證文章 WebAudio fingerprinting on Alibaba,指出他用 Claude 把 Alibaba 的 WebAudio 邏輯抽成獨立頁面重現,計算出的 fingerprint 值是 sha256:9a388c0dd04cfdc54314f9d961c7e2d247b972067e28d1cea76bd6060cf1392e,另一個內部調查看到的是 sha256:16d3191880ce01f726015ec6a1f9a072a81ebd04bf489098d4685d1d1c0b2711。


為什麼 AliExpress 要做這件事

從電商角度,這套機制的商業邏輯其實不難理解:

  • 反詐欺:帳號盜用、假帳號、自動化搶購、付款詐欺、評價造假、新客優惠券濫用——都需要把「真人瀏覽器」跟「自動化腳本」區分開。
  • 行為追蹤:跟多數大型平台一樣,把使用者瀏覽行為彙整進行銷資料庫。
  • 降低 CAPTCHA 摩擦:對信任分數高的裝置,可以少跳 CAPTCHA,提升轉換率。

Cookie 不夠可靠,因為使用者會清、會複製、會被置換。指紋是用很多獨立測量值組成的偽身分,更難一致性地偽造。

從 AliExpress 的立場,這是合理的 anti-fraud 投資。但 m-c-tech 與社群的反彈來自兩件事:

  1. 這發生在首頁、發生在你做任何敏感操作之前——多數人連商品頁都還沒打開,就已經被量測了。
  2. 沒有任何可見的 UI 提示:使用者完全無法知道首頁正在跑一個零聲音的音訊處理圖。

「一個隱藏的分析或安全功能可以強到改變外部硬體的行為,這件事本身就是個警訊。封鎖它看起來是合理的權衡。」—— m-c-tech


用兩行 uBlock 規則就能擋下

m-c-tech 在 Firefox + uBlock Origin(Raymond Hill 官方版)驗證,只要擋掉兩個 script 家族,AliExpress 首頁照常運作、零 AudioContext、零 destination 連線。

! AliExpress AWSC fingerprinting scripts
||assets.aliexpress-media.com/g/AWSC/uab/*/collina.js$script,domain=aliexpress.com
||assets.aliexpress-media.com/g/AWSC/fireyejs/*/fireyejs.js$script,domain=aliexpress.com

操作步驟:

  1. 打開 uBlock Origin 儀表板 → 「我的過濾規則」(My filters)
  2. 貼上以上兩行
  3. 點「套用」
  4. 關掉所有現有的 AliExpress 分頁——舊分頁已建立的 AudioContext 不會因為你事後擋 script 而被關閉
  5. 重新打開 AliExpress

⚠️ 這兩條規則刻意寫得很窄:只擋被觀察到的兩個 script 家族,且只在 aliexpress.com 網域生效。如果未來 Alibaba 換檔名或路徑,規則會失效,到時候再更新。

副作用:因為這兩個 script 與 anti-fraud 系統有關,封鎖後登入或結帳時可能會跳出更多 CAPTCHA。日常瀏覽目前不受影響;遇到正常操作被擋時再暫時關閉規則。


🚨 為什麼這件事重要(Siami 觀點)

這不是單一公司的單一 bug,而是一個系統性趨勢的具體案例:瀏覽器 fingerprinting 從「被動的環境偵測」演進到「主動運算以取得更穩定的訊號」。WebAudio 指紋並不是新東西——2017 年的 Princeton 學術研究就把它列為主要追蹤向量之一——但它在 2026 年仍被阿里巴巴大規模部署在電商首頁,背後反映的是三件事:

第一,指紋追蹤在主流瀏覽器上的防禦沒有想像中完整。 Tom Ritter 自己證實 Firefox 118 之後 WebAudio 結果被刻意常數化、99.24% 的使用者只會落到三個值(x86、x64+FMA、ARM/NEON),但 CPU 架構仍會洩漏。Chrome / Brave / Safari 各自有部分緩解,但產業整體沒有共識。如果一個主流電商仍能穩定蒐集到「至少三個 bucket」的 CPU 資訊,那就是可用的追蹤 token。

第二,「零音量但仍在處理」這個模式繞過了所有以「媒體播放」為前提的隱私保護機制。 分頁靜音、瀏覽器靜音、系統靜音——全部失效。對 multipoint 藍牙耳機使用者,硬體端被卡住的副作用才讓這個現象被注意到;對一般耳機使用者,這個 fingerprint 早就被默默蒐集了,只是沒人發現。

第三,這是 Web 平台「Anti-Abuse SDK」這個灰色地帶的縮影。 Cloudflare、Akamai、FingerprintJS、阿里 AWSC——這些工具介於「資安」與「追蹤」之間,缺乏統一揭露標準,使用者完全無法事前知道某個網站正在用哪一套、量測什麼、保留多久。GDPR 與 CCPA 要求「知情同意」,但實務上,這些 SDK 沒有任何視覺提示,也沒有退出機制,只能靠封鎖 script 事後處理。

對一般使用者:裝 uBlock Origin,把上面兩條規則加進去。對資安 / 隱私團隊:這是 audit 自家網站是否使用類似 SDK 的好時機。對 Web 標準組織:該討論是否應該要求 Web Audio API 在 destination 被連接時,必須有 UI 層級的指示(例如分頁圖示、favicon 變化)。


數據解讀與質疑

910 分、295 則留言並不代表「所有人都會遇到音訊卡頓」。 多數留言者(如 yetanotherdev42)確認 DevTools 看得到 CPU 持續被吃,但只有「使用 multipoint 藍牙耳機 + 預期 PC 沒在播音樂」的少數情境會觸發明顯的音訊路由問題。對大多數裝置,這套 fingerprint 仍會被默默蒐集,只是副作用不明顯。

「這是 fingerprinting」的證據是充分的,「這是用於跨站追蹤」的證據則是缺乏的。 m-c-tech 自己明確承認看不到 server-side 行為——可能只用作 fraud score 的其中一個輸入,也可能真的用作 persistent identifier。Tom Ritter 的獨立驗證只證明「WebAudio fingerprinting 邏輯存在」,沒證明「Alibaba 用它跨站追蹤使用者」。在沒有內部資料前,這條推論鏈必須標清楚:技術上是 fingerprinting,用途上是「可能」用於跨站追蹤,也「可能」只是 anti-fraud。

uBlock 規則不是永久解方。 Alibaba 一旦換檔名或路徑就會失效。社群維護的過濾規則列表通常會延遲數小時到數天才跟上。對自動化掃描(例如企業資安 SOC)來說,建議在 DNS 層或 proxy 層直接擋 assets.aliexpress-media.com/g/AWSC/ 整個目錄,比依賴使用者端的 uBlock 更穩。

Tom Ritter 的「99.24% 三個 bucket」是 Firefox 的結果。 Chrome / Safari / Brave 不一定同樣常數化;對這些瀏覽器,WebAudio fingerprinting 的識別力可能仍然偏高。對中國常見的 360 瀏覽器、QQ 瀏覽器、UC 瀏覽器,這些優化更是完全沒有保證。

完整技術分析請見 laserphile 部落格原文、Tom Ritter 的 Firefox 視角分析,以及 Hacker News 討論串。Mozilla 內部 telemetry 細節與 fingerprint 常數化策略在 Firefox 118 之後的 release notes 中可查到。

網友熱門留言 (5)

#1 tomrittervg (Firefox 工程師) ▲ 487
我在 Mozilla 處理 WebAudio 指紋防護已經三年。Firefox 118 之後我們刻意把 WebAudio 結果常數化,實測 99.24% 的使用者只會落到三個值(x86、x64+FMA、ARM/NEON),剩下的 0.76% 是資料蒐集失敗。換句話說,這條追蹤向量在現代瀏覽器上幾乎被廢掉,但 CPU 架構仍然會洩漏。
#2 throwaway1234abcd ▲ 312
最有意思的是『零音量但還在處理音訊』這點——瀏覽器分頁靜音根本壓不下來,因為 OS 看到的是『active audio processing graph』而不是『媒體播放』。對 multipoint 藍牙耳機的使用者來說,這直接踩到 PC 端的音訊路由。
#3 plindberg ▲ 198
也許這是某種竊聽嘗試?不是字面意義上的監聽,而是想從波形處理過程的微小偏差推測裝置狀態?最壞情況是能旁敲側擊 CPU 負載或同時執行的其他音訊工作。
#4 yetanotherdev42 ▲ 156
我在 Brave 開了 AliExpress 用 DevTools 看,main thread 上 CPU 確實會被這兩個 AWSC script 各佔 5-8% 持續跑。光從資源耗用角度,這件事就值得報。
#5 koyu_chrome_user ▲ 92
我已經把 uBlock Origin 的兩條規則加進來了,順便加了 `||assets.aliexpress-media.com/g/AWSC/*$script,domain=aliexpress.com` 一併防未來變形。要追蹤先過濾器這關再說。