diff --git a/static/schemas/Builder.schema.json b/static/schemas/Builder.schema.json index 5364ed4..aedd1b1 100644 --- a/static/schemas/Builder.schema.json +++ b/static/schemas/Builder.schema.json @@ -53,7 +53,7 @@ "instance_id": { "description": "Instance ID from `xmpMM:InstanceID` in XMP metadata.", "type": "string", - "default": "xmp.iid:95caab0d-9a0d-4246-b26c-88f7b939562b" + "default": "xmp.iid:eda53aaf-f7c0-4d91-8320-13fa82c0037f" }, "thumbnail": { "description": "An optional ResourceRef to a thumbnail image that represents the asset that was signed.\nMust be available when the manifest is signed.", diff --git a/static/schemas/ManifestDefinition.schema.json b/static/schemas/ManifestDefinition.schema.json index fff4914..2e61757 100644 --- a/static/schemas/ManifestDefinition.schema.json +++ b/static/schemas/ManifestDefinition.schema.json @@ -53,7 +53,7 @@ "instance_id": { "description": "Instance ID from `xmpMM:InstanceID` in XMP metadata.", "type": "string", - "default": "xmp.iid:cc18752d-10a4-4b45-ac18-73586cb35418" + "default": "xmp.iid:32903aee-412b-4e46-adb1-58605efded26" }, "thumbnail": { "description": "An optional ResourceRef to a thumbnail image that represents the asset that was signed.\nMust be available when the manifest is signed.", diff --git a/static/schemas/Reader.schema.json b/static/schemas/Reader.schema.json index 48cab5c..9543c2c 100644 --- a/static/schemas/Reader.schema.json +++ b/static/schemas/Reader.schema.json @@ -108,7 +108,7 @@ "instance_id": { "description": "Instance ID from `xmpMM:InstanceID` in XMP metadata.", "type": "string", - "default": "xmp.iid:e589348a-be9b-4191-9e5c-1f6359510aaf" + "default": "xmp.iid:05575196-8d0c-420e-9ec0-38f43cd96623" }, "thumbnail": { "anyOf": [ diff --git a/static/schemas/Settings.schema.json b/static/schemas/Settings.schema.json index f877ceb..60f7f3b 100644 --- a/static/schemas/Settings.schema.json +++ b/static/schemas/Settings.schema.json @@ -254,7 +254,7 @@ "default": true }, "allowed_network_hosts": { - "description": "
\nThe CAWG identity assertion does not currently respect this setting.\nSee [Issue #1645](https://github.com/contentauth/c2pa-rs/issues/1645).\n
\n\nList of host patterns that are allowed for network requests.\n\nEach pattern may include:\n- A scheme (e.g. `https://` or `http://`)\n- A hostname or IP address (e.g. `contentauthenticity.org` or `192.0.2.1`)\n - The hostname may contain a single leading wildcard (e.g. `*.contentauthenticity.org`)\n- An optional port (e.g. `contentauthenticity.org:443` or `192.0.2.1:8080`)\n\nMatching is case-insensitive. A wildcard pattern such as `*.contentauthenticity.org` matches\n`sub.contentauthenticity.org`, but does not match `contentauthenticity.org` or `fakecontentauthenticity.org`.\nIf a scheme is present in the pattern, only URIs using the same scheme are considered a match. If the scheme\nis omitted, any scheme is allowed as long as the host matches.\n\nThe behavior is as follows:\n- `None` (default): no host allow-list is applied. Redirect handling is governed\n independently by [`allow_redirects`] (which rejects redirects to internal addresses).\n- `Some(vec)` where `vec` is empty, all traffic is blocked.\n- `Some(vec)` with at least one pattern, filtering enabled for only those patterns.\n\nWhen an allow-list is set it is enforced on every request, including each redirect hop the\nSDK follows, so a redirect to a host outside the allow-list is rejected.\n\n[`allow_redirects`]: Core::allow_redirects\n\n# Examples\n\nPattern: `*.contentauthenticity.org`\n- Does match:\n - `https://sub.contentauthenticity.org`\n - `http://api.contentauthenticity.org`\n- Does **not** match:\n - `https://contentauthenticity.org` (no subdomain)\n - `https://sub.fakecontentauthenticity.org` (different host)\n\nPattern: `http://192.0.2.1:8080`\n- Does match:\n - `http://192.0.2.1:8080`\n- Does **not** match:\n - `https://192.0.2.1:8080` (scheme mismatch)\n - `http://192.0.2.1` (port omitted)\n - `http://192.0.2.2:8080` (different IP address)\n\nThese settings are applied by the SDK's HTTP resolvers to restrict network requests.\nWhen network requests occur depends on the operations being performed (reading manifests,\nvalidating credentials, timestamping, etc.).", + "description": "
\nThe CAWG identity assertion does not currently respect this setting.\nSee [Issue #1645](https://github.com/contentauth/c2pa-rs/issues/1645).\n
\n\nList of host patterns that are allowed for network requests.\n\nEach pattern may include:\n- A scheme (e.g. `https://` or `http://`)\n- A hostname or IP address (e.g. `contentauthenticity.org` or `192.0.2.1`)\n - The hostname may contain a single leading wildcard (e.g. `*.contentauthenticity.org`)\n- An optional port (e.g. `contentauthenticity.org:443` or `192.0.2.1:8080`)\n\nMatching is case-insensitive. A wildcard pattern such as `*.contentauthenticity.org` matches\n`sub.contentauthenticity.org`, but does not match `contentauthenticity.org` or `fakecontentauthenticity.org`.\nIf a scheme is present in the pattern, only URIs using the same scheme are considered a match. If the scheme\nis omitted, any scheme is allowed as long as the host matches.\n\nThe behavior is as follows:\n- `None` (default): no host allow-list is applied. Redirect handling is governed\n independently by [`allow_redirects`] (which rejects redirects to internal addresses), and\n the initial request is still rejected if it directly names a link-local/cloud-metadata\n address (SSRF – ); see [`allow_redirects`] for the full initial-request policy.\n- `Some(vec)` where `vec` is empty, all traffic is blocked.\n- `Some(vec)` with at least one pattern, filtering enabled for only those patterns. Setting\n this takes over the initial-request policy entirely, superseding the default\n link-local/cloud-metadata guard described above.\n\nWhen an allow-list is set it is enforced on every request, including each redirect hop the\nSDK follows, so a redirect to a host outside the allow-list is rejected.\n\n[`allow_redirects`]: Core::allow_redirects\n\n# Examples\n\nPattern: `*.contentauthenticity.org`\n- Does match:\n - `https://sub.contentauthenticity.org`\n - `http://api.contentauthenticity.org`\n- Does **not** match:\n - `https://contentauthenticity.org` (no subdomain)\n - `https://sub.fakecontentauthenticity.org` (different host)\n\nPattern: `http://192.0.2.1:8080`\n- Does match:\n - `http://192.0.2.1:8080`\n- Does **not** match:\n - `https://192.0.2.1:8080` (scheme mismatch)\n - `http://192.0.2.1` (port omitted)\n - `http://192.0.2.2:8080` (different IP address)\n\nThese settings are applied by the SDK's HTTP resolvers to restrict network requests.\nWhen network requests occur depends on the operations being performed (reading manifests,\nvalidating credentials, timestamping, etc.).", "type": [ "array", "null" @@ -265,7 +265,7 @@ "default": null }, "allow_redirects": { - "description": "Whether the SDK follows HTTP redirects for requests made while reading and validating\n(remote manifests, OCSP, timestamps, `did:web`).\n\nBecause some request URLs come from untrusted content, following redirects can be abused to\nreach internal or cloud-metadata endpoints (SSRF – CAI-12574). To prevent that while\nremaining compatible with legitimate redirects:\n\n- `true` (default): redirects are followed, **except** when a redirect target is a\n non-globally-routable address (loopback, private/RFC1918, link-local and cloud-metadata,\n IPv6 unique-local/link-local, CGNAT, etc.). Such a redirect is rejected with\n [`HttpResolverError::RedirectTargetDisallowed`]. Redirects to public hosts are followed\n normally.\n- `false`: redirects are not followed at all; a redirect response is surfaced as\n [`HttpResolverError::RedirectDisallowed`].\n\nThis applies to redirect *targets*, not the initial request: a URL that *directly* names an\ninternal host (for example an enterprise OCSP responder on a private address, or a\n`localhost` development server) is still fetched. Use [`allowed_network_hosts`] to restrict\nwhich hosts may be contacted at all.\n\n[`allowed_network_hosts`]: Core::allowed_network_hosts\n[`HttpResolverError::RedirectTargetDisallowed`]: crate::http::HttpResolverError::RedirectTargetDisallowed\n[`HttpResolverError::RedirectDisallowed`]: crate::http::HttpResolverError::RedirectDisallowed", + "description": "Whether the SDK follows HTTP redirects for requests made while reading and validating\n(remote manifests, OCSP, timestamps, `did:web`).\n\nBecause some request URLs come from untrusted content, following redirects can be abused to\nreach internal or cloud-metadata endpoints (SSRF – CAI-12574). To prevent that while\nremaining compatible with legitimate redirects:\n\n- `true` (default): redirects are followed, **except** when a redirect target is a\n non-globally-routable address (loopback, private/RFC1918, link-local and cloud-metadata,\n IPv6 unique-local/link-local, CGNAT, etc.). Such a redirect is rejected with\n [`HttpResolverError::RedirectTargetDisallowed`]. Redirects to public hosts are followed\n normally.\n- `false`: redirects are not followed at all; a redirect response is surfaced as\n [`HttpResolverError::RedirectDisallowed`].\n\nThis applies to redirect *targets*, not the initial request. Independently of this setting,\nthe initial request is rejected by default when it directly names a link-local or\ncloud-metadata address (e.g. `169.254.169.254`), reported as\n[`HttpResolverError::MetadataOrLinkLocalUriDisallowed`] (SSRF – ). A URL that\ndirectly names a loopback or private (RFC 1918) host (for example an enterprise OCSP\nresponder on a private address, or a `localhost` development server) is not covered by that\nguard and is still fetched. Use [`allowed_network_hosts`] to restrict which hosts — including\nloopback/private ones — may be contacted at all.\n\n[`allowed_network_hosts`]: Core::allowed_network_hosts\n[`HttpResolverError::RedirectTargetDisallowed`]: crate::http::HttpResolverError::RedirectTargetDisallowed\n[`HttpResolverError::RedirectDisallowed`]: crate::http::HttpResolverError::RedirectDisallowed\n[`HttpResolverError::MetadataOrLinkLocalUriDisallowed`]: crate::http::HttpResolverError::MetadataOrLinkLocalUriDisallowed", "type": "boolean", "default": true },