Summary
When running on the OSC platform, src/lib/sat.ts sets the Open Live Service Access Token (SAT) as a browser cookie with domain=.osaas.io. This domain scoping means every application on every *.osaas.io subdomain can read this cookie — including other tenant applications that share the platform. A malicious or compromised co-tenant application at attacker.osaas.io can access the Open Live SAT.
Combined with the existing non-HttpOnly status (the cookie is readable by JavaScript), any XSS vulnerability in any *.osaas.io application, or in Open Live Studio itself, can exfiltrate this token. A SAT grants full authenticated access to the Open Live API, including the ability to activate/deactivate productions, modify sources, and change PiP layouts — a significant operational risk for a live broadcast environment.
This is distinct from the previously filed and closed issue #22, which addressed missing JWT error handling and the HttpOnly flag directly. This issue is specifically about the overly broad cookie domain (.osaas.io vs the specific subdomain).
CVSS Score
6.1 (Medium) — CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N
Category
OWASP A02 — Cryptographic Failures / Sensitive Cookie Exposure
Affected File(s)
src/lib/sat.ts:15 — const OSC_COOKIE_DOMAIN = '.osaas.io'
src/lib/sat.ts:104-111 — document.cookie assignment using OSC_COOKIE_DOMAIN
Steps to Reproduce
- Deploy Open Live Studio on OSC (e.g., at
open-live-studio.tenant.osaas.io).
- Authenticate — the SAT cookie is set with
domain=.osaas.io.
- From any other OSC tenant application on
*.osaas.io (or via XSS anywhere on that domain), read document.cookie — the eyevinn-open-live.sat value is accessible.
- Use the exfiltrated SAT to call the Open Live REST API directly.
Remediation
- Remove the explicit domain attribute from the cookie to scope it to the current specific subdomain (browser default):
// Before:
`domain=${OSC_COOKIE_DOMAIN}`
// After: omit the domain attribute entirely — browsers default to the current document's hostname
- Preferred architectural fix: Have the OSC reverse proxy issue the SAT via a server-side
Set-Cookie response header with HttpOnly; Secure; SameSite=Strict and the exact subdomain scope. This eliminates both the broad domain scope and the JavaScript readability.
- Defence-in-depth: Validate the
Origin header on all API requests server-side to reject cross-subdomain requests even if the cookie is presented.
References
Found by automated security audit on 2026-06-22
Summary
When running on the OSC platform,
src/lib/sat.tssets the Open Live Service Access Token (SAT) as a browser cookie withdomain=.osaas.io. This domain scoping means every application on every*.osaas.iosubdomain can read this cookie — including other tenant applications that share the platform. A malicious or compromised co-tenant application atattacker.osaas.iocan access the Open Live SAT.Combined with the existing
non-HttpOnlystatus (the cookie is readable by JavaScript), any XSS vulnerability in any*.osaas.ioapplication, or in Open Live Studio itself, can exfiltrate this token. A SAT grants full authenticated access to the Open Live API, including the ability to activate/deactivate productions, modify sources, and change PiP layouts — a significant operational risk for a live broadcast environment.This is distinct from the previously filed and closed issue #22, which addressed missing JWT error handling and the HttpOnly flag directly. This issue is specifically about the overly broad cookie domain (
.osaas.iovs the specific subdomain).CVSS Score
6.1 (Medium) — CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N
Category
OWASP A02 — Cryptographic Failures / Sensitive Cookie Exposure
Affected File(s)
src/lib/sat.ts:15—const OSC_COOKIE_DOMAIN = '.osaas.io'src/lib/sat.ts:104-111—document.cookieassignment usingOSC_COOKIE_DOMAINSteps to Reproduce
open-live-studio.tenant.osaas.io).domain=.osaas.io.*.osaas.io(or via XSS anywhere on that domain), readdocument.cookie— theeyevinn-open-live.satvalue is accessible.Remediation
Set-Cookieresponse header withHttpOnly; Secure; SameSite=Strictand the exact subdomain scope. This eliminates both the broad domain scope and the JavaScript readability.Originheader on all API requests server-side to reject cross-subdomain requests even if the cookie is presented.References
domainattributeFound by automated security audit on 2026-06-22