AliExpress-webpagina houdt multipoint Bluetooth-koptelefoons actief via WebAudio-fingerprinting
Meestal luister ik naar muziek op mijn telefoon, maar met meldingen of YouTube die via de pc lopen, werkt dit betrouwbaar tot ik een AliExpress-pagina open in Firefox of Chrome (andere browsers zijn niet getest).
Kort na het laden van de AliExpress-homepagina stopte de audio van mijn telefoon met spelen. Het sluiten van het AliExpress-tabblad lost dit onmiddellijk op. Het dempen van het tabblad, Firefox of Windows helpt niet, en er is geen zichtbare video, muziek of andere media die op de pagina wordt afgespeeld.
Dit leek verdacht genoeg om te onderzoeken.
Op zoek naar verborgen media
Mijn eerste gedachte was een automatisch afspelende productvideo of advertentie, dus ik controleerde de gebruikelijke verdachten:
<audio>en<video>elementen- aanroepen naar
HTMLMediaElement.play() - actieve Media Session-metadata
- mediagegevens (media requests)
- ingesloten frames die media bevatten
Geen van deze zaken leverde iets nuttigs op. Er waren geen audio- of video-elementen, geen media-playback-aanroepen, en navigator.mediaSession.playbackState bleef op none staan.
Een aanwijzing was dat het probleem niet onmiddellijk begon. Het trad op nadat de pagina enkele seconden inactief was geweest. Ik instrumenteerde de pagina voordat ik deze lade en hield de Web Audio API in de gaten in plaats van alleen te zoeken naar conventionele media-elementen.
Het basisidee was om de AudioContext-constructor te wrappen en vast te leggen wanneer een pagina een audio-verwerkingscontext aanmaakte:
const OriginalAudioContext = window.AudioContext;
window.AudioContext = class extends OriginalAudioContext {
constructor(...args) {
super(...args);
console.log("AudioContext created", {
state: this.state,
stack: new Error().stack
});
}
};
Ik wrapte ook AudioNode.prototype.connect() zodat ik kon zien of er iets was verbonden met de audio-bestemming van de context.
Dat leidde uiteindelijk tot de ontdekking: twee verborgen audio-contexten!
Tijdens een capture van de inactieve AliExpress-homepagina maakte de pagina twee AudioContext-objecten aan. Beiden gingen naar de status running en beiden verbonden nodes met AudioContext.destination.
Tegelijkertijd waren er nog steeds:
- nul
<audio>of<video>elementen - nul media
play()aanroepen - geen actieve Media Session
- geen hoorbaar geluid
De stack traces van de constructor wezen naar twee scripts:
https://assets.aliexpress-media.com/g/AWSC/uab/1.140.0/collina.jshttps://assets.aliexpress-media.com/g/AWSC/fireyejs/1.231.67/fireyejs.js
De eerste context werd gemaakt door collina.js, terwijl de tweede afkomstig was van fireyejs.js. Beiden bevinden zich onder een AWSC-directory en lijken deel uit te maken van de browserbeveiliging en anti-misbruiktooling van Alibaba.
De scripts zijn extreem geobfusceerd, maar er zijn genoeg namen en operaties overgebleven voor AI om uit te werken wat de audiocode doet.
Wat de audiocode doet
Beide scripts bouwen een WebAudio-graaf die er als volgt uitziet:
Sawtooth oscillator → AnalyserNode → ScriptProcessorNode → GainNode (ingesteld op nul) → AudioContext.destination
De oscillator genereert een bekende golfvorm. De analyser meet het resultaat nadat het door de audio-implementatie van de browser is gegaan, en het script leest frequentiegegevens uit.
De gain is ingesteld op nul, dus de gebruiker zou niets moeten horen. De graaf is echter nog steeds verbonden met de audio-bestemming van het systeem. Door deze met de bestemming te verbinden, wordt de browser gedwongen de graaf actief te verwerken, zelfs als het uiteindelijke volume nul is.
Dit is zeer verschillend van een automatisch afspelende video. Er is geen media-element dat de normale dempfunctie van het tabblad in de browser kan stoppen. Voor zover de pagina het betreft, voert hij live audioverwerking uit.
In mijn geval bleek dit voldoende voor Firefox of Windows om het Bluetooth-audiopad actief te houden, waardoor mijn multipoint-koptelefoon niet correct kon terugschakelen naar de telefoon.
Dit lijkt op fingerprinting
De WebAudio-test is niet de enige meting in deze scripts. Inspectie van de bundles bracht code aan het licht die het volgende opvraagt of meet:
- Canvas-rendering en
toDataURL() - WebGL-rendererinformatie, extensies en shader-precisie
- Audio-oscillator en analyser-output
- Scherm- en viewportafmetingen
- Device pixel ratio
- Hardware-concurrency en geheugen van het apparaat
- Geïnstalleerde browserplugins
- Ondersteunde audio- en videoformaten
- WebRTC-gedrag
- Browser performance timing
- Muis-, touch-, focus- en scrolevenementen
- Beweging en oriëntatie van het apparaat
- Eigenschappen die gewoonlijk geassocieerd worden met browserautomatisering
Er is ook code voor het serialiseren en versleutelen van resultaten, het maken van verzoeken naar Alibaba-telemetriediensten en het verzenden van gegevens met fetch() of sendBeacon().
Dit is een vrij uitgebreide browser- en apparaat-fingerprint.
Audio-fingerprinting werkt omdat kleine verschillen in browserversies, besturingssystemen, audiobibliotheken en hardware iets verschillende resultaten kunnen produceren vanuit hetzelfde gegenereerde signaal. Dit is niet noodzakelijkerwijs genoeg om een apparaat op zichzelf uniek te identificeren, maar het wordt veel nuttiger wanneer het wordt gecombineerd met canvas-, WebGL-, hardware-, timing- en interactiegegevens.
Ik kan niet zien wat AliExpress met de resulterende gegevens doet nadat ze hun servers bereiken. Het kan worden gebruikt als een persistente apparaat-identificatie, maar het zou ook een input kunnen zijn in een fraudescore of bot-detectiescore.
Waarom AliExpress dit zou willen
AliExpress heeft genoeg redenen om normale shoppers te onderscheiden van geautomatiseerde of verdachte cliënten, evenals het bijhouden van het surfgedrag van gebruikers. De site moet omgaan met accountovernames, nepaccounts, scraping, geautomatiseerde aankopen, betalingsfraude, manipulatie van reviews en misbruik van coupons of promoties voor nieuwe klanten. Daarnaast maken ze, net als de meeste grote bedrijven, gebruik van grote datasets van gebruikersgedrag om producten en diensten beter te vermarkten.
Cookies zijn niet bijzonder betrouwbaar voor dit doel omdat ze kunnen worden gewist, gekopieerd of vervangen. Een fingerprint gemaakt uit veel onafhankelijke browsermetingen is moeilijker consistent te manipuleren.
Interactiegegevens kunnen ook helpen bepalen of een browser wordt aangestuurd door een mens of door automatisering. Vanuit het perspectief van AliExpress zou dit fraude kunnen verminderen en vertrouwde klanten kunnen toelaten zonder elke paar pagina's een CAPTCHA te tonen (niet dat AliExpress terugschrikt voor hun AI-gegenereerde CAPTCHA's).
Persoonlijk wil ik niet dat een shopping-homepagina stilletjes mijn graphics-, audio-, WebRTC-, hardware- en motion-API's enzovoort gebruikt om mijn gedrag te volgen, vooral niet als dit een zo'n irritant effect heeft als het blokkeren van mijn muziek. Misschien had ik nooit gekeken naar wat de site deed als AliExpress mijn muziek niet had geblokkeerd.
Blokkeren met uBlock Origin
Ik heb het blokkeren van de twee geïdentificeerde scriptfamilies getest. Wanneer beide verzoeken worden geblokkeerd, bleef de AliExpress-homepagina renderen en verschenen er geen AudioContext-objecten of bestemming-verbindingen tijdens de controle-capture.
In Firefox gebruik ik de officiële uBlock Origin-extensie van Raymond Hill. Om de scripts te blokkeren, open je het uBlock-dashboard, selecteer je "Mijn filters" en voeg je het volgende toe:
! 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
Klik op "Wijzigingen toepassen", sluit alle bestaande AliExpress-tabbladen en open de site opnieuw. Bestaande tabbladen moeten worden gesloten omdat het blokkeren van een script geen audio-context stopt die het al heeft aangemaakt.
Deze regels zijn bewust nauw gedefinieerd. Ze blokkeren alleen de twee geobserveerde scriptfamilies en alleen wanneer ze door AliExpress worden aangevraagd. Ik zou niet verrast zijn als dit in de toekomst stopt met werken; dat probleem loss ik op wanneer het zich voordoet.
Omdat deze scripts verbonden lijken te zijn met anti-fraudesystemen, kan het blokkeren ervan leiden tot extra CAPTCHA's of problemen tijdens het inloggen of afrekenen. Tot nu toe werken de homepage en het normale browsen door producten nog steeds, maar ik zou de regels tijdelijk uitschakelen als AliExpress een legitieme login of betaling weigert.
Waarom ik het blokkeer
Het anti-fraude scenario is begrijpelijk, maar deze implementatie heeft verschillende problemen.
Het draait op de algemene shopping-homepagina voordat ik een gevoelige actie uitvoer. Het verzamelt een brede set apparaat- en gedragsmetingen, de implementatie is bewust moeilijk te inspecteren, en er is geen zichtbare indicatie dat de pagina een live audio-verwerkingsgraaf is gestart.
Het produceerde ook een zeer reëel hardware-side-effect. Een stille fingerprinting-test was in staat om in te grijpen in de Bluetooth-multipoint-schakeling, terwijl de dempfunctie van de browser niets deed.
Als een verborgen analyse- of beveiligingsfunctie het audiopad sterk genoeg kan overnemen om te veranderen hoe externe hardware zich gedraagt, lijkt het blokkeren ervan een redelijke afweging.
Ik kan ook niet bewijzen hoe lang AliExpress de fingerprint bewaart of of deze wordt gebruikt over andere Alibaba-eigendommen. De client-code bewijst dat uitgebreide fingerprint-achtige metingen worden verzameld en verzonden, maar server-side bewaring en identiteitskoppeling zijn niet zichtbaar vanuit de browser. Kun je echt iemand vertrouwen die jouw belangen behartigt?
TL;DR
De AliExpress-homepagina maakt stilletjes twee actieve WebAudio-grafen aan via zwaar geobfusceerde Alibaba-beveiligingsscripts. De grafen genereren en analyseren een golfvorm als onderdeel van een veel grotere browser-fingerprint, en maken vervolgens verbinding via een node met nul-gain met de audio-bestemming van het systeem, waardoor de gebruiker niets hoort.
In mijn setup zorgt dit ervoor dat het Bluetooth-audiopad van de pc actief blijft en voorkomt het dat multipoint-koptelefoons terugschakelen naar een telefoon. Het dempen van het tabblad lost dit niet op omdat er geen conventioneel media-element is om te dempen.
Het blokkeren van collina.js and fireyejs.js met de twee bovengenoemde uBlock Origin-regels voorkwam dat de verborgen audio-contexten werden aangemaakt, wat betekent dat ik gelukkig naar mijn muziek kan luisteren zonder onderbroken te worden tijdens het browsen op AliExpress.
Groetjes,