{
  "compartment_id": "section-3",
  "number": "Section 3",
  "title_local": "Separate-domain authentication hosts: the Link Filter evidence",
  "title_english": "Separate-domain authentication hosts: the Link Filter evidence",
  "source_url": "https://phishdestroy.io/steam_dossier/#proxy-bypass-explainer",
  "source_document": "index.html",
  "content": {
    "html": "<section class=\"border-t border-gray-800 pt-6 avoid-break print-break\" id=\"proxy-bypass-explainer\">\n<div class=\"max-w-7xl mx-auto space-y-10\">\n<div class=\"section-head section-head-balanced\"><div class=\"section-head-primary\">\n<span class=\"kicker\">Part A — Technical record · Section 3</span>\n<h2>The site is blocked. The login route is not.</h2>\n\n</div><div class=\"section-head-intro\"><p class=\"lede\"><strong>26 blocked main domains. The authentication proxy behind each one, and how long it has been alive.</strong> These separate auth hosts are not incidental second addresses — each one is an <strong>authentication proxy for Steam</strong>, standing between the platform and Valve's OpenID endpoint and carrying the login the blocked domain can no longer carry in the open. Valve put the front door on the Link Filter. The sign-in kept running through the proxy: csgogem.com is blocked, and <code>api.csgem.com</code> has been registered since March 2014 — <strong>twelve and a half years</strong>. Every one of those days that host sent its own hostname to Valve's OpenID endpoint, and Steam rendered it straight back to the user on the login page. <strong>Valve is the trunk every one of these routes runs through; it does not have to find them.</strong> That is what this section measures: not whether a warning exists, but how many years the route behind the warning stays open. 44 separate-domain routes in the register, 27 of them with a published per-route evidence file — the table below. Follow one example, then measure all of them.</p></div></div>\n<figure class=\"rxf\">\n<div class=\"rxf-head\">\n<h3 class=\"rxf-fig-title\">Figure 3.1 — The two routes, drawn.</h3>\n<p>One platform, one player, two requests leaving the same browser. Valve's Link Filter stands on both. It stops the one that carries a link and passes the one that carries the login. Everything measured in this section is a count of how long the lower route stays open.</p>\n<button aria-label=\"Play the two requests\" aria-pressed=\"false\" class=\"rxf-toggle\" data-rxf-toggle=\"\" type=\"button\">\n<span aria-hidden=\"true\" class=\"rxf-toggle-dot\"></span><span class=\"rxf-toggle-t\">Play the two requests</span>\n</button>\n</div>\n<p class=\"rxf-scrollhint\">Swipe the diagram sideways →</p>\n<div aria-label=\"Route diagram: the main domain is blocked by the Link Filter, the separate authentication host is not\" class=\"rxf-stage\" role=\"region\" tabindex=\"0\">\n<svg aria-labelledby=\"rxf-t rxf-d\" class=\"rxf-svg\" preserveaspectratio=\"xMidYMid meet\" role=\"img\" viewBox=\"0 0 940 280\">\n<title id=\"rxf-t\">The blocked front door and the open login route</title>\n<desc id=\"rxf-d\">A player's browser makes two requests. The first, to the platform's main domain rollbit.com, reaches the Steam Link Filter and is blocked. The second, the Sign in with Steam request, goes to the separate authentication host rbsnin.com, passes the Link Filter clean, and reaches Steam's OpenID endpoint at steamcommunity.com.</desc>\n<path class=\"rxf-wire is-dead\" d=\"M162,140 C220,140 235,56 296,56\"></path>\n<path class=\"rxf-wire is-dead\" d=\"M492,56 L546,56\"></path>\n<path class=\"rxf-wire is-live\" d=\"M162,140 C220,140 235,224 296,224\"></path>\n<path class=\"rxf-wire is-live\" d=\"M492,224 L546,224\"></path>\n<path class=\"rxf-wire is-live\" d=\"M662,224 C712,224 706,140 746,140\"></path>\n<rect class=\"rxf-node\" height=\"68\" rx=\"10\" width=\"152\" x=\"10\" y=\"106\"></rect>\n<text class=\"rxf-label\" text-anchor=\"middle\" x=\"86\" y=\"134\">The player</text>\n<text class=\"rxf-sub\" text-anchor=\"middle\" x=\"86\" y=\"152\">one browser, one session</text>\n<rect class=\"rxf-node is-blocked\" height=\"68\" rx=\"10\" width=\"196\" x=\"296\" y=\"22\"></rect>\n<text class=\"rxf-label\" text-anchor=\"middle\" x=\"394\" y=\"50\">rollbit.com</text>\n<text class=\"rxf-sub\" text-anchor=\"middle\" x=\"394\" y=\"68\">the platform's main domain</text>\n<rect class=\"rxf-node is-open\" height=\"68\" rx=\"10\" width=\"196\" x=\"296\" y=\"190\"></rect>\n<text class=\"rxf-label\" text-anchor=\"middle\" x=\"394\" y=\"218\">rbsnin.com</text>\n<text class=\"rxf-sub\" text-anchor=\"middle\" x=\"394\" y=\"236\">separate authentication host</text>\n<rect class=\"rxf-gate is-stop\" height=\"48\" rx=\"8\" width=\"116\" x=\"546\" y=\"32\"></rect>\n<rect class=\"rxf-impact\" height=\"48\" rx=\"8\" width=\"116\" x=\"546\" y=\"32\"></rect>\n<text class=\"rxf-gate-t\" text-anchor=\"middle\" x=\"604\" y=\"52\">LINK FILTER</text>\n<text class=\"rxf-gate-t\" text-anchor=\"middle\" x=\"604\" y=\"68\">✕ BLOCKED</text>\n<rect class=\"rxf-gate is-pass\" height=\"48\" rx=\"8\" width=\"116\" x=\"546\" y=\"200\"></rect>\n<rect class=\"rxf-pass-flash\" height=\"48\" rx=\"8\" width=\"116\" x=\"546\" y=\"200\"></rect>\n<text class=\"rxf-pass-t\" text-anchor=\"middle\" x=\"604\" y=\"220\">LINK FILTER</text>\n<text class=\"rxf-pass-t\" text-anchor=\"middle\" x=\"604\" y=\"236\">✓ CLEAN</text>\n<rect class=\"rxf-node is-steam\" height=\"68\" rx=\"10\" width=\"184\" x=\"746\" y=\"106\"></rect>\n<rect class=\"rxf-arrive\" height=\"68\" rx=\"10\" width=\"184\" x=\"746\" y=\"106\"></rect>\n<text class=\"rxf-label\" text-anchor=\"middle\" x=\"838\" y=\"134\">steamcommunity.com</text>\n<text class=\"rxf-sub\" text-anchor=\"middle\" x=\"838\" y=\"152\">OpenID endpoint · signs in</text>\n<path class=\"rxf-wire is-dead\" d=\"M662,56 L678,56\"></path>\n<line class=\"rxf-dead-x\" x1=\"685\" x2=\"697\" y1=\"50\" y2=\"62\"></line>\n<line class=\"rxf-dead-x\" x1=\"697\" x2=\"685\" y1=\"50\" y2=\"62\"></line>\n<text class=\"rxf-gate-t\" text-anchor=\"middle\" x=\"691\" y=\"82\">no route</text>\n<circle class=\"rxf-ring is-stop\" cx=\"546\" cy=\"56\" r=\"7\"></circle>\n<circle class=\"rxf-ring is-arrive\" cx=\"746\" cy=\"140\" r=\"7\"></circle>\n<circle class=\"rxf-packet rxf-trail is-stopped ds-5a8e2e8a9868\" cx=\"0\" cy=\"0\" r=\"12\"></circle>\n<circle class=\"rxf-packet rxf-trail ds-a813923f10ad\" cx=\"0\" cy=\"0\" r=\"12\"></circle>\n<circle class=\"rxf-packet rxf-trail ds-273651f3bc91\" cx=\"0\" cy=\"0\" r=\"12\"></circle>\n<circle class=\"rxf-packet rxf-trail ds-5cf963f2ffaa\" cx=\"0\" cy=\"0\" r=\"12\"></circle>\n<circle class=\"rxf-packet is-stopped ds-65473269e935\" cx=\"0\" cy=\"0\" r=\"7\"></circle>\n<circle class=\"rxf-packet ds-778a7fca9dba\" cx=\"0\" cy=\"0\" r=\"7\"></circle>\n<circle class=\"rxf-packet ds-9d983abe1df4\" cx=\"0\" cy=\"0\" data-delay=\"1\" r=\"7\"></circle>\n<circle class=\"rxf-packet ds-802370207189\" cx=\"0\" cy=\"0\" data-delay=\"2\" r=\"7\"></circle>\n</svg>\n</div>\n<div class=\"rxf-legend\">\n<span class=\"is-blocked\"><i></i>Link posted in Steam — stopped</span>\n<span class=\"is-open\"><i></i>Login request — passes</span>\n<span>Saved checks of 19 and 21 September 2026</span>\n</div>\n<p class=\"rxf-foot\"><strong>Both requests are visible to Valve, and only one is acted on.</strong> The Link Filter is a Valve list, checked by a Valve service. The OpenID request carries the auth host's own name to Valve's endpoint, which prints it straight back on the login page. The hostname is in the request either way — what differs is whether anything is done with it.</p>\n</figure>\n<div aria-label=\"Link Filter versus Steam authentication\" class=\"story-scene\" data-story=\"\">\n<div class=\"story-scene-header\"><strong>One platform. Two different routes.</strong><span>ROLLBIT / SAVED OBSERVATIONS</span></div>\n<div class=\"story-lane\"><div class=\"story-lane-label\"><b>01</b> THE LINK FILTER CHECK</div><div class=\"story-route\">\n<div class=\"story-node\" data-story-step=\"0\"><small>DESTINATION</small><strong>rollbit.com</strong><span>The platform's main domain</span></div>\n<div class=\"story-node\" data-story-step=\"1\"><small>STEAM LINK FILTER</small><strong>Checks the link</strong><span>A separate destination-warning system</span></div>\n<div class=\"story-node is-blocked\" data-story-step=\"1\"><small>SAVED RESULT</small><strong>Link blocked</strong><span>19 &amp; 21 September 2026</span></div>\n</div></div>\n<div class=\"story-lane\"><div class=\"story-lane-label\"><b>02</b> THE OBSERVED SIGN-IN ROUTE</div><div class=\"story-route\">\n<div class=\"story-node\" data-story-step=\"2\"><small>ON THE PLATFORM</small><strong>Sign in with Steam</strong><span>The platform starts an OpenID request</span></div>\n<div class=\"story-node\" data-story-step=\"3\"><small>SEPARATE AUTH HOST</small><strong>rbsnin.com</strong><span>No Link Filter block in the saved check</span></div>\n<div class=\"story-node\" data-story-step=\"4\"><small>STEAM</small><strong>Login form served</strong><span>The requested host appears in Steam's notice</span></div>\n</div></div>\n<div class=\"story-caption\">\n<p data-story-caption=\"0\" hidden=\"\"><strong>Start with the destination.</strong> rollbit.com is the platform's main domain. This first lane shows the saved Link Filter check, not a completed user journey.</p>\n<p data-story-caption=\"1\" hidden=\"\"><strong>A visible block.</strong> Steam's Link Filter returned \"Link Blocked!\" for the main domain. The raw response is saved.</p>\n<p data-story-caption=\"2\" hidden=\"\"><strong>Authentication uses another route.</strong> The platform's \"Sign in with Steam\" action initiates an OpenID request using a separate auth host.</p>\n<p data-story-caption=\"3\" hidden=\"\"><strong>A different hostname.</strong> rbsnin.com returned no Link Filter block on 21 September 2026 — the same day, in the same unauthenticated check, that rollbit.com returned one. Registered three days earlier, on 18 September 2026.</p>\n<p data-story-caption=\"4\"><strong>The request reaches Steam.</strong> The observed route reached Steam's login form. The authors did not complete the login. Blocking the main-domain link did not block this observed route to the form.</p>\n</div>\n<div class=\"story-controls\" hidden=\"\"><button data-story-play=\"\" type=\"button\">Replay the route</button><button data-story-next=\"\" type=\"button\">Start again</button><span aria-live=\"polite\" role=\"status\"></span></div>\n</div>\n<section class=\"dossier-note story-evidence\"><div class=\"dossier-note-title\">Inspect the original capture notes, registration date and protocol details</div>\n<div class=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n<div class=\"proxy-box-enforcement bg-gray-950 border border-gray-700 rounded-lg p-6 space-y-4\">\n<div class=\"flex items-center justify-between border-b border-gray-800 pb-3\">\n<div class=\"flex items-center gap-2\"><span class=\"text-xs font-mono text-gray-300 uppercase tracking-widest font-bold\">What Valve's enforcement looks like</span></div>\n<span class=\"text-xs font-mono uppercase tracking-wider text-red-400 border border-red-800 px-2 py-0.5 rounded\">Main domain: blocked</span>\n</div>\n<div class=\"space-y-2 font-mono text-xs\">\n<div class=\"flex items-center gap-2\"><div class=\"bg-gray-900 border border-gray-700 rounded px-3 py-2 text-gray-300\">User</div><span class=\"text-gray-400 text-base font-bold\">→</span><div class=\"bg-gray-900 border border-gray-700 rounded px-3 py-2 text-gray-300 flex-1 text-center\">rollbit.com<br/><span class=\"text-gray-400\">(main domain)</span></div></div>\n<div class=\"flex items-center gap-2 pl-6\"><span class=\"text-gray-400 text-xl font-black\">↓</span></div>\n<div class=\"bg-red-950/60 border border-red-700/60 rounded px-3 py-2 text-center ml-6\"><span class=\"text-red-400 font-bold text-sm\">STEAM LINK FILTER — BLOCKED</span><div class=\"text-red-300 text-[11px] mt-1\">\"Link Blocked!\" — flagged as potentially malicious</div></div>\n<div class=\"text-gray-400 text-[11px] pl-6 pt-1\">rollbit.com returned a Link Filter block on 2026-09-19 and 2026-09-21 (unauthenticated check; raw HTML and SHA-256 saved). A visible, auditable record.</div>\n</div>\n</div>\n<div class=\"proxy-box-realflow bg-gray-950 border border-gray-700 rounded-lg p-6 space-y-4\">\n<div class=\"flex items-center justify-between border-b border-gray-800 pb-3\">\n<div class=\"flex items-center gap-2\"><span class=\"text-xs font-mono text-gray-300 uppercase tracking-widest font-bold\">What actually happens — authentication</span></div>\n<span class=\"text-xs font-mono uppercase tracking-wider text-gray-200 border border-gray-600 px-2 py-0.5 rounded\">Auth host: not blocked</span>\n</div>\n<div class=\"space-y-1 font-mono text-xs\">\n<div class=\"flex items-center gap-2\"><div class=\"bg-gray-900 border border-gray-700 rounded px-2 py-1.5 text-gray-300 text-[11px]\">User</div><span class=\"text-gray-400 text-base font-bold\">→</span><div class=\"bg-gray-900 border border-gray-700 rounded px-2 py-1.5 text-gray-300 flex-1 text-center text-[11px]\">rollbit.com<br/><span class=\"text-gray-400\">\"Sign in with Steam\"</span></div></div>\n<div class=\"pl-4 text-gray-400 text-xl font-black\">↓</div>\n<div class=\"flex items-start gap-2\"><div class=\"w-3 shrink-0\"></div><div class=\"bg-gray-900 border border-gray-700 rounded px-2 py-1.5 flex-1 text-[11px]\"><span class=\"text-gray-200 font-bold\">Redirect via separate auth host:</span><br/><code class=\"text-gray-100\">rbsnin.com</code><span class=\"text-xs font-mono text-gray-300 border border-gray-600 px-1.5 py-0.5 rounded ml-1.5\">Link Filter: CLEAN</span><div class=\"text-gray-400 mt-0.5\">registered 2026-09-18T09:34:52Z (Verisign RDAP)</div></div></div>\n<div class=\"pl-4 text-gray-400 text-xl font-black\">↓</div>\n<div class=\"flex items-start gap-2\"><div class=\"w-3 shrink-0\"></div><div class=\"bg-gray-900 border border-gray-700 rounded px-2 py-1.5 flex-1 text-[11px]\"><span class=\"text-gray-200 font-bold\">Steam login page notice (2026-09-20):</span><br/><code class=\"text-gray-100 break-all\">\"Note that rbsnin.com is not affiliated with Steam or Valve\"</code><div class=\"text-gray-400 mt-0.5\">Steam renders this notice from the openid.realm of the request it received.</div></div></div>\n<div class=\"pl-4 text-gray-400 text-xl font-black\">↓</div>\n<div class=\"flex items-center gap-2\"><div class=\"w-3 shrink-0\"></div><div class=\"bg-gray-900 border border-gray-700 rounded px-2 py-1.5 flex-1 text-center text-[11px]\"><span class=\"text-gray-100 font-bold\">Steam login form served for the separate host</span><br/><span class=\"text-gray-400\">The login was not completed by the authors; the flow was observed up to the Steam form.</span></div></div>\n<div class=\"text-gray-400 text-xs pt-1 pl-3\">Valve receives the return_to / realm hostname on every such request. rbsnin.com returned no Link Filter block on 2026-09-21.</div>\n</div>\n</div>\n</div>\n<div class=\"proxy-stat-bar bg-gray-950 border border-gray-700 rounded-lg p-8\">\n<div class=\"grid grid-cols-1 md:grid-cols-3 gap-8 text-center\">\n<div class=\"space-y-3\"><div class=\"proxy-stat-realtime text-3xl font-black text-white font-mono tracking-wider\">Per request</div><div class=\"text-xs text-gray-400 leading-relaxed\">As the OpenID provider, Steam receives the auth hostname with every authentication request: it arrives at Valve's own servers in the <code class=\"text-gray-200\">openid.return_to</code> and <code class=\"text-gray-200\">openid.realm</code> parameters.</div></div>\n<div class=\"space-y-3\"><div class=\"proxy-stat-push text-3xl font-black text-white font-mono tracking-wider\">Sent by the site</div><div class=\"text-xs text-gray-400 leading-relaxed\">The auth host is not discovered by scanning — the platform sends it to Steam in each request. Under OpenID 2.0 §9.1 <code class=\"text-gray-200\">return_to</code> is formally optional, but without it Steam cannot deliver the login result, so for a working Steam login it is effectively required. Steam even renders the hostname to the user (\"<em>&lt;host&gt; is not affiliated with Steam or Valve</em>\").</div></div>\n<div class=\"space-y-3\"><div class=\"proxy-stat-zero text-4xl font-black text-red-400 font-mono\">14 yr</div><div class=\"text-[11px] text-gray-300 leading-relaxed font-medium\">is the age of the oldest auth host still carrying Steam logins at the 2026-09-21 check (dota2.net, registered 2011-10-29); the newest is three days old (rbsnin.com). <strong class=\"text-white\">Do not read the \"0 auth hosts blocked\" figure as the finding.</strong> A blocked auth host would break the platform's \"Sign in with Steam\" outright, so a register built from working logins can only contain hosts that were never blocked. The number that carries meaning is not the block count — it is how many years the main domain sat on the Link Filter while the login beside it kept running.</div></div>\n</div>\n</div>\n</section>\n<div class=\"space-y-4\">\n<div class=\"flex items-center gap-3\"><span class=\"text-xs font-mono text-gray-400 uppercase tracking-widest font-bold\">Separate-domain auth hosts: registration date vs. main domain (30 routes: the 25 resolved in the 2026-09-21 browser audit, plus 5 added on 2026-09-22)</span><div class=\"h-px flex-1 bg-gray-800\"></div></div>\n<figure class=\"evidence-figure route-audit-exhibit\">\n<div class=\"overflow-x-auto rounded border border-gray-800\">\n<table class=\"proxy-table w-full text-xs font-mono\">\n<thead><tr class=\"bg-gray-900 border-b border-gray-800\"><th class=\"text-left px-4 py-3 text-gray-400 font-semibold\">Platform</th><th class=\"text-left px-4 py-3 text-gray-400 font-semibold\">Link Filter: main</th><th class=\"text-left px-4 py-3 text-gray-400 font-semibold\">Auth host</th><th class=\"text-left px-4 py-3 text-gray-400 font-semibold\">Link Filter: auth host</th><th class=\"text-left px-4 py-3 text-gray-400 font-semibold\">Auth host registered</th><th class=\"text-left px-4 py-3 text-gray-400 font-semibold\">Source of observation</th><th class=\"text-left px-4 py-3 text-gray-400 font-semibold\">Evidence file</th></tr></thead>\n<tbody class=\"divide-y divide-gray-900\">\n<tr class=\"hover:bg-gray-900/40 bg-red-950/20\"><td class=\"px-4 py-3 text-white font-bold\">Rollbit<div class=\"text-xs text-gray-400\">rollbit.com · reg. 2014-11-08</div></td><td data-verdict=\"blocked\" class=\"px-4 py-3 text-red-400 font-bold\">BLOCKED<div class=\"text-xs font-normal text-gray-400\">2026-09-19, 2026-09-21 · <a class=\"underline\" href=\"https://web.archive.org/web/20260921022628/https://steamcommunity.com/linkfilter/?url=https:%2F%2Frollbit.com\" rel=\"noopener noreferrer\" target=\"_blank\">Wayback 2026-09-21</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">rbsnin.com</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/rbsnin.com.20260921T021120Z.html\">raw HTML</a> (no Wayback snapshot)</div></td><td class=\"px-4 py-3 text-red-400 font-bold\">2026-09-18<div class=\"text-xs font-normal text-gray-400\">09:34:52Z, Verisign RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Steam login-page notice, 2026-09-20</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/rollbit.com.json\">rollbit.com.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40 bg-red-950/10\"><td class=\"px-4 py-3 text-white font-bold\">Skin.Club<div class=\"text-xs text-gray-400\">skin.club · reg. 2017-09-04</div></td><td data-verdict=\"blocked\" class=\"px-4 py-3 text-red-400 font-bold\">BLOCKED<div class=\"text-xs font-normal text-gray-400\">2026-09-19, 2026-09-21 · <a class=\"underline\" href=\"https://web.archive.org/web/20260921022740/https://steamcommunity.com/linkfilter/?url=https:%2F%2Fskin.club\" rel=\"noopener noreferrer\" target=\"_blank\">Wayback 2026-09-21</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">sc-auth.net</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"https://web.archive.org/web/20260921022842/https://steamcommunity.com/linkfilter/?url=https:%2F%2Fsc-auth.net\" rel=\"noopener noreferrer\" target=\"_blank\">Wayback 2026-09-21</a></div></td><td class=\"px-4 py-3 text-gray-300\">2019-04-02<div class=\"text-xs text-gray-400\">RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Steam login-page notice</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/skin.club.json\">skin.club.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40 bg-red-950/10\"><td class=\"px-4 py-3 text-white font-bold\">Howl.GG<div class=\"text-xs text-gray-400\">howl.gg · reg. 2017-03-16</div></td><td data-verdict=\"blocked\" class=\"px-4 py-3 text-red-400 font-bold\">BLOCKED<div class=\"text-xs font-normal text-gray-400\">2026-09-18, 09-19, 09-21 · <a class=\"underline\" href=\"https://web.archive.org/web/20260921022603/https://steamcommunity.com/linkfilter/?url=https:%2F%2Fhowl.gg\" rel=\"noopener noreferrer\" target=\"_blank\">Wayback 2026-09-21</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">howl.uno</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"https://web.archive.org/web/20260921022636/https://steamcommunity.com/linkfilter/?url=https:%2F%2Fhowl.uno\" rel=\"noopener noreferrer\" target=\"_blank\">Wayback 2026-09-21</a></div></td><td class=\"px-4 py-3 text-red-400 font-bold\">2026-08-11<div class=\"text-xs font-normal text-gray-400\">RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Live browser capture + supplied OpenID URL</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/howl.gg.json\">howl.gg.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40 bg-red-950/10\"><td class=\"px-4 py-3 text-white font-bold\">Duelbits<div class=\"text-xs text-gray-400\">duelbits.com · reg. 2020-02-03</div></td><td data-verdict=\"blocked\" class=\"px-4 py-3 text-red-400 font-bold\">BLOCKED<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"https://web.archive.org/web/20260921022840/https://steamcommunity.com/linkfilter/?url=https:%2F%2Fduelbits.com\" rel=\"noopener noreferrer\" target=\"_blank\">Wayback 2026-09-21</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">switchflips.com</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"https://web.archive.org/web/20260921022901/https://steamcommunity.com/linkfilter/?url=https:%2F%2Fswitchflips.com\" rel=\"noopener noreferrer\" target=\"_blank\">Wayback 2026-09-21</a></div></td><td class=\"px-4 py-3 text-gray-300\">2020-04-21<div class=\"text-xs text-gray-400\">RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Supplied OpenID URL</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/duelbits.com.json\">duelbits.com.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40 bg-red-950/10\"><td class=\"px-4 py-3 text-white font-bold\">CSGOFast<div class=\"text-xs text-gray-400\">csgofast.com · reg. 2015-03-27</div></td><td data-verdict=\"blocked\" class=\"px-4 py-3 text-red-400 font-bold\">BLOCKED<div class=\"text-xs font-normal text-gray-400\">2026-09-19, 2026-09-21 · <a class=\"underline\" href=\"https://web.archive.org/web/20260921022758/https://steamcommunity.com/linkfilter/?url=https:%2F%2Fcsgofast.com\" rel=\"noopener noreferrer\" target=\"_blank\">Wayback 2026-09-21</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">steam-login.authtofast.com</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">authtofast.com, 2026-09-21 · <a class=\"underline\" href=\"https://web.archive.org/web/20260921022847/https://steamcommunity.com/linkfilter/?url=https:%2F%2Fauthtofast.com\" rel=\"noopener noreferrer\" target=\"_blank\">Wayback 2026-09-21</a></div></td><td class=\"px-4 py-3 text-red-400 font-bold\">2026-06-30<div class=\"text-xs font-normal text-gray-400\">authtofast.com, RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Live browser capture + supplied OpenID URL</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/csgofast.com.json\">csgofast.com.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40 bg-red-950/10\"><td class=\"px-4 py-3 text-white font-bold\">Farmskins<div class=\"text-xs text-gray-400\">farmskins.com · reg. 2016-03-23</div></td><td data-verdict=\"blocked\" class=\"px-4 py-3 text-red-400 font-bold\">BLOCKED<div class=\"text-xs font-normal text-gray-400\">2026-09-19, 2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/farmskins.com.20260921T025840Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">steam.kobal.cc</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-19, 2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/steam.kobal.cc.20260921T025844Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2017-01-07<div class=\"text-xs text-gray-400\">kobal.cc, RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Live browser capture + supplied OpenID URL</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/farmskins.com.json\">farmskins.com.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40 bg-red-950/10\"><td class=\"px-4 py-3 text-white font-bold\">CobaltLab<div class=\"text-xs text-gray-400\">cobaltlab.tech</div></td><td data-verdict=\"blocked\" class=\"px-4 py-3 text-red-400 font-bold\">BLOCKED<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/cobaltlab.tech.20260921T041604Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">cobaltauth.com</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/cobaltauth.com.20260921T041608Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2025-01-07<div class=\"text-xs text-gray-400\">RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Supplied OpenID URL</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/cobaltlab.tech.json\">cobaltlab.tech.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40 bg-red-950/10\"><td class=\"px-4 py-3 text-white font-bold\">CSGO.NET<div class=\"text-xs text-gray-400\">csgo.net · reg. 2012-07-22</div></td><td data-verdict=\"blocked\" class=\"px-4 py-3 text-red-400 font-bold\">BLOCKED<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/csgo.net.20260921T041619Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">cn2.easylot.net</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/cn2.easylot.net.20260921T041623Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2016-09-03<div class=\"text-xs text-gray-400\">easylot.net, RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Live browser capture</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/csgo.net.json\">csgo.net.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40 bg-red-950/10\"><td class=\"px-4 py-3 text-white font-bold\">GGDrop<div class=\"text-xs text-gray-400\">ggdrop.com</div></td><td data-verdict=\"blocked\" class=\"px-4 py-3 text-red-400 font-bold\">BLOCKED<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/ggdrop.com.20260921T041637Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">ggauth.com</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/ggauth.com.20260921T041641Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2023-05-03<div class=\"text-xs text-gray-400\">RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Supplied OpenID URL</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/ggdrop.com.json\">ggdrop.com.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40 bg-red-950/10\"><td class=\"px-4 py-3 text-white font-bold\">RustChance<div class=\"text-xs text-gray-400\">rustchance.com</div></td><td data-verdict=\"blocked\" class=\"px-4 py-3 text-red-400 font-bold\">BLOCKED<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/rustchance.com.20260921T041703Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">hgfuihd.com</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/hgfuihd.com.20260921T041706Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2019-01-27<div class=\"text-xs text-gray-400\">RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Supplied OpenID URL</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/rustchance.com.json\">rustchance.com.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40 bg-red-950/10\"><td class=\"px-4 py-3 text-white font-bold\">Skin.Fans<div class=\"text-xs text-gray-400\">skin.fans</div></td><td data-verdict=\"blocked\" class=\"px-4 py-3 text-red-400 font-bold\">BLOCKED<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/skin.fans.20260921T041710Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">auth.skinfans.com</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/auth.skinfans.com.20260921T041713Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2018-07-16<div class=\"text-xs text-gray-400\">skinfans.com, RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Supplied OpenID URL</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/skin.fans.json\">skin.fans.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40 bg-red-950/10\"><td class=\"px-4 py-3 text-white font-bold\">Skinport<div class=\"text-xs text-gray-400\">skinport.com · reg. 2018-09-05</div></td><td data-verdict=\"blocked\" class=\"px-4 py-3 text-red-400 font-bold\">BLOCKED<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/skinport.com.20260921T041724Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">skinport.app</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/skinport.app.20260921T041728Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2020-06-20<div class=\"text-xs text-gray-400\">RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Live browser capture + supplied OpenID URL</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/skinport.com.json\">skinport.com.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40 bg-red-950/10\"><td class=\"px-4 py-3 text-white font-bold\">Skins.Cash<div class=\"text-xs text-gray-400\">skins.cash</div></td><td data-verdict=\"blocked\" class=\"px-4 py-3 text-red-400 font-bold\">BLOCKED<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/skins.cash.20260921T041731Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">skinscash.live</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/skinscash.live.20260921T041735Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2019-12-05<div class=\"text-xs text-gray-400\">RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Supplied OpenID URL</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/skins.cash.json\">skins.cash.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40 bg-red-950/10\"><td class=\"px-4 py-3 text-white font-bold\">TF2Hunt<div class=\"text-xs text-gray-400\">tf2hunt.com · reg. 2018-01-13</div></td><td data-verdict=\"blocked\" class=\"px-4 py-3 text-red-400 font-bold\">BLOCKED<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/tf2hunt.com.20260921T041739Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">rstspcl.com</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/rstspcl.com.20260921T041742Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2020-08-08<div class=\"text-xs text-gray-400\">RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Live browser capture + supplied OpenID URL</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/tf2hunt.com.json\">tf2hunt.com.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40 bg-red-950/20\"><td class=\"px-4 py-3 text-white font-bold\">CSGOGem<div class=\"text-xs text-gray-400\">csgogem.com · reg. 2016-10-16</div></td><td data-verdict=\"blocked\" class=\"px-4 py-3 text-red-400 font-bold\">BLOCKED<div class=\"text-xs font-normal text-gray-400\">2026-09-22 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/csgogem.com.20260922T192355Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">api.csgem.com</code><div class=\"text-xs text-gray-400\">csgem.com — separate registrable domain</div></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-22 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/api.csgem.com.20260922T192358Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2014-03-08<div class=\"text-xs text-gray-400\">csgem.com, RDAP — oldest in register</div></td><td class=\"px-4 py-3 text-gray-300\">Manual collection + Link Filter capture</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/linkfilter-2026-09-22.json\">linkfilter-2026-09-22.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40 bg-red-950/10\"><td class=\"px-4 py-3 text-white font-bold\">Gamdom<div class=\"text-xs text-gray-400\">gamdom.com · reg. 2016-07-29</div></td><td data-verdict=\"blocked\" class=\"px-4 py-3 text-red-400 font-bold\">BLOCKED<div class=\"text-xs font-normal text-gray-400\">2026-09-22 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/gamdom.com.20260922T192326Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">login.gambldom.com</code><div class=\"text-xs text-gray-400\">gambldom.com — one letter off the brand</div></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-22 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/login.gambldom.com.20260922T192330Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2017-09-24<div class=\"text-xs text-gray-400\">gambldom.com, RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Manual collection + Link Filter capture</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/linkfilter-2026-09-22.json\">linkfilter-2026-09-22.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40 bg-red-950/10\"><td class=\"px-4 py-3 text-white font-bold\">12CS<div class=\"text-xs text-gray-400\">12cs.fail · reg. 2026-03-24</div></td><td data-verdict=\"blocked\" class=\"px-4 py-3 text-red-400 font-bold\">BLOCKED<div class=\"text-xs font-normal text-gray-400\">2026-09-22 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/12cs.fail.20260922T192347Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">fail.games</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-22 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/fail.games.20260922T192351Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2021-08-24<div class=\"text-xs text-gray-400\">fail.games, RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Manual collection + Link Filter capture</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/linkfilter-2026-09-22.json\">linkfilter-2026-09-22.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40\"><td class=\"px-4 py-3 text-white font-bold\">CSGOEmpire<div class=\"text-xs text-gray-400\">csgoempire.com · reg. 2015-06-10</div></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-19, 2026-09-21 · <a class=\"underline\" href=\"https://web.archive.org/web/20260921022953/https://steamcommunity.com/linkfilter/?url=https:%2F%2Fcsgoempire.com\" rel=\"noopener noreferrer\" target=\"_blank\">Wayback 2026-09-21</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">csgoempirelogin4.com</code><div class=\"text-xs text-gray-400 mt-0.5\">one of ten numbered domains login1–10</div></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"https://web.archive.org/web/20260921022947/https://steamcommunity.com/linkfilter/?url=https:%2F%2Fcsgoempirelogin4.com\" rel=\"noopener noreferrer\" target=\"_blank\">Wayback 2026-09-21</a></div></td><td class=\"px-4 py-3 text-orange-400\">2020-07-20<div class=\"text-xs text-gray-400\">05:49:17Z, Verisign RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Live browser capture</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/csgoempire.com.json\">csgoempire.com.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40\"><td class=\"px-4 py-3 text-white font-bold\">CS.MONEY<div class=\"text-xs text-gray-400\">cs.money</div></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/cs.money.20260921T021131Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">auth.dota.trade</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/auth.dota.trade.20260921T021134Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2016-07-15<div class=\"text-xs text-gray-400\">dota.trade, RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Steam login-page notice</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/cs.money.json\">cs.money.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40\"><td class=\"px-4 py-3 text-white font-bold\">CSFloat<div class=\"text-xs text-gray-400\">csfloat.com · reg. 2021-07-11</div></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/csfloat.com.20260921T041612Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">csgofloat.com</code><div class=\"text-xs text-gray-400 mt-0.5\">operator's former brand domain; separate registrable domain, not an evasion indicator</div></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/csgofloat.com.20260921T041615Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2015-09-29<div class=\"text-xs text-gray-400\">RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Live browser capture</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/csfloat.com.json\">csfloat.com.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40\"><td class=\"px-4 py-3 text-white font-bold\">G4Skins<div class=\"text-xs text-gray-400\">g4skins.com</div></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/g4skins.com.20260921T041630Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">auth.g4s.to</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/auth.g4s.to.20260921T041634Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2021-05-30<div class=\"text-xs text-gray-400\">g4s.to, RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Supplied OpenID URL</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/g4skins.com.json\">g4skins.com.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40\"><td class=\"px-4 py-3 text-white font-bold\">Juice.GG<div class=\"text-xs text-gray-400\">juice.gg</div></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/juice.gg.20260921T041644Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">letmeinjuice.com</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/letmeinjuice.com.20260921T041648Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2024-04-15<div class=\"text-xs text-gray-400\">RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Supplied OpenID URL</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/juice.gg.json\">juice.gg.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40\"><td class=\"px-4 py-3 text-white font-bold\">Market.CSGO<div class=\"text-xs text-gray-400\">market.csgo.com</div></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/market.csgo.com.20260921T041652Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">dota2.net</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/dota2.net.20260921T041655Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2011-10-29<div class=\"text-xs text-gray-400\">RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Live browser capture + supplied OpenID URL</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/market.csgo.com.json\">market.csgo.com.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40\"><td class=\"px-4 py-3 text-white font-bold\">Rust.TM<div class=\"text-xs text-gray-400\">rust.tm</div></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/rust.tm.20260921T041659Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">dota2.net</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/dota2.net.20260921T041655Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2011-10-29<div class=\"text-xs text-gray-400\">RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Supplied OpenID URL</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/rust.tm.json\">rust.tm.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40\"><td class=\"px-4 py-3 text-white font-bold\">CSGOLounge<div class=\"text-xs text-gray-400\">csgolounge.com · reg. 2013-08-14</div></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-22 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/csgolounge.com.20260922T192333Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">dota2.net</code><div class=\"text-xs text-gray-400\">third front-end on this auth host</div></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-22 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/dota2.net.20260922T192340Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2011-10-29<div class=\"text-xs text-gray-400\">dota2.net, RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Manual collection + Link Filter capture</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/linkfilter-2026-09-22.json\">linkfilter-2026-09-22.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40\"><td class=\"px-4 py-3 text-white font-bold\">Dota2Lounge<div class=\"text-xs text-gray-400\">dota2lounge.com · reg. 2012-08-10</div></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-22 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/dota2lounge.com.20260922T192337Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">dota2.net</code><div class=\"text-xs text-gray-400\">fourth front-end on this auth host</div></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-22 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/dota2.net.20260922T192340Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2011-10-29<div class=\"text-xs text-gray-400\">dota2.net, RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Manual collection + Link Filter capture</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/linkfilter-2026-09-22.json\">linkfilter-2026-09-22.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40\"><td class=\"px-4 py-3 text-white font-bold\">SkinBaron<div class=\"text-xs text-gray-400\">skinbaron.de</div></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/skinbaron.de.20260921T041717Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">skinbaron.com</code><div class=\"text-xs text-gray-400 mt-0.5\">same brand, different TLD</div></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/skinbaron.com.20260921T041721Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2015-12-22<div class=\"text-xs text-gray-400\">RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Supplied OpenID URL</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/skinbaron.de.json\">skinbaron.de.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40\"><td class=\"px-4 py-3 text-white font-bold\">TF2Royal<div class=\"text-xs text-gray-400\">tf2royal.com · reg. 2022-08-17</div></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/tf2royal.com.20260921T041746Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">tf2auth.com</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/tf2auth.com.20260921T041750Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2021-07-27<div class=\"text-xs text-gray-400\">RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Live browser capture + supplied OpenID URL</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/tf2royal.com.json\">tf2royal.com.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40\"><td class=\"px-4 py-3 text-white font-bold\">Tradeit<div class=\"text-xs text-gray-400\">tradeit.gg</div></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/tradeit.gg.20260921T041753Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">connect-tradeit.com</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/connect-tradeit.com.20260921T041757Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-gray-300\">2022-02-23<div class=\"text-xs text-gray-400\">RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Supplied OpenID URL</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/tradeit.gg.json\">tradeit.gg.json</a></td></tr>\n<tr class=\"hover:bg-gray-900/40\"><td class=\"px-4 py-3 text-white font-bold\">Upgrader<div class=\"text-xs text-gray-400\">upgrader.pro</div></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/upgrader.pro.20260921T041801Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3\"><code class=\"text-cyan-300\">upgauth.space</code></td><td data-verdict=\"clean\" class=\"px-4 py-3 text-emerald-400 font-bold\">CLEAN<div class=\"text-xs font-normal text-gray-400\">2026-09-21 · <a class=\"underline\" href=\"steam_tos_assets/linkfilter-raw/upgauth.space.20260921T041804Z.html\">raw HTML</a></div></td><td class=\"px-4 py-3 text-red-400 font-bold\">2026-08-14<div class=\"text-xs font-normal text-gray-400\">RDAP</div></td><td class=\"px-4 py-3 text-gray-300\">Supplied OpenID URL</td><td class=\"px-4 py-3\"><a class=\"text-gray-400 underline\" href=\"steam_tos_assets/auth-route-audit/upgrader.pro.json\">upgrader.pro.json</a></td></tr>\n</tbody>\n</table>\n</div>\n<figcaption class=\"evidence-caption\">Source: steamcommunity.com/linkfilter, unauthenticated GET, 2026-09-21, 53 hosts, 3 s spacing; <a href=\"steam_tos_assets/linkfilter-recheck-2026-09-21.json\">steam_tos_assets/linkfilter-recheck-2026-09-21.json</a>; raw HTML in <code>steam_tos_assets/linkfilter-raw/</code>. Registration dates: RDAP, <a href=\"steam_tos_assets/domain-registration.json\">steam_tos_assets/domain-registration.json</a>. · Earlier check of 2026-09-19 in <a href=\"steam_tos_assets/linkfilter-all-results.json\">linkfilter-all-results.json</a> · route records in <a href=\"steam_tos_assets/auth-route-audit.json\">auth-route-audit.json</a> · Wayback Machine snapshots of the Link Filter pages, 2026-09-21, listed in <a href=\"steam_tos_assets/wayback-snapshots.json\">wayback-snapshots.json</a> (no snapshot exists for rbsnin.com; the local raw file is the only record).</figcaption>\n</figure>\n<p class=\"text-[11px] text-gray-400 font-mono\">Registration dates: RDAP (<code>steam_tos_assets/domain-registry/</code>). \"Supplied OpenID URL\" establishes the request parameters, not a completed login. No login was completed by the authors on any platform. A separate domain is not by itself proof of evasion. Nor is \"0 auth hosts blocked\" an independent finding: blocking one would break that platform's Steam login, so a register assembled from working logins cannot contain a blocked auth host. The observation that carries weight is the pairing and its duration — a main domain on the Link Filter beside a login domain that has run for years. This table carries 30 rows: 25 of the 27 routes with a per-route evidence file, plus five added on 2026-09-22 whose Link Filter split is captured in <a class=\"underline\" href=\"steam_tos_assets/linkfilter-2026-09-22.json\">linkfilter-2026-09-22.json</a> even though the realm itself was hand-collected — their rows say so in the source column. The two evidence-file routes not shown are skinsnipe.com (auth host <code>pricing.tradeupspy.com</code>, registered 2020-03-11) and csgobig.com (auth host <code>letmeinbig.com</code>, registered 2023-01-20); both returned BLOCKED main / CLEAN auth host in the check of 2026-09-22, recorded with SHA-256 in <a class=\"underline\" href=\"steam_tos_assets/linkfilter-2026-09-22c.json\">linkfilter-2026-09-22c.json</a>, but the raw HTML for that batch is not in the published set, so they are named here rather than given a row that every other line in this table can evidence. The remaining 12 hand-collected routes in the register are identified as such in <a class=\"underline\" href=\"steam_tos_assets/master_registry.json\">master_registry.json</a> under <code>realm_src: user</code>.</p>\n</div>\n<div class=\"bg-gray-950 border border-gray-700 rounded-lg p-6 my-8\" id=\"linkfilter-coverage\">\n<span class=\"kicker\">Primary Empirical Audit · Multi-Year Date Range</span>\n<h3 class=\"text-xl font-bold text-white mt-2 mb-3\">The Big Picture Trap: Link Filter is Compliance Theater, Not a Shield</h3>\n<p class=\"text-sm text-gray-300 leading-relaxed mb-4\">On desktop browsers, users are shielded by external defenses: Google Safe Browsing and Microsoft SmartScreen intercept known phishing with full-screen red warnings. <strong class=\"text-white\">Inside Steam's Big Picture mode, the in-game overlay (Shift+Tab), and the Steam Deck (SteamOS), those defenses do not exist.</strong> The embedded browser supports zero extensions, disables external Safe Browsing engines, and leaves the user with exactly one defensive barrier: Valve's <code>linkfilter</code> interstitial.</p>\n<p class=\"dossier-cohort-hint\">Swipe to compare all four results →</p>\n<div class=\"grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-4 gap-3 mb-6 dossier-cohort-stats\" role=\"group\" aria-label=\"Four Link Filter audit results, in a horizontal row\" tabindex=\"0\">\n<div class=\"bg-black/40 border border-red-800/50 rounded p-4 text-center\"><div class=\"text-3xl font-black text-red-400 font-mono\">92.5%</div><div class=\"text-[11px] text-gray-400 mt-1\">2025–2026 modern edge phishing <strong class=\"text-gray-200\">passed clean</strong> (37/40)</div></div>\n<div class=\"bg-black/40 border border-red-800/50 rounded p-4 text-center\"><div class=\"text-3xl font-black text-red-400 font-mono\">77.5%</div><div class=\"text-[11px] text-gray-400 mt-1\">2023–2024 CS2 era phishing <strong class=\"text-gray-200\">passed clean</strong> (31/40)</div></div>\n<div class=\"bg-black/40 border border-amber-800/50 rounded p-4 text-center\"><div class=\"text-3xl font-black text-amber-400 font-mono\">70.0%</div><div class=\"text-[11px] text-gray-400 mt-1\">2021–2022 legacy phishing <strong class=\"text-gray-200\">passed clean</strong> (28/40)</div></div>\n<div class=\"bg-black/40 border border-emerald-800/50 rounded p-4 text-center\"><div class=\"text-3xl font-black text-emerald-400 font-mono\">7 / 7</div><div class=\"text-[11px] text-gray-400 mt-1\">gambling mains blocked (positive control)</div></div>\n</div>\n<div class=\"bg-black/50 border border-gray-800 rounded p-5 space-y-3 mb-4\">\n<div class=\"text-xs font-mono text-cyan-400 uppercase tracking-widest font-bold\">Multi-Year Longitudinal Audit: 120 Pure Steam Phishing Domains Tested Live (24 Sep 2026)</div>\n<p class=\"text-xs text-gray-300 leading-relaxed\">To test whether Valve's filter is simply slow to ingest new threats or fundamentally blind to them, we audited <strong>120 confirmed Steam-specific phishing domains</strong> across three historical cohorts against <code>steamcommunity.com/linkfilter</code>:</p>\n<ul class=\"text-xs text-gray-400 space-y-2 list-disc list-inside font-mono\">\n<li><strong class=\"text-gray-200\">Cohort 1: 2021–2022 (Classic Trade-Offer &amp; Item Drops) — 70.0% Clean Pass (28/40).</strong> Even 4 to 5 years after being cataloged by community watchdogs, 7 out of 10 legacy phishing hosts still open without any block.</li>\n<li><strong class=\"text-gray-200\">Cohort 2: 2023–2024 (CS2 Beta Hype &amp; Fake Support Appeals) — 77.5% Clean Pass (31/40).</strong> Campaigns impersonating Counter-Strike 2 releases and fake community appeals (e.g. <code>cs2-steam.com</code>, <code>appealsteamcommunity.help</code>) pass straight through.</li>\n<li><strong class=\"text-gray-200\">Cohort 3: 2025–2026 (Serverless Edge Deploys &amp; Favicon Clones) — 92.5% Clean Pass (37/40).</strong> Modern phishing kits deploying on EdgeOne, Vercel, and Cloudflare Pages (e.g. <code>steamgifter.online</code>, <code>steam-dp4lt5b8fnez.edgeone.dev</code>) pass virtually unobstructed.</li>\n</ul>\n</div>\n<div class=\"space-y-3 text-sm text-gray-300 leading-relaxed mb-4\">\n<p><strong class=\"text-white\">Telemetry &amp; Liability Shield, Not Protection.</strong> Why does the Link Filter exist if it passes 70% to 92.5% of pure Steam phishing? It functions as a corporate liability disclaimer and an outbound click telemetry sensor. By presenting a polite <em>\"You are leaving Steam\"</em> notice with a clickable green proceed button, Valve shifts legal blame onto the victim under the Steam Subscriber Agreement (*\"the user voluntarily navigated outside Steam\"*). Valve collects the telemetry of the click, but does not block the theft.</p>\n<p><strong class=\"text-white\">The Favicon Hash Proof: Zero Ingestion of Threat Feeds.</strong> Independent threat intelligence platforms (urlscan.io, Shodan, Censys) identify live Steam phishing kits using a simple search for Steam's official favicon hash (<code class=\"text-cyan-300\">page.favicon.hash:9f890a9debcdfccc339149a7943be9aff9e4c9203c2fa37d5671a5b2c88503ad NOT domain:*.steampowered.com</code>). This basic automated check surfaces active phishing clusters in seconds. Valve does not sync with external feeds, does not run hash-based threat hunting, and only manually intervenes when compelled by regulators (the 2016 WSGC gambling order) or to protect its trademarked domain strings.</p>\n</div>\n<p class=\"text-[11px] text-gray-400 leading-relaxed border-t border-gray-800 pt-3\"><strong class=\"text-gray-400\">Primary audit evidence artifacts:</strong> Longitudinal 120-domain multi-year audit: <a class=\"underline text-gray-400\" href=\"steam_tos_assets/longitudinal-steam-phishing-audit.json\">longitudinal-steam-phishing-audit.json</a> · 100 dedicated Steam phishing sample: <a class=\"underline text-gray-400\" href=\"steam_tos_assets/linkfilter-steam-phishing-100.json\">linkfilter-steam-phishing-100.json</a> · Broad feed audit (n=250): <a class=\"underline text-gray-400\" href=\"steam_tos_assets/linkfilter-coverage-2026-09-22.json\">linkfilter-coverage-2026-09-22.json</a>.</p>\n</div>\n<div class=\"bg-gray-950 border border-gray-700 rounded-lg p-6 grid grid-cols-1 lg:grid-cols-2 gap-6 items-start\">\n<div class=\"space-y-3\">\n<span class=\"kicker\">CSGOEmpire — batch registration of ten numbered auth domains</span>\n<p class=\"text-xs text-gray-400 leading-relaxed\">On <strong class=\"text-white\">2020-07-20</strong> ten numbered domains, <code class=\"text-amber-300\">csgoempirelogin1.com</code> through <code class=\"text-amber-300\">csgoempirelogin10.com</code>, were registered. Verisign RDAP timestamps are on file for all ten: login1 05:49:06Z, login5 05:49:08Z, login2 05:49:11Z, login3 05:49:14Z, login4 05:49:17Z, login6 05:49:20Z, login7 05:49:23Z, login8 05:49:26Z, login9 05:49:28Z — <strong>nine domains in 22 seconds</strong> — and login10 at 05:56:03Z, seven minutes later. The spacing is consistent with a single registrar bulk operation.</p>\n<p class=\"text-xs text-gray-400 leading-relaxed\">The pattern is consistent with pre-provisioned fallback hosts; only <code class=\"text-cyan-300\">login4</code> has been observed in a live OpenID request. csgoempire.com and csgoempirelogin4.com both returned CLEAN in the Link Filter on 2026-09-21; CSGOEmpire was not among the sites named in press reports of the July 2016 notices.</p>\n</div>\n<div class=\"bg-black rounded-xl border border-gray-800 p-4 font-mono text-[11px] space-y-1 overflow-x-auto\">\n<div class=\"text-gray-400 mb-2\"># DNS — all 10 active (September 2026)</div>\n<div><span class=\"text-green-400\">OK</span> <span class=\"text-cyan-300\">csgoempirelogin1.com</span> <span class=\"text-gray-400\">172.67.129.43</span></div>\n<div><span class=\"text-green-400\">OK</span> <span class=\"text-cyan-300\">csgoempirelogin2.com</span> <span class=\"text-gray-400\">172.67.175.168</span></div>\n<div><span class=\"text-green-400\">OK</span> <span class=\"text-cyan-300\">csgoempirelogin3.com</span> <span class=\"text-gray-400\">188.114.96.3</span></div>\n<div class=\"bg-amber-950/30 border-l-2 border-amber-500 pl-1\"><span class=\"text-green-400\">OK</span> <span class=\"text-amber-300\">csgoempirelogin4.com</span> <span class=\"text-gray-400\">188.114.96.11</span> <span class=\"text-amber-400\">← in OpenID traffic</span></div>\n<div><span class=\"text-green-400\">OK</span> <span class=\"text-cyan-300\">csgoempirelogin5.com</span> <span class=\"text-gray-400\">172.67.160.194</span></div>\n<div><span class=\"text-green-400\">OK</span> <span class=\"text-cyan-300\">csgoempirelogin6–10.com</span> <span class=\"text-gray-400\">Cloudflare IPs</span></div>\n<div class=\"text-gray-400 mt-1\">NXDOMAIN: csgoempirelogin11.com</div>\n<div class=\"text-xs text-gray-400 mt-2\">All 10 registered 2020-07-20; all 10 RDAP-timestamped (steam_tos_assets/domain-registry/csgoempireloginN.com.rdap.json)</div>\n</div>\n</div>\n<div class=\"bg-gray-950 border border-gray-700 rounded-lg p-6 grid grid-cols-1 lg:grid-cols-3 gap-6 items-center\">\n<div class=\"lg:col-span-2 space-y-3\">\n<span class=\"kicker\">Conclusion for regulators</span>\n<h3 class=\"text-xl font-black text-white\">A blocked main domain paired with an unblocked auth host leaves the login route open — and it stays open for years.</h3>\n<p class=\"text-xs text-gray-400 leading-relaxed\">The Link Filter block on the main domain is a verifiable, public record. The auth host carries the \"Sign in with Steam\" traffic and appears in Valve's own OpenID request parameters. Across checks on 2026-09-21 and 2026-09-22, in 26 filter-split pairs the main domain returned a Link Filter block while the proxy carrying its login returned none. The register above measures the other half of that: these hosts are not short-lived burner domains. Several had been registered for more than a decade at the date of the check, and every one of those days is a day on which Valve received the hostname in its own request parameters. Valve has published no per-operator enforcement record, so whether any other measure was applied to these hosts cannot be established from public data.</p>\n</div>\n<div class=\"text-center p-4 bg-black/30 border border-gray-700 rounded\">\n<div class=\"text-5xl font-black text-red-400 font-mono\" data-verified=\"2026-09-22\">12 yr 6 mo</div>\n<div class=\"text-xs text-gray-400 mt-2 font-medium\">csgogem.com is blocked in the Link Filter.<br/>Its login host <code>api.csgem.com</code> has been<br/>registered since 2014-03-08 and is not.</div>\n</div>\n</div>\n</div>\n<section class=\"dossier-note rr-method\">\n<div class=\"dossier-note-title ds-4bf28dd8eede\">Plain Language Summary — For Regulators &amp; Courts (expand)</div>\n<div class=\"bg-gray-950 border border-gray-700 rounded-lg p-8 space-y-6 mt-4\">\n<div class=\"space-y-6\">\n<div class=\"flex items-center gap-3 border-b border-gray-800 pb-4\">\n<span class=\"kicker ds-ab79ea2b8573\">Plain language summary — for regulators</span>\n</div>\n<div class=\"space-y-2\">\n<h3 class=\"text-lg font-bold text-white\">Background: What Steam Is and Why It Matters Here</h3>\n<p class=\"text-sm text-gray-300 leading-relaxed\">\n          Steam is a software platform operated by Valve Corporation (Bellevue, Washington, USA).\n          Steam functions as a digital identity provider: gambling and gaming websites across the internet use a system called \"Sign in with Steam\" — a button that allows a website to verify that a visitor has a real Steam account.\n          This is similar to \"Sign in with Google\" or a government-issued identity card check: the website sends the user to Steam's servers, Steam confirms who they are, and Steam sends them back to the website.\n          <strong class=\"text-white\">Valve operates the authentication system. Every single login through \"Sign in with Steam\" passes through Valve's own servers.</strong>\n</p>\n</div>\n<div class=\"space-y-2\">\n<h3 class=\"text-lg font-bold text-white\">What Valve Did: The Domain Block</h3>\n<p class=\"text-sm text-gray-300 leading-relaxed\">\n          In July 2016, following media and legal pressure over skin gambling, Valve's counsel sent notices to approximately 23 named gambling sites (per press reports of 21 July 2016); in October 2016 Valve told the Washington State Gambling Commission it had contacted more than forty sites. Some gambling domains appear in the <strong class=\"text-white\">Steam Link Filter</strong> — a list that makes any link to them posted inside Steam (in chat, on a profile page, in the store) show a warning page: <em>\"Link Blocked!\"</em>\n          The Link Filter is the only enforcement measure whose effect can be observed from outside Valve.\n        </p>\n<div class=\"bg-red-950/20 border border-red-800/30 rounded p-4 text-sm text-gray-300 leading-relaxed\">\n<strong class=\"text-red-400\">Example:</strong> A link to <code class=\"text-red-300\">rollbit.com</code> inside Steam produces the Link Filter warning page (checked 2026-09-19 and 2026-09-21).\n          On paper, the gambling site is blocked.\n        </div>\n</div>\n<div class=\"space-y-2\">\n<h3 class=\"text-lg font-bold text-white\">What a Proxy Domain Is</h3>\n<p class=\"text-sm text-gray-300 leading-relaxed\">\n          A <strong class=\"text-white\">separate-domain auth host is an authentication proxy</strong>: a second website address, on a different registrable domain, that the same operator puts between its users and Steam for the sole purpose of carrying the \"Sign in with Steam\" step. It proxies the login. The user believes they are signing in to the platform; the request that reaches Valve carries the proxy's hostname, not the platform's.\n          It usually has no publicly visible connection to the gambling site, and it is the address that receives users back after Steam confirms their identity.\n        </p>\n<div class=\"bg-amber-950/20 border border-amber-800/30 rounded p-4 text-sm text-gray-300 leading-relaxed\">\n<strong class=\"text-amber-400\">Example:</strong> Rollbit operates under <code class=\"text-amber-300\">rollbit.com</code>, which the Link Filter blocks.\n          For Steam authentication, the flow observed on 2026-09-20 used a separate address: <code class=\"text-amber-300\">rbsnin.com</code>, registered 2026-09-18.\n          This address returned <strong class=\"text-white\">no Link Filter block</strong> on 2026-09-21.\n          The gambling site continued to operate, and its Steam login flow ran through the unblocked host.\n        </div>\n</div>\n<div class=\"space-y-4\">\n<h3 class=\"text-lg font-bold text-white\">The Critical Point: The Auth Host Is Sent to Steam in Every Request</h3>\n<p class=\"text-sm text-gray-300 leading-relaxed\">\n          Valve does not need to scan or crawl to learn which auth hosts are in use. Steam is the <strong class=\"text-white\">OpenID identity provider</strong> for these sites, and every \"Sign in with Steam\" click sends a GET request to Valve's own servers containing the auth hostname in plaintext.\n          Under OpenID 2.0 §9.1 the <code>return_to</code> field is formally optional, but without it Steam cannot deliver the login result, so for a working Steam login it is effectively required. Steam itself renders the hostname on the login page (\"<em>&lt;host&gt; is not affiliated with Steam or Valve</em>\").\n</p>\n<div class=\"bg-gray-900 border border-gray-700 rounded-xl p-4 font-mono text-xs text-gray-300 space-y-2\">\n<div class=\"text-gray-400 border-b border-gray-800 pb-2\">— Shape of the request Steam receives (host as observed for Rollbit on 2026-09-20): —</div>\n<div><span class=\"text-blue-400\">GET</span> steamcommunity.com/openid/login</div>\n<div class=\"pl-4\"><span class=\"text-gray-400\">&amp;openid.mode=</span>checkid_setup</div>\n<div class=\"pl-4 bg-amber-950/30 border-l-2 border-amber-500 py-0.5\"><span class=\"text-gray-400\">&amp;openid.return_to=</span><span class=\"text-amber-300 break-all\">https://rbsnin.com/…</span> <span class=\"text-amber-400\">← effectively required; arrives in Valve's log</span></div>\n<div class=\"pl-4 bg-amber-950/30 border-l-2 border-amber-500 py-0.5\"><span class=\"text-gray-400\">&amp;openid.realm=</span><span class=\"text-amber-300 break-all\">https://rbsnin.com</span> <span class=\"text-amber-400\">← self-declared by the site; rendered on Steam's login page</span></div>\n<div class=\"text-gray-400 pt-1 text-xs\">If the site uses server-to-server verification (check_authentication), Valve's log also records the platform's server IP and hosting network.</div>\n</div>\n<p class=\"text-sm text-gray-300 leading-relaxed\">\n          Extracting the hostname from this request is a standard operation. The enforcement record — which hosts were acted on, which were not, and under what criteria — exists only in Valve's infrastructure and has not been published.\n        </p>\n</div>\n<div class=\"bg-black/30 border border-gray-700 rounded p-5 space-y-3\">\n<h3 class=\"text-lg font-bold text-white\">What This Proves</h3>\n<div class=\"space-y-2 text-sm text-gray-300 leading-relaxed\">\n<p><strong class=\"text-red-400\">1. The Link Filter block acts on links, not on logins.</strong>\n          Blocking the main domain (for example <code class=\"text-gray-400\">rollbit.com</code>) shows a warning to users who click links to it inside Steam.\n          It does not stop the site from operating, or from using Valve's own OpenID service through a different address.</p>\n<p><strong class=\"text-red-400\">2. The auth hosts tested were not blocked.</strong>\n          The table above shows separate-domain auth hosts registered between 2011 and September 2026, several of them years after the July 2016 notices. In 26 pairs the main domain returned a Link Filter block and the proxy carrying its login did not (unauthenticated checks, 2026-09-21 and 2026-09-22; raw responses and SHA-256 saved). That proxy would stop working the day Valve refused it, which is why the measure here is how long it has run, not whether it is listed.\n          Valve receives these hostnames in its own OpenID requests. Whether any measure other than the Link Filter was applied cannot be determined from public data, because Valve has published no per-operator enforcement record.</p>\n<p><strong class=\"text-red-400\">3. The sites continued to authenticate through Valve's infrastructure.</strong>\n          \"Sign in with Steam\" is Valve's service; every authentication through it is a request Valve receives and processes.\n          Valve also earns revenue from case keys, and the Steam Community Market charges a combined fee of about 15% on transactions completed inside the Market (not on external trades).\n          The Link Filter action created a public record; it did not interrupt the authentication relationship.</p>\n</div>\n</div>\n<div class=\"rotation-feasibility-panel bg-gray-950 border border-gray-700 rounded-xl p-5 space-y-3\">\n<div class=\"rotation-panel-title text-xs font-mono text-gray-400 uppercase tracking-wider font-bold\">Would Blocking Have Worked?</div>\n<div class=\"rotation-analysis-copy space-y-2 text-sm text-gray-300 leading-relaxed\">\n<p class=\"rotation-context\">By analogy: when the free domain registrar Freenom wound down in 2023, phishing campaigns that depended on its domains were disrupted. Operational continuity depends on infrastructure stability.</p>\n<p class=\"rotation-downtime\">The same logic applies here. If an auth host were refused in Steam's OpenID processing, the platform's \"Sign in with Steam\" function would break until a new host is registered, certificates issued and DNS propagated. During that window: downtime.</p>\n<p class=\"rotation-cost\"><strong class=\"text-white\">Rotation does not make blocking futile.</strong> It makes blocking an operational cost. Since new hosts appear in Valve's own request logs on first use, a response could run at the speed of that first use.</p>\n<p class=\"rotation-batch\"><strong class=\"text-white\">Batch registration is itself a signal:</strong> CSGOEmpire's login1–login10 were registered on 2020-07-20, nine of them within 22 seconds (Verisign RDAP). A response does not need to be domain-by-domain; a sequential series from one registrar session can be identified as a series.</p>\n<div class=\"rotation-verdict bg-red-950/20 border border-red-800/30 rounded p-3 text-[11px] font-mono text-red-300\">\n            The public record does not show an attempt to block auth hosts that was defeated by rotation.<br/>\n            It shows main domains blocked while the proxy carrying each login kept running — 26 pairs as of 2026-09-22, the oldest auth host registered 12 years 6 months — and no published enforcement record for any operator.<br/>\n            The question for the regulator is therefore: what enforcement, if any, has Valve applied to the auth hosts it receives in its own OpenID requests?\n          </div>\n</div>\n</div>\n<div class=\"valve-action-exhibit space-y-4\">\n<div class=\"valve-action-kicker text-xs font-mono text-amber-400 uppercase tracking-widest font-bold\">What Valve Did — and Why It Did Not Interrupt the Auth Path</div>\n<p class=\"valve-action-intro text-sm text-gray-400 leading-relaxed\">The table below maps each publicly documented Valve action against whether it affected the OpenID authentication entry point. The finding is not \"Valve did nothing\" — it is that none of the publicly documented actions touched the point where gambling-platform logins pass through Valve's servers.</p>\n<figure class=\"evidence-figure valve-action-table\">\n<div class=\"overflow-x-auto rounded border border-gray-800\">\n<table class=\"w-full text-xs font-mono\">\n<thead><tr class=\"bg-gray-900 border-b border-gray-800\">\n<th class=\"timeline-date-heading text-left px-4 py-2 text-gray-400\">Date</th>\n<th class=\"valve-action-column text-left px-4 py-2 text-gray-400\">Valve Action</th>\n<th class=\"path-impact-column text-left px-4 py-2 text-gray-400\">Affected <code>openid.return_to</code> path?</th>\n</tr></thead>\n<tbody class=\"divide-y divide-gray-900\">\n<tr class=\"hover:bg-gray-900/30\">\n<td class=\"timeline-date-cell px-4 py-2 text-gray-400 whitespace-nowrap\">July 2016</td>\n<td class=\"valve-action-detail px-4 py-2 text-gray-300\">Public statement of 13 July 2016; counsel's notices to ~23 named sites (press, 21 July 2016); &gt;40 sites contacted per Valve's October 2016 letter to WSGC</td>\n<td class=\"path-impact-cell px-4 py-2 text-red-400\">No. Notices and the Link Filter act on operators and links; the OpenID request path was not changed.</td>\n</tr>\n<tr class=\"legacy-action-row hover:bg-gray-900/30\">\n<td class=\"timeline-date-cell px-4 py-2 text-gray-400 whitespace-nowrap\">2017</td>\n<td class=\"legacy-action-detail px-4 py-2 text-gray-300\">Closure of <code>IEconItems_730/GetPlayerItems</code> (according to CSFloat's engineering account; no Valve changelog located)</td>\n<td class=\"path-impact-cell legacy-no-impact px-4 py-2 text-red-400\">No. Affected public item-history visibility. OpenID authentication was not modified.</td>\n</tr>\n<tr class=\"hover:bg-gray-900/30\">\n<td class=\"timeline-date-cell px-4 py-2 text-gray-400 whitespace-nowrap\">2018-03-29</td>\n<td class=\"valve-action-detail px-4 py-2 text-gray-300\">CS:GO 7-day trade lock announced (blog.counter-strike.net)</td>\n<td class=\"path-impact-cell px-4 py-2 text-red-400\">No. Slowed item movement; the OpenID request path was not changed.</td>\n</tr>\n<tr class=\"hover:bg-gray-900/30\">\n<td class=\"timeline-date-cell px-4 py-2 text-gray-400 whitespace-nowrap\">2022-05-10</td>\n<td class=\"valve-action-detail px-4 py-2 text-gray-300\">Trade-cancellation endpoints removed from the public Web API (user-detected; no Valve changelog — node-steam-tradeoffer-manager #325)</td>\n<td class=\"path-impact-cell px-4 py-2 text-red-400\">No. Closed the offer-swap tooling; OpenID authentication was not modified.</td>\n</tr>\n<tr class=\"hover:bg-gray-900/30\">\n<td class=\"timeline-date-cell px-4 py-2 text-gray-400 whitespace-nowrap\">2023-12-04</td>\n<td class=\"valve-action-detail px-4 py-2 text-gray-300\">API-key creation now requires mobile confirmation (steamcommunity.com/dev/apikey; no changelog)</td>\n<td class=\"path-impact-cell px-4 py-2 text-red-400\">No. Protected the key endpoint; the auth hosts documented here were not affected.</td>\n</tr>\n<tr class=\"hover:bg-gray-900/30 bg-red-950/10\">\n<td class=\"timeline-date-cell px-4 py-2 text-gray-400 whitespace-nowrap\">2026-09-19 / 09-21</td>\n<td class=\"current-filter-action px-4 py-2 text-gray-300\">Steam Link Filter state as observed by the authors</td>\n<td class=\"path-impact-cell px-4 py-2 text-red-400 font-bold\">No. 14 main domains returned a block in the saved 2026-09-21 recheck — 26 split pairs in the register by 2026-09-22 — while the proxy carrying each login kept running.</td>\n</tr>\n</tbody>\n</table>\n</div>\n<figcaption class=\"evidence-caption route-source-strip\">Sources: Valve statement of 13 July 2016 (<a href=\"https://store.steampowered.com/oldnews/22883\" rel=\"noopener noreferrer\" target=\"_blank\">store.steampowered.com/oldnews/22883</a>, <a href=\"https://web.archive.org/web/20260921021947/https://store.steampowered.com/oldnews/22883\" rel=\"noopener noreferrer\" target=\"_blank\">archived 2026-09-21</a>) · CSFloat engineering account of the 2017 closure (<a href=\"https://blog.csfloat.com/how-floatdb-tracks-items/\" rel=\"noopener noreferrer\" target=\"_blank\">blog.csfloat.com</a>, <a href=\"https://web.archive.org/web/20260921022415/https://blog.csfloat.com/how-floatdb-tracks-items/\" rel=\"noopener noreferrer\" target=\"_blank\">archived 2026-09-21</a>) · Link Filter state: <a href=\"steam_tos_assets/linkfilter-recheck-2026-09-21.json\">linkfilter-recheck-2026-09-21.json</a>.</figcaption>\n</figure>\n<div class=\"route-falsifier bg-amber-950/20 border border-amber-800/30 rounded p-3 text-[11px] font-mono text-amber-300\">\n          This finding is falsifiable by a single published instance in which Valve refused an OpenID request because <code>openid.return_to</code> pointed to a gambling auth host. No such instance has been located in the public record.\n        </div>\n</div>\n<div class=\"route-registrations bg-black/30 border border-gray-700 rounded p-5 space-y-3\">\n<div class=\"kicker ds-ab79ea2b8573\">The two most recent auth-host registrations</div>\n<div class=\"route-registration-grid bg-red-950/30 border border-red-700/30 rounded p-3 text-[11px] font-mono text-red-300\">\n<div class=\"route-registration-item\"><strong>howl.uno</strong><span> was registered 2026-08-11 (RDAP), 41 days before 2026-09-21; howl.gg returned a Link Filter block on 2026-09-18, 2026-09-19 and 2026-09-21. Whether the block preceded the registration is not established.</span></div>\n<div class=\"route-registration-item\"><strong>rbsnin.com</strong><span> was registered 2026-09-18T09:34:52Z (Verisign RDAP) and was observed in Rollbit's Steam login flow on 2026-09-20 via Steam's own login-page notice; rollbit.com returned a Link Filter block on 2026-09-19 and 2026-09-21, rbsnin.com did not.</span></div>\n<div class=\"route-registration-foot\">Each host in the table above is sent to Valve's authentication servers as <code>openid.realm</code> on every login attempt.</div>\n</div>\n<div class=\"text-xs text-gray-400\">Full per-route data and Link Filter verdicts: the table in Section 3 above; raw results in <a class=\"text-gray-400 hover:text-gray-400\" href=\"steam_tos_assets/linkfilter-recheck-2026-09-21.json\">linkfilter-recheck-2026-09-21.json</a> and <a class=\"text-gray-400 hover:text-gray-400\" href=\"steam_tos_assets/linkfilter-all-results.json\">linkfilter-all-results.json</a>.</div>\n</div>\n<div class=\"bg-gray-950 border border-gray-700 rounded-xl p-5 space-y-3\">\n<div class=\"text-xs font-mono text-gray-400 uppercase tracking-wider font-bold\">Methodology — How the Route and Link Filter Counts Were Established</div>\n<div class=\"grid grid-cols-1 md:grid-cols-3 gap-3 text-xs font-mono text-gray-400\">\n<div class=\"space-y-1\"><div class=\"text-gray-300 font-bold\">1. Domain resolution</div><div>The 2026-09-21 audit resolved 78 of 189 requested platforms: <strong class=\"text-gray-200\">33 authenticate on their own hostname and 20 on their own subdomain — direct authentication, and none of them are counted as separate-domain routes.</strong> The remaining <strong class=\"text-gray-200\">25 authenticate through a separate registrable domain</strong>, across 24 distinct hostnames (dota2.net is shared by market.csgo.com and rust.tm): 10 established by live browser capture, 3 by Steam's own login-page notice, 12 by a supplied OpenID URL. The live register (<a class=\"text-gray-300 underline\" href=\"steam_tos_assets/master_registry.json\">master_registry.json</a>, 2026-09-22) extends that to <strong class=\"text-gray-200\">44 separate-domain routes</strong>: 26 filter-split pairs (main domain BLOCKED, auth host CLEAN) plus 18 further routes without a main-domain split. Of the 44, <strong class=\"text-gray-200\">27 carry a per-route evidence file</strong>; the other 17 were collected by hand and are marked <code>realm_src: user</code> in the register. Five of those seventeen — csgogem.com, gamdom.com, 12cs.fail, csgolounge.com and dota2lounge.com — were added on 2026-09-22 with a Link Filter capture of both hosts (raw HTML + SHA-256 in <a class=\"text-gray-300 underline\" href=\"steam_tos_assets/linkfilter-2026-09-22.json\">linkfilter-2026-09-22.json</a>), so the split itself is evidenced even though the realm is hand-collected; they appear in the table above alongside the evidence-file routes. <code>tfauth.com</code> (tf2easy.com) was dropped from the register on 2026-09-22: like arena.fragnet.net, nothing verifiable links it to its origin site. The count is re-derivable from the published <a class=\"text-gray-300 underline\" href=\"steam_tos_assets/auth-route-audit.json\">auth-route-audit.json</a> (run of 2026-09-21) by one rule: a platform counts only when its observed Steam OpenID host sits on a different registrable domain than the platform itself.</div></div>\n<div class=\"space-y-1\"><div class=\"text-gray-300 font-bold\">2. Steam Link Filter status</div><div>Tested via <code>steamcommunity.com/linkfilter/?url=https://[domain]</code>, unauthenticated, on 2026-09-19 and 2026-09-21; raw HTML saved with SHA-256. Status recorded for main domain and auth host separately. A classifier distinguishes the generic \"You are leaving Steam\" notice (CLEAN) from the \"Link Blocked! ... flagged as potentially malicious\" page (BLOCKED); a google.com control confirms the two are not conflated. An earlier authenticated variant of this test was discarded after it returned \"blocked\" for every domain including that control — traced to an invalid session cookie in the probe script, not a real result.</div></div>\n<div class=\"space-y-1\"><div class=\"text-gray-300 font-bold\">3. Observation of the auth host</div><div>Live capture: a Playwright browser navigated to each platform's login flow and the <code>openid.return_to</code> hostname was read from the intercepted request. Login-page notice: the hostname was read from Steam's own \"<em>&lt;host&gt; is not affiliated with Steam or Valve</em>\" text, which Steam renders from <code>openid.realm</code> (rbsnin.com, sc-auth.net, auth.dota.trade). Supplied URL: a Steam loginform URL provided to the authors; this establishes the request parameters, not a completed login. No login was completed on any platform.</div></div>\n</div>\n<div class=\"border-t border-gray-800 pt-3 space-y-2\">\n<div class=\"text-xs font-mono text-amber-400 uppercase tracking-wider font-bold\">4. Coverage — what was not resolved, and why that matters</div>\n<div class=\"text-xs font-mono text-gray-400 leading-relaxed\">\n            Of the 189 platforms, <strong class=\"text-gray-200\">110 produced no established route</strong> and one was not applicable (189 − 78 − 1). This dossier counts none of them. The breakdown of the 110, from the audit file: 22 bot challenges, 14 timeouts, 12 HTTP errors and 10 navigation errors — the observer could not reach the login flow, though most of these sites open normally in an ordinary browser; 20 showed no Steam login control on the landing page; 16 reached a login flow that could not be resolved to a host; 11 domains did not resolve in DNS; 5 stopped at a consent wall. The register below splits the same 110 differently: the 11 that did not resolve in DNS are listed separately as <em>Removed · NXDOMAIN</em>, and the one not-applicable entry joins the rest. 189 platforms audited, 11 removed on a definitive NXDOMAIN from both resolvers, <strong class=\"text-gray-200\">178 retained</strong> (<a class=\"text-gray-300 underline\" href=\"steam_tos_assets/platform-audit.json\">platform-audit.json</a>, <a class=\"text-gray-300 underline\" href=\"steam_tos_assets/platforms-removed.json\">platforms-removed.json</a>).\n            <strong class=\"text-gray-200\">137 auth domains that the ledger had guessed by naming pattern were deleted from the data on 2026-09-19 — never observed, therefore never evidence.</strong> Three of the guesses were contradicted by supplied OpenID URLs: buff.163.com, gamerpay.gg and csgoluck.com authenticate directly, against guesses of buffauthproxy.163.com, gamerpayredirect.io and lucklogin.app. The removals are listed in the published audit file.\n          </div>\n<div class=\"text-xs font-mono text-gray-400 leading-relaxed\">\n            The 25 is a floor, not a ceiling. Among the 78 platforms that did resolve, 25 used a separate domain and 53 did not. Nothing about the unresolved 110 is assumed from that ratio, and no projection from it appears anywhere in this dossier. Each one is resolvable by a person opening the site and pressing \"Sign in with Steam\": the auth hostname is in the URL of the Steam page that loads.\n          </div>\n<div class=\"bg-black/30 border border-gray-700 rounded p-3 text-xs font-mono text-gray-300 leading-relaxed\">\n<strong class=\"text-white\">The point of this section:</strong> an independent observer needs a browser and a lot of patience to resolve 189 platforms, and got 78. Valve needs a database query. Every platform that uses \"Sign in with Steam\" — resolved and unresolved alike — sends <code>openid.realm</code> to Valve's authentication endpoint on every login. The gap in this table exists because the authors are outside the system. It does not exist for Valve.\n          </div>\n</div>\n<div class=\"text-xs text-gray-400\">Observed proxy hostnames are in <a class=\"text-gray-400 hover:text-gray-400\" href=\"steam_tos_assets/auth-route-audit.json\">auth-route-audit.json</a>. Domain registration dates from RDAP (Verisign) / IP2WHOIS. Link Filter results in <a class=\"text-gray-400 hover:text-gray-400\" href=\"steam_tos_assets/linkfilter-all-results.json\">linkfilter-all-results.json</a>.</div>\n</div>\n<div class=\"bg-gray-900 border border-gray-700 rounded-xl p-5 space-y-2\">\n<div class=\"text-xs font-mono text-gray-400 uppercase tracking-wider font-bold\">Analogy for clarity</div>\n<p class=\"text-sm text-gray-300 leading-relaxed\">\n          Imagine a licensed taxi company is told by regulators that it may no longer operate from its registered Main Street address.\n          The company removes the sign from Main Street. That sign removal is documented.\n          However, the same company opens a Side Street address — registered under a different name — and continues operating from there.\n          The regulators operate the central dispatch system that every taxi from both addresses uses. Every ride request shows \"pick up from Side Street.\"\n          The regulators never revoke the Side Street licence.\n          <strong class=\"text-white\">The removal of the Main Street sign is the only enforcement that occurred. The taxi company never stopped operating.</strong>\n</p>\n</div>\n</div>\n</div>\n</section>\n<article class=\"cef-exhibit\" id=\"inside-steam-filter\">\n<div class=\"section-head ds-992b7d83bdd9\">\n<span class=\"kicker\">Part A — Technical record · Section 3.1</span>\n<h3>Inside Steam, Valve's list is the only list.</h3>\n<p class=\"lede\">A link clicked in the Steam client, the in-game overlay or Big Picture mode does not open in the user's browser. It renders inside Steam's own embedded browser — where the warning layers a browser would apply are not present. <strong>The Link Filter is not one safeguard among several. It is the whole of it.</strong></p>\n</div>\n<div class=\"cef-compare\">\n<div class=\"cef-col\" data-side=\"browser\">\n<div class=\"cef-col-head\"><b>In a normal browser</b><span>Three independent layers</span></div>\n<ol class=\"cef-layers\">\n<li><b>Google Safe Browsing</b><span>A full-page interstitial for hosts on Google's phishing and malware lists, updated continuously and independent of the site being visited.</span></li>\n<li><b>The antivirus browser extension</b><span>Most consumer endpoint products ship a browser add-on that checks the destination against the vendor's own reputation list.</span></li>\n<li><b>Endpoint HTTPS inspection</b><span>Where the product performs TLS inspection, page content is scanned before it reaches the user.</span></li>\n</ol>\n</div>\n<div class=\"cef-col\" data-side=\"steam\">\n<div class=\"cef-col-head\"><b>In the Steam client, overlay and Big Picture</b><span>One layer</span></div>\n<ol class=\"cef-layers\">\n<li data-state=\"absent\"><b>Google Safe Browsing</b><span>Not present. The check requires Google API keys that are not provisioned in embedded Chromium builds; where they are absent, Chromium's own design documentation records that the Safe Browsing handler is simply never added to the request chain.</span></li>\n<li data-state=\"absent\"><b>The antivirus browser extension</b><span>Not present. Steam's renderer is not the user's browser and loads no extension from the user's browser profile, so no add-on runs against the page.</span></li>\n<li data-state=\"partial\"><b>Endpoint HTTPS inspection</b><span>Product-dependent. The traffic terminates inside a code-signed Valve process rather than a recognised browser, and a number of endpoint products exempt signed applications from TLS inspection.</span></li>\n<li data-state=\"present\"><b>The Steam Link Filter</b><span>Valve's own blocklist, consulted when a link leaves the Steam ecosystem. This is the sole check that runs — and the table above records what it returns for the auth hosts documented in this section.</span></li>\n</ol>\n</div>\n</div>\n<div class=\"cef-test\">\n<div class=\"cef-test-head\">A test any reader can run, and the finding falls if it fails</div>\n<p>Open one of Google's published Safe Browsing test URLs (<code>testsafebrowsing.appspot.com</code>) in Chrome: a full-page red interstitial appears. Open the same URL from a Steam chat message, so that it renders in the Steam client or the overlay: no interstitial appears. The only warning Steam can produce is its own Link Filter page, and only for hosts on Valve's list.</p>\n</div>\n<div class=\"cef-bounty\">\n<div class=\"cef-bounty-head\"><span>Valve's own bug-bounty record</span><b>The one layer has been got around before — on Valve's own record</b></div>\n<p class=\"cef-bounty-lede\">If the Link Filter is the only check that runs inside the client, its own failure modes are not a side issue. Two reports on Valve's HackerOne programme, both accepted, both resolved, both since disclosed in full:</p>\n<ol class=\"cef-bounty-list\">\n<li>\n<div class=\"cef-bounty-id\"><a href=\"https://hackerone.com/reports/291750\" rel=\"noopener noreferrer\" target=\"_blank\">#291750</a> <a class=\"archived-link\" href=\"https://web.archive.org/web/20251116185046/https://hackerone.com/reports/291750\" rel=\"noopener noreferrer\" target=\"_blank\">archived 2025-11-16 ↗</a><span>Open Redirect · medium</span></div>\n<div>\n<h3 class=\"font-bold text-white text-base\">Link filter protection bypass</h3>\n<p>Reported 19 November 2017, resolved, disclosed 9 May 2018. The report's own proof of concept: substituting the ideographic full stop <code>。</code> (<code>%E3%80%82</code>) for the dot in a hostname — <q>it is possible to bypass the blocking.</q> The interstitial this section is about did not appear.</p>\n</div>\n</li>\n<li>\n<div class=\"cef-bounty-id\"><a href=\"https://hackerone.com/reports/1079561\" rel=\"noopener noreferrer\" target=\"_blank\">#1079561</a> <a class=\"archived-link\" href=\"https://web.archive.org/web/20260924181830/https://hackerone.com/reports/1079561\" rel=\"noopener noreferrer\" target=\"_blank\">archived 2026-09-24 ↗</a><span>Information Disclosure · high</span></div>\n<div>\n<h3 class=\"font-bold text-white text-base\">Big Picture web browser leaks login cookies and discloses sensitive information (may lead to account takeover)</h3>\n<p>Reported 15 January 2021, resolved, disclosed 21 September 2021. Valve's own severity rating is high, and the title states the consequence. The disclosed record carries the title, rating and dates; the technical write-up is not in the published payload, so nothing further is quoted from it here.</p>\n</div>\n</li>\n</ol>\n<p class=\"cef-bounty-read\"><b>The authors' reading, not a finding of either report:</b> the two sit on either side of the same gate. One is the warning failing to appear before the destination opens; the other is the session leaving the client once a page is open inside it. The sequence that follows a stolen session — key registered without a prompt, the real trade cancelled, a duplicate sent to a clone — is the pattern set out in <a href=\"#vulnerability-profile\">Section 5</a> to <a href=\"#consent-analysis\">Section 8</a>. Both reports are closed; neither is offered as a live vulnerability. What they establish is narrower and enough: the single remaining layer has a documented history of being got around, on Valve's own record.</p>\n<p class=\"cef-bounty-src\">Source: the HackerOne disclosure record for each report, retrieved 2026-09-22 — number, title, team, weakness, severity, report and disclosure dates and state as published by HackerOne. Retrieval record: <a href=\"steam_tos_assets/hackerone-reports.json\">hackerone-reports.json</a>. No bounty figure is stated here; none appears in the disclosed record retrieved.</p>\n</div>\n<div class=\"cef-field\">\n<div class=\"cef-field-head\"><span>Field observation · PhishDestroy</span><b>Detections that normally end a campaign did not end these</b></div>\n<p>We watched phishing hosts keep pulling traffic while carrying <strong>20 or more vendor detections</strong>. Delivered by web or email, a campaign in that state dies in days — the browser and the antivirus both act on those verdicts. Inside Steam neither does. The verdicts existed the whole time. Nothing in the client ever asked.</p>\n</div>\n<div class=\"cef-consequence\">\n<h3>What this means for a minor with an antivirus installed</h3>\n<p>He ignores no warning and disables nothing. A message arrives inside Steam — a free knife, a vote for a friend's team — and the page opens inside Steam. He never opens a browser, so the browser never protects him. His antivirus is running and may already rate that domain malicious; it is never asked. <strong>Every warning that could have stopped him already exists. None of it reaches him.</strong> He believes he never left Steam, and he did not.</p>\n<p>The giveaway is not the phisher's invention — free Valve items are how the skin and gambling sites advertise, which is exactly why the message reads as ordinary. Complaints: <a href=\"steam_enforcement_evidence#support-records\">the enforcement archive</a>. Age and children's data: <a href=\"#minors-protection\">Section 17</a>.</p>\n</div>\n<p class=\"evidence-caption\">Sources: Steam renders web content through the Chromium Embedded Framework in the <code>steamwebhelper</code> process — see <a href=\"https://www.darknavy.org/blog/exploiting_steam_usual_and_unusual_ways_in_the_cef_framework/\" rel=\"noopener noreferrer\" target=\"_blank\">DARKNAVY's technical analysis of 27 June 2024 ↗</a> and Valve's own <a href=\"https://steamcommunity.com/groups/SteamClientBeta/discussions/0/3365901765276206401/\" rel=\"noopener noreferrer\" target=\"_blank\">Steam Client Beta forum ↗</a> <a class=\"archived-link\" href=\"https://web.archive.org/web/20250804051514/https://steamcommunity.com/groups/SteamClientBeta/discussions/0/3365901765276206401/\" rel=\"noopener noreferrer\" target=\"_blank\">archived 2025-08-04 ↗</a>. No CEF version is relied on: embedded Chromium is not Chrome and ships none of Chrome's Google services. Safe Browsing without API keys: <a href=\"https://www.chromium.org/developers/design-documents/safebrowsing/\" rel=\"noopener noreferrer\" target=\"_blank\">Chromium design document ↗</a> <a class=\"archived-link\" href=\"https://web.archive.org/web/20260821101616/https://www.chromium.org/developers/design-documents/safebrowsing/\" rel=\"noopener noreferrer\" target=\"_blank\">archived 2026-08-21 ↗</a>, <a href=\"https://www.chromium.org/developers/how-tos/api-keys/\" rel=\"noopener noreferrer\" target=\"_blank\">Chromium API keys ↗</a> <a class=\"archived-link\" href=\"https://web.archive.org/web/20260830122831/https://www.chromium.org/developers/how-tos/api-keys/\" rel=\"noopener noreferrer\" target=\"_blank\">archived 2026-08-30 ↗</a> (“Many of the Google APIs used by Chrome are specific to Google and not intended for use in derived products”), and the same effect in other unkeyed builds — <a href=\"https://github.com/Homebrew/homebrew-cask/issues/193814\" rel=\"noopener noreferrer\" target=\"_blank\">Homebrew cask #193814 ↗</a>. Test URLs: <a href=\"https://testsafebrowsing.appspot.com/\" rel=\"noopener noreferrer\" target=\"_blank\">testsafebrowsing.appspot.com ↗</a>.</p>\n</article>\n<div class=\"bg-gray-950 border border-gray-700 rounded-xl p-5\" id=\"auth-proxy-longevity-section\"></div>\n<div id=\"route-register\"></div>\n<nav aria-label=\"Where the route evidence continues\" class=\"xlink\">\n<p class=\"xlink-t\">Section 3 continues on these pages</p>\n<div class=\"xlink-row\">\n<a href=\"steam_evidence_archive\"><b>Inspect the sources</b><em>The 16,319-record archive the route findings are drawn from — Trustpilot, Reddit, GitHub and Wiki captures, searchable and downloadable.</em><i>Open the archive →</i></a>\n<a href=\"steam_enforcement_evidence\"><b>Rules versus responses</b><em>Each written Valve restriction set beside the enforcement response actually recorded against it, with the source attached.</em><i>Open the enforcement record →</i></a>\n<a href=\"security_timeline\"><b>Eight years of Steam security changes</b><em>Sixteen submitted milestones checked against the source record — what changed around the login route, and when.</em><i>Open the timeline →</i></a>\n</div>\n</nav>\n</section>"
  },
  "original_content_sha256": "4b29a781b3e0bc15e524a75d4f92f6f6caa642d9afd55540ca0924906028fc54",
  "author_pseudonym": "Agent Lynn",
  "schema": "phishdestroy.macro-fact.v1",
  "language": "en",
  "aggregator": "PhishDestroy",
  "exports": {
    "pdf": "/steam_dossier/exports/agent-protocol/files/en/steam_dossier_section_3_agent_lynn.pdf",
    "json": "/steam_dossier/exports/agent-protocol/files/en/steam_dossier_section_3_agent_lynn.json",
    "signature": "/steam_dossier/exports/agent-protocol/files/en/steam_dossier_section_3_agent_lynn.json.asc"
  },
  "integrity": {
    "signed_object": "steam_dossier_section_3_agent_lynn.json",
    "signature_file": "steam_dossier_section_3_agent_lynn.json.asc",
    "signing_key_fingerprint": "129FC7F39C40C69D2EF3C329BFCF9E8DD295EE01",
    "scope": "Exact JSON bytes, including macro-fact author and corresponding PDF SHA-256. PhishDestroy is the integrity signer; original evidence attribution is unchanged."
  },
  "pdf": {
    "filename": "steam_dossier_section_3_agent_lynn.pdf",
    "sha256": "19d77042fd45376f79c235a5c987a2ed989827fee1bf5a3d7db3906a7f9ce5fb",
    "pages": 15
  }
}
