x.com
#02Privacy Audit — Episode #02
TL;DR
Pre-consent fingerprinting across 5 APIs
Canvas, WebGL, MediaDevices, and WebRTC fingerprinting all fire before any consent interaction — a clear ePrivacy Art. 5(3) violation from X's own vendor.js bundle.
Reject button actually works
Clicking 'Refuse non-essential cookies' prevents all marketing cookies (guest_id_ads, guest_id_marketing, personalization_id) from being set. Only a preference-recording cookie is added.
guest_id declared as 'authentication' — lasts 396 days
X's cookie policy classifies guest_id as an authentication cookie, yet it's set pre-consent for unauthenticated visitors with a 13-month lifespan. That's tracking in disguise.
Score breakdown
Consent
Legal Pages
Cross-Border
Dark Patterns
Security Headers
Cookie Management
Pre-Consent Tracking
Full audit deck
GDPR compliance
| Article | Status |
|---|---|
| Art. 6(1)(a) | partial |
| ePrivacy 5(3) | fail |
| ePrivacy 5(3) | fail |
| Art. 7(3) | fail |
| Art. 7(1) | partial |
| Art. 13/14 | partial |
| Art. 25 | fail |
| Art. 44-49 | pass |
| Art. 12 | pass |
Recommendations
Remove pre-consent fingerprinting
Canvas, WebGL, MediaDevices, and WebRTC fingerprinting fire from vendor.js before any consent interaction. Under ePrivacy Art. 5(3) and EDPB Guidelines 2023, fingerprinting requires prior consent.
ePrivacy Art. 5(3) · EDPB Guidelines 2023; AEPD multiple decisions
Implement consent revocation mechanism
No way to withdraw cookie consent after accepting. GDPR Art. 7(3) requires withdrawal to be as easy as giving consent. Add a persistent 'Cookie Settings' link in the footer.
GDPR Art. 7(3) · EDPB Guidelines 05/2020; CNIL multiple decisions
Gate pre-consent tracking cookies behind consent
guest_id (396d) and __cuid (400d) are set before any consent interaction. Either defer to post-consent or reduce lifespans if truly essential.
ePrivacy Art. 5(3) · CNIL: Amazon EUR 35M (2020); Microsoft EUR 60M (2022)
Disclose all cookies in cookie policy
personalization_id, guest_id_ads, and __cuid are not listed in the cookie disclosure table. Reclassify guest_id from 'authentication' to its actual purpose.
GDPR Art. 13 · CNIL: Criteo EUR 40M (2023)
Add granular consent toggles
Current binary accept/reject provides no category-level control. Add toggles for analytics, advertising, and personalisation.
GDPR Art. 7 · EDPB Guidelines 03/2022 on dark patterns
Add missing security headers and SRI
Add Referrer-Policy: strict-origin-when-cross-origin and Permissions-Policy. Implement SRI on external scripts (currently 0/6 coverage).
Security best practice · OWASP Security Headers guidance