@@ -7,32 +7,33 @@ namespace Global.AppArgs
77 /// <summary>
88 /// Deny-by-default allowlist of query params a <c>decentraland://</c> deep link may inject into app-args.
99 /// Shared by the cold-start argv path and the runtime bridge path (both funnel through
10- /// <see cref="ApplicationParametersParser.ProcessDeepLinkParameters" />).
10+ /// <see cref="ApplicationParametersParser.ProcessDeepLinkParameters(string,System.Collections.Generic.Dictionary{string,string}) " />).
1111 /// <para>
1212 /// A deep link is fully attacker-controllable — anyone can craft one and get a victim to open it — so
1313 /// params fall into three tiers:
1414 /// </para>
1515 /// <list type="bullet">
1616 /// <item>
1717 /// <b>Always permitted</b> — benign navigation / share / login intents whose worst case is already
18- /// gated elsewhere (a consent prompt, a matching login token, a plain coordinate, or a closed
19- /// Decentraland-owned enum): realm, position, community, signin, authRequestId, force-open-backpack,
20- /// spawnpoint, dclenv, self-preview-builder-collections.
18+ /// gated elsewhere (a consent prompt, a matching login token, a plain coordinate, a closed
19+ /// Decentraland-owned enum, or a read-only log view): realm, position, community, signin,
20+ /// authRequestId, force-open-backpack, spawnpoint, dclenv, self-preview-builder-collections,
21+ /// scene-console.
2122 /// </item>
2223 /// <item>
2324 /// <b>Permitted only for a whitelisted realm</b> — the local-development params Creator Hub and the
24- /// SDK (<c>sdk-commands</c>) attach to their preview deep links: local-scene, dclenv, hub ,
25- /// skip-auth-screen, landscape-terrain-enabled, multi-instance, scene-console , mcp, mcp-port. A realm
26- /// is "whitelisted" when it is loopback (127.0.0.1 / localhost / [::1]) OR its world matches the
25+ /// SDK (<c>sdk-commands</c>) attach to their preview deep links: local-scene, hub, skip-auth-screen ,
26+ /// landscape-terrain-enabled, multi-instance, local-ab , mcp, mcp-port. A realm is "whitelisted" when
27+ /// it is loopback (127.0.0.1 / localhost / [::1]) OR its world matches the
2728 /// <c>deeplink-whitelisted-worlds</c> feature flag (see <see cref="IsRealmWhitelisted" /> and
2829 /// <see cref="SetWhitelistedWorlds" />). A remote-realm deep link from a web page can never enable
2930 /// them unless that exact world was explicitly whitelisted. All but the MCP pair are individually
30- /// low-harm — an analytics tag, a cosmetic toggle, an instance count, an env enum, a screen skip that
31- /// still forces auth when no valid identity is cached, or the per-scene JS console — and the
32- /// whitelisted-realm gate confines them to the dev context. <c>mcp</c>/<c>mcp-port</c> start an
33- /// unauthenticated loopback control port and are the one non-low-harm pair in this set; they lean on
34- /// the gate plus the server's own 127.0.0.1 bind and Origin check — see the per-key comment for what
35- /// the gate does and does not cover.
31+ /// low-harm — an analytics tag, a cosmetic toggle, an instance count, a screen skip that still forces
32+ /// auth when no valid identity is cached, or asset loading pointed at the realm the link already
33+ /// targets — and the whitelisted-realm gate confines them to the dev context.
34+ /// <c>mcp</c>/<c>mcp-port</c> start an unauthenticated loopback control port and are the one
35+ /// non-low-harm pair in this set; they lean on the gate plus the server's own 127.0.0.1 bind and
36+ /// Origin check — see the per-key comment for what the gate does and does not cover.
3637 /// </item>
3738 /// <item>
3839 /// <b>Never permitted</b> — everything else, in particular params that launch code
@@ -93,6 +94,16 @@ public static class DeepLinkAllowlist
9394 // cannot point the client at attacker infrastructure. Worst case is a session in a Decentraland-owned test
9495 // environment, strictly less capable than the attacker-supplied REALM above.
9596 AppArgsFlags . ENVIRONMENT ,
97+
98+ // Opens the per-scene JS console: a read-only view of the log lines the running scene already emits, and
99+ // Opens the debug menu with its informational widget categories — scene logs, performance, memory,
100+ // room and realm info, entity requests, analytics, and web request metrics. Not realm-gated (product
101+ // production realms and worlds to diagnose a deployed scene, which is exactly what the whitelisted-realm
102+ // tier below forbids. It unlocks no capability of its own: it loads no content, changes no endpoint, and
103+ // the menu it opens is restricted to the informational widget categories (see DebugUtilitiesContainer) —
104+ // the full debug panel still needs the never-permitted "debug". Worst case is a session logging verbosely
105+ // (ReportHub.EnforceUnconditionalVerboseLogs) with a log panel on screen.
106+ AppArgsFlags . SCENE_CONSOLE ,
96107 } ;
97108
98109 // Local-development params Creator Hub / sdk-commands attach to preview deep links. Permitted ONLY when the
@@ -132,9 +143,6 @@ public static class DeepLinkAllowlist
132143 // the same gate; the value is clamped to 1024-65535 and falls back to the default port (McpServerPlugin).
133144 AppArgsFlags . MCP_PORT ,
134145
135- // Opens the per-scene JS console (dev tooling for inspecting a scene under development).
136- AppArgsFlags . SCENE_CONSOLE ,
137-
138146 // Local-scene development only: load the scene's asset bundles from the preview server instead of raw
139147 // GLTFs. A pure boolean — the optimized-assets base is derived from the realm itself
140148 // ({realm}/optimized-assets, see RealmLaunchSettings.LocalAssetBundlesBaseUrl), the same value this
0 commit comments