mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-04 03:10:22 +00:00
Align external marker span mapping (#63885)
* fix(markers): align external marker spans * fix(browser): ssrfPolicy defaults fail-closed for unconfigured installs (GHSA-53vx-pmqw-863c) * fix(browser): enforce strict default SSRF policy * chore(changelog): add browser SSRF default + marker alignment entry --------- Co-authored-by: Devin Robison <drobison@nvidia.com>
This commit is contained in:
@@ -307,11 +307,9 @@ describe("browser config", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it("defaults browser SSRF policy to trusted-network mode", () => {
|
||||
it("defaults browser SSRF policy to strict mode when unset", () => {
|
||||
const resolved = resolveBrowserConfig({});
|
||||
expect(resolved.ssrfPolicy).toEqual({
|
||||
dangerouslyAllowPrivateNetwork: true,
|
||||
});
|
||||
expect(resolved.ssrfPolicy).toEqual({});
|
||||
});
|
||||
|
||||
it("supports explicit strict mode by disabling private network access", () => {
|
||||
@@ -323,6 +321,19 @@ describe("browser config", () => {
|
||||
expect(resolved.ssrfPolicy).toEqual({});
|
||||
});
|
||||
|
||||
it("keeps allowlist-only browser SSRF policy strict by default", () => {
|
||||
const resolved = resolveBrowserConfig({
|
||||
ssrfPolicy: {
|
||||
allowedHostnames: ["example.com"],
|
||||
hostnameAllowlist: ["*.example.com"],
|
||||
},
|
||||
} as unknown as BrowserConfig);
|
||||
expect(resolved.ssrfPolicy).toEqual({
|
||||
allowedHostnames: ["example.com"],
|
||||
hostnameAllowlist: ["*.example.com"],
|
||||
});
|
||||
});
|
||||
|
||||
it("resolves existing-session profiles without cdpPort or cdpUrl", () => {
|
||||
const resolved = resolveBrowserConfig({
|
||||
profiles: {
|
||||
|
||||
@@ -119,9 +119,7 @@ function resolveCdpPortRangeStart(
|
||||
const normalizeStringList = normalizeOptionalTrimmedStringList;
|
||||
|
||||
function resolveBrowserSsrFPolicy(cfg: BrowserConfig | undefined): SsrFPolicy | undefined {
|
||||
const rawPolicy = cfg?.ssrfPolicy as
|
||||
| (BrowserConfig["ssrfPolicy"] & { allowPrivateNetwork?: boolean })
|
||||
| undefined;
|
||||
const rawPolicy = cfg?.ssrfPolicy;
|
||||
const allowPrivateNetwork = rawPolicy?.allowPrivateNetwork;
|
||||
const dangerouslyAllowPrivateNetwork = rawPolicy?.dangerouslyAllowPrivateNetwork;
|
||||
const allowedHostnames = normalizeStringList(rawPolicy?.allowedHostnames);
|
||||
@@ -129,9 +127,7 @@ function resolveBrowserSsrFPolicy(cfg: BrowserConfig | undefined): SsrFPolicy |
|
||||
const hasExplicitPrivateSetting =
|
||||
allowPrivateNetwork !== undefined || dangerouslyAllowPrivateNetwork !== undefined;
|
||||
const resolvedAllowPrivateNetwork =
|
||||
dangerouslyAllowPrivateNetwork === true ||
|
||||
allowPrivateNetwork === true ||
|
||||
!hasExplicitPrivateSetting;
|
||||
dangerouslyAllowPrivateNetwork === true || allowPrivateNetwork === true;
|
||||
|
||||
if (
|
||||
!resolvedAllowPrivateNetwork &&
|
||||
@@ -139,7 +135,9 @@ function resolveBrowserSsrFPolicy(cfg: BrowserConfig | undefined): SsrFPolicy |
|
||||
!allowedHostnames &&
|
||||
!hostnameAllowlist
|
||||
) {
|
||||
return undefined;
|
||||
// Keep the default policy object present so CDP guards still enforce
|
||||
// fail-closed private-network checks on unconfigured installs.
|
||||
return {};
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user