# Security Audit Report — adr-check

- **Report ID:** `d095503c-80e0-4bba-8e0a-e205181d88e7`
- **Generated:** 2026-07-31T15:39:12.315748+00:00
- **Signature:** unsigned (cosign keyless signing runs in CI; Req 22.4)

## 1. Executive Summary

**Badge:** Unsafe (composite)  
**Security score:** 47.5

| Scanner | Badge |
| --- | --- |
| agent-audit-kit | unavailable |
| agentshield | Verified |
| cisco-skill-scanner | unavailable |
| nerlo-behavioral | unavailable |
| nerlo-install-instruction | unavailable |
| nerlo-multi-source | unavailable |
| osv-scanner | Unsafe |
| trivy | Unsafe |
| trivy_image | unavailable |

| Severity | Findings |
| --- | --- |
| critical | 1 |
| high | 48 |
| medium | 63 |
| low | 17 |
| informational | 1 |

adr-check is NOT recommended for integration: the scan surfaced 1 critical and 48 high-severity findings. Treat the Per-Scanner Detail section as a remediation worklist and re-scan before reconsidering.

## 2. Source Provenance

- **Repository:** https://github.com/paloaltonetworks/shifter
- **Commit scanned:** `unknown`
- **License:** unknown
- **Maintainer:** unknown
- **Version:** unknown

## 3. Per-Scanner Detail

### agentshield (v1.4.0) — Verified / 95.0

- **[medium] Missing deny rule: Recursive force delete** — The deny list does not block "rm -rf". Consider adding it to prevent recursive force delete. (settings.json:None)
- **[medium] Missing deny rule: Privilege escalation** — The deny list does not block "sudo". Consider adding it to prevent privilege escalation. (settings.json:None)
- **[medium] Missing deny rule: World-writable permissions** — The deny list does not block "chmod 777". Consider adding it to prevent world-writable permissions. (settings.json:None)
- **[medium] Missing deny rule: SSH connections from agent** — The deny list does not block "ssh". Consider adding it to prevent ssh connections from agent. (settings.json:None)
- **[medium] Missing deny rule: Writing to device files** — The deny list does not block "> /dev/". Consider adding it to prevent writing to device files. (settings.json:None)
- **[low] No Stop hooks for session-end verification** — Hooks are configured but no Stop hooks exist. Stop hooks run when a session ends and are useful for final verification — checking for uncommitted secrets, ensuring console.log statements were removed, or auditing file changes. (settings.json:None)

### cisco-skill-scanner (v2.0.11) — unavailable / n/a

No findings.

### agent-audit-kit (v0.3.26) — unavailable / n/a

No findings.

### nerlo-behavioral (v0.1.0) — unavailable / n/a

No findings.

### nerlo-install-instruction (v0.1.0) — unavailable / n/a

No findings.

### nerlo-multi-source (v0.1.0) — unavailable / n/a

No findings.

### trivy (v0.71.0) — Unsafe / 0.0

- **[medium] Node.js Adapter for Hono: Path traversal in 'serve-static' on Windows via encoded backslash ('%5C')** — The same as the 'hono' core [Path traversal in 'serve-static' on Windows via encoded backslash ('%5C')](https://github.com/honojs/hono/security/advisories/GHSA-wwfh-h76j-fc44).  \#\#\# Summary  On Windows hosts, an encoded backslash ('%5C') in the request path decodes to '\', which the Windows path resolver treats as a separator. 'serve-static' then resolves a single URL segment such as 'admin\secret.txt' into a nested file under the root and serves it, letting an attacker read static files meant t (mcp/ngfw/package-lock.json:None)
- **[low] body-parser: body-parser: Denial of Service via invalid limit option** — Impact: In body-parser versions prior to 1.20.6 (1.x line) and 2.3.0 (2.x line), when the parser is configured with an invalid limit option value such as an unparseable string or NaN, bytes.parse returns null and the request body size check is silently skipped. Applications that rely on limit as their primary safeguard against oversized request bodies will accept arbitrarily large payloads, leading to excessive memory and CPU usage and denial of service. Patches: This issue is fixed in body-pars (mcp/ngfw/package-lock.json:None)
- **[high] fast-uri: fast-uri: Security policy bypass due to improper Unicode hostname canonicalization** — fast-uri versions 2.3.1 through 3.1.2 and 4.0.0 fail to canonicalize Unicode (IDN) hostnames for HTTP-family URLs. The IDN conversion path calls a helper that does not exist on the global URL constructor, silently leaving the host in its original Unicode form while normalize() and equal() still return values that differ from a WHATWG-compatible URL parser. Applications that use fast-uri to enforce host-based policy (denylists, loopback filtering, redirect validation, outbound proxy routing) befo (mcp/ngfw/package-lock.json:None)
- **[high] Impact: fast-uri versions from 2.3.1 through 4.1.0 (including the 3.x  ...** — Impact: fast-uri versions from 2.3.1 through 4.1.0 (including the 3.x line up to 3.1.3 and the 2.x line up to 2.4.2) do not treat a literal backslash character (U+005C) as an authority delimiter. Node's native WHATWG URL parser, used by fetch, undici, and Node's http and https clients, normalizes the backslash to a forward slash for special schemes such as http, https, ws, wss, ftp, and file. As a result, the two parsers extract different hosts from the same input string. Applications that use f (mcp/ngfw/package-lock.json:None)
- **[medium] Node.js Adapter for Hono: Path traversal in 'serve-static' on Windows via encoded backslash ('%5C')** — The same as the 'hono' core [Path traversal in 'serve-static' on Windows via encoded backslash ('%5C')](https://github.com/honojs/hono/security/advisories/GHSA-wwfh-h76j-fc44).  \#\#\# Summary  On Windows hosts, an encoded backslash ('%5C') in the request path decodes to '\', which the Windows path resolver treats as a separator. 'serve-static' then resolves a single URL segment such as 'admin\secret.txt' into a nested file under the root and serves it, letting an attacker read static files meant t (mcp/ops/package-lock.json:None)
- **[low] body-parser: body-parser: Denial of Service via invalid limit option** — Impact: In body-parser versions prior to 1.20.6 (1.x line) and 2.3.0 (2.x line), when the parser is configured with an invalid limit option value such as an unparseable string or NaN, bytes.parse returns null and the request body size check is silently skipped. Applications that rely on limit as their primary safeguard against oversized request bodies will accept arbitrarily large payloads, leading to excessive memory and CPU usage and denial of service. Patches: This issue is fixed in body-pars (mcp/ops/package-lock.json:None)
- **[high] fast-uri: fast-uri: Security policy bypass due to improper Unicode hostname canonicalization** — fast-uri versions 2.3.1 through 3.1.2 and 4.0.0 fail to canonicalize Unicode (IDN) hostnames for HTTP-family URLs. The IDN conversion path calls a helper that does not exist on the global URL constructor, silently leaving the host in its original Unicode form while normalize() and equal() still return values that differ from a WHATWG-compatible URL parser. Applications that use fast-uri to enforce host-based policy (denylists, loopback filtering, redirect validation, outbound proxy routing) befo (mcp/ops/package-lock.json:None)
- **[high] Impact: fast-uri versions from 2.3.1 through 4.1.0 (including the 3.x  ...** — Impact: fast-uri versions from 2.3.1 through 4.1.0 (including the 3.x line up to 3.1.3 and the 2.x line up to 2.4.2) do not treat a literal backslash character (U+005C) as an authority delimiter. Node's native WHATWG URL parser, used by fetch, undici, and Node's http and https clients, normalizes the backslash to a forward slash for special schemes such as http, https, ws, wss, ftp, and file. As a result, the two parsers extract different hosts from the same input string. Applications that use f (mcp/ops/package-lock.json:None)
- **[medium] Node.js Adapter for Hono: Path traversal in 'serve-static' on Windows via encoded backslash ('%5C')** — The same as the 'hono' core [Path traversal in 'serve-static' on Windows via encoded backslash ('%5C')](https://github.com/honojs/hono/security/advisories/GHSA-wwfh-h76j-fc44).  \#\#\# Summary  On Windows hosts, an encoded backslash ('%5C') in the request path decodes to '\', which the Windows path resolver treats as a separator. 'serve-static' then resolves a single URL segment such as 'admin\secret.txt' into a nested file under the root and serves it, letting an attacker read static files meant t (mcp/planner/package-lock.json:None)
- **[low] body-parser: body-parser: Denial of Service via invalid limit option** — Impact: In body-parser versions prior to 1.20.6 (1.x line) and 2.3.0 (2.x line), when the parser is configured with an invalid limit option value such as an unparseable string or NaN, bytes.parse returns null and the request body size check is silently skipped. Applications that rely on limit as their primary safeguard against oversized request bodies will accept arbitrarily large payloads, leading to excessive memory and CPU usage and denial of service. Patches: This issue is fixed in body-pars (mcp/planner/package-lock.json:None)
- **[high] fast-uri: fast-uri: Security policy bypass due to improper Unicode hostname canonicalization** — fast-uri versions 2.3.1 through 3.1.2 and 4.0.0 fail to canonicalize Unicode (IDN) hostnames for HTTP-family URLs. The IDN conversion path calls a helper that does not exist on the global URL constructor, silently leaving the host in its original Unicode form while normalize() and equal() still return values that differ from a WHATWG-compatible URL parser. Applications that use fast-uri to enforce host-based policy (denylists, loopback filtering, redirect validation, outbound proxy routing) befo (mcp/planner/package-lock.json:None)
- **[high] Impact: fast-uri versions from 2.3.1 through 4.1.0 (including the 3.x  ...** — Impact: fast-uri versions from 2.3.1 through 4.1.0 (including the 3.x line up to 3.1.3 and the 2.x line up to 2.4.2) do not treat a literal backslash character (U+005C) as an authority delimiter. Node's native WHATWG URL parser, used by fetch, undici, and Node's http and https clients, normalizes the backslash to a forward slash for special schemes such as http, https, ws, wss, ftp, and file. As a result, the two parsers extract different hosts from the same input string. Applications that use f (mcp/planner/package-lock.json:None)
- **[low] body-parser: body-parser: Denial of Service via invalid limit option** — Impact: In body-parser versions prior to 1.20.6 (1.x line) and 2.3.0 (2.x line), when the parser is configured with an invalid limit option value such as an unparseable string or NaN, bytes.parse returns null and the request body size check is silently skipped. Applications that rely on limit as their primary safeguard against oversized request bodies will accept arbitrarily large payloads, leading to excessive memory and CPU usage and denial of service. Patches: This issue is fixed in body-pars (platform/terraform/gcp/modules/portal/identity-platform/functions/identity-platform/package-lock.json:None)
- **[medium] DOMPurify: DOMPurify: Cross-site scripting** — DOMPurify 3.1.3 through 3.2.6 and 2.5.3 through 2.5.8 contain a cross-site scripting vulnerability that allows attackers to bypass attribute sanitization by exploiting missing textarea rawtext element validation in the SAFE_FOR_XML regex. Attackers can include closing rawtext tags like </textarea> in attribute values to break out of rawtext contexts and execute JavaScript when sanitized output is placed inside rawtext elements. The 3.x branch was fixed in 3.2.7; the 2.x branch was never patched. (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] dompurify: Mutation XSS in DOMPurify Due to Improper Template Literal Handling** — DOMPurify before 3.2.4 has an incorrect template literal regular expression, sometimes leading to mutation cross-site scripting (mXSS). (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] DOMPurify: DOMPurify: Cross-site scripting vulnerability** — DOMPurify 3.1.3 through 3.3.1 and 2.5.3 through 2.5.8, fixed in commit 2726c74, contain a cross-site scripting vulnerability that allows attackers to bypass attribute sanitization by exploiting five missing rawtext elements (noscript, xmp, noembed, noframes, iframe) in the SAFE_FOR_XML regex. Attackers can include payloads like </noscript><img src=x onerror=alert(1)> in attribute values to execute JavaScript when sanitized output is placed inside these unprotected rawtext contexts. (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] DOMPurify: DOMPurify: Cross-Site Scripting bypass via prototype pollution** — DOMPurify is a DOM-only cross-site scripting sanitizer for HTML, MathML, and SVG. Versions 3.0.1 through 3.3.3 are vulnerable to a prototype pollution-based XSS bypass. When an application uses 'DOMPurify.sanitize()' with the default configuration (no 'CUSTOM_ELEMENT_HANDLING' option), a prior prototype pollution gadget can inject permissive 'tagNameCheck' and 'attributeNameCheck' regex values into 'Object.prototype', causing DOMPurify to allow arbitrary custom elements with arbitrary attributes (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] DOMPurify: Vue 2: DOMPurify: Cross-site scripting due to incomplete sanitization of template expressions** — DOMPurify is a DOM-only cross-site scripting sanitizer for HTML, MathML, and SVG. Starting in version 1.0.10 and prior to version 3.4.0, 'SAFE_FOR_TEMPLATES' strips '{{...}}' expressions from untrusted HTML. This works in string mode but not with 'RETURN_DOM' or 'RETURN_DOM_FRAGMENT', allowing XSS via template-evaluating frameworks like Vue 2. Version 3.4.0 patches the issue. (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] DOMPurify: DOMPurify: Cross-Site Scripting (XSS) via inconsistent tag sanitization** — DOMPurify is a DOM-only cross-site scripting sanitizer for HTML, MathML, and SVG. Versions prior to 3.4.0 have an inconsistency between FORBID_TAGS and FORBID_ATTR handling when function-based ADD_TAGS is used. Commit c361baa added an early exit for FORBID_ATTR at line 1214. The same fix was not applied to FORBID_TAGS. At line 1118-1123, when EXTRA_ELEMENT_HANDLING.tagCheck returns true, the short-circuit evaluation skips the FORBID_TAGS check entirely. This allows forbidden elements to survive  (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] dompurify: DOMPurify: Cross-site scripting due to improper sanitization of DOM nodes** — DOMPurify is a DOM-only cross-site scripting sanitizer for HTML, MathML, and SVG. Prior to 3.4.6, DOMPurify.sanitize(node, { IN_PLACE: true }) accepted same-origin foreign-realm DOM nodes while follow-on checks used parent-realm constructors, causing instanceof checks for forms, named node maps, document fragments, and elements to fail and skip clobber, template-content, and shadow-DOM sanitization branches so executable markup could survive. This issue is fixed in version 3.4.6. (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] dompurify: DOMPurify: Cross-site scripting bypass allows arbitrary script execution** — DOMPurify is a DOM-only cross-site scripting sanitizer for HTML, MathML, and SVG. Prior to 3.4.6, DOMPurify.sanitize(root, { IN_PLACE: true }) could preserve event-handler attributes on an attacker-controlled <form> root when a descendant name clobbered properties checked by _isClobbered, because _forceRemove no-opped on the parent-less root and _sanitizeAttributes returned early. This issue is fixed in version 3.4.6. (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] dompurify: DOMPurify: Cross-site scripting vulnerability allows code execution** — DOMPurify is a DOM-only cross-site scripting sanitizer for HTML, MathML, and SVG. Prior to 3.4.7, DOMPurify IN_PLACE sanitization could skip shadow contents attached to an element inside <template>.content, allowing attacker-controlled markup such as event handlers, JavaScript URLs, or scripts to survive and execute when an application cloned and inserted the sanitized template. This issue is fixed in version 3.4.7. (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] DOMPurify before 3.4.11 fails to clone the ALLOWED_ATTR allowlist when ...** — DOMPurify before 3.4.11 fails to clone the ALLOWED_ATTR allowlist when setConfig() is used with an uponSanitizeAttribute hook, allowing the hook to permanently mutate the shared allowlist. Attackers can register a hook that conditionally allows dangerous attributes like onerror for trusted elements, then submit untrusted content that inherits the polluted allowlist and executes event handlers as stored XSS. (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] DOMPurify before 3.4.7 (affected versions <= 3.4.5) passes direct refe ...** — DOMPurify before 3.4.7 (affected versions <= 3.4.5) passes direct references to the module-level DEFAULT_ALLOWED_TAGS and DEFAULT_ALLOWED_ATTR sets to the uponSanitizeElement and uponSanitizeAttribute hooks via data.allowedTags / data.allowedAttributes when sanitize is called without an explicit cfg.ALLOWED_TAGS / cfg.ALLOWED_ATTR array. A hook that mutates these fields permanently widens the default allow-lists for the lifetime of the DOMPurify instance, so all subsequent default-config sanitiz (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] dompurify: DOMPurify: Security bypass allows injection of malicious content** — DOMPurify before 3.4.0 contains a logic error in the ADD_TAGS function where short-circuit evaluation allows forbidden tags to bypass FORBID_TAGS restrictions. Attackers can craft input containing tags listed in FORBID_TAGS that are also added via ADD_TAGS function, causing them to be retained in sanitized output. (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] DOMPurify before 3.3.2 contains a URI validation bypass vulnerability  ...** — DOMPurify before 3.3.2 contains a URI validation bypass vulnerability when ADD_ATTR is provided as a predicate function via EXTRA_ELEMENT_HANDLING.attributeCheck. Attackers can supply a predicate that accepts specific attribute and tag combinations to bypass URI-safe validation, allowing unsafe protocols like javascript: to survive sanitization and execute as DOM-based XSS when the link is activated. (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] DOMPurify before 3.3.2 contains a prototype pollution vulnerability in ...** — DOMPurify before 3.3.2 contains a prototype pollution vulnerability in USE_PROFILES mode that allows attackers to bypass attribute filtering by polluting Array.prototype properties. Attackers can set Array.prototype properties like onclick to true, causing DOMPurify to accept event handlers as allowlisted attributes and resulting in DOM-based XSS when sanitized markup is rendered. (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] DOMPurify before 3.3.2 contains a mutation-XSS vulnerability when sani ...** — DOMPurify before 3.3.2 contains a mutation-XSS vulnerability when sanitized HTML is reinserted into special parsing contexts using innerHTML with wrappers like script, xmp, iframe, noembed, noframes, or noscript. Attackers can craft payloads with closing sequences that break out of the wrapper context during reparsing, reactivating dangerous markup with event handlers to execute JavaScript. (shifter/shifter_platform/frontend/package-lock.json:None)
- **[low] DOMPurify 3.0.0 before 3.4.9 does not reset the retained Trusted Types ...** — DOMPurify 3.0.0 before 3.4.9 does not reset the retained Trusted Types policy when clearConfig() is called, so a DOMPurify instance reused across trust boundaries stays bound to a previously supplied TRUSTED_TYPES_POLICY. A later caller that requests RETURN_TRUSTED_TYPE output receives a TrustedHTML object created by the old (potentially unsafe) policy rather than a clean default, which can lead to script execution at a Trusted Types sink. Passing TRUSTED_TYPES_POLICY: null on the later call als (shifter/shifter_platform/frontend/package-lock.json:None)
- **[low] DOMPurify versions >=3.0.0 and before 3.4.8, when configured with SAFE ...** — DOMPurify versions >=3.0.0 and before 3.4.8, when configured with SAFE_FOR_TEMPLATES together with a DOM output mode (RETURN_DOM, RETURN_DOM_FRAGMENT, or IN_PLACE), fail to strip template expressions (e.g. ${evil}, {{evil}}, <%evil%>) inside <template> element content. The final normalization/scrub pass (_scrubTemplateExpressions) uses a NodeIterator and node.normalize() that do not descend into template.content, so expressions that only form after adjacent text nodes merge survive sanitization. (shifter/shifter_platform/frontend/package-lock.json:None)
- **[low] DOMPurify through 3.4.6 contains a cross-site scripting vulnerability  ...** — DOMPurify through 3.4.6 contains a cross-site scripting vulnerability in IN_PLACE mode that trusts attacker-controlled nodeName on live non-form nodes. Attackers can supply hostile live DOM objects with real script children whose observable nodeName is clobbered to appear as allowed elements, causing scripts to execute when the sanitized tree is inserted into a live document. (shifter/shifter_platform/frontend/package-lock.json:None)
- **[low] DOMPurify: 'CUSTOM_ELEMENT_HANDLING' bypasses 'afterSanitizeElements' for allowed custom elements.** — \#\# Summary  There is a possible hook-policy inconsistency in DOMPurify 3.4.11 involving 'CUSTOM_ELEMENT_HANDLING'.  When a custom element is allowed via 'CUSTOM_ELEMENT_HANDLING.tagNameCheck', it appears that the element does not go through 'afterSanitizeElements' in the same way as a normal element. As a result, an application that relies on 'afterSanitizeElements' as a security policy layer to strip sensitive attributes from all elements may see those attributes removed from normal elements bu (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] esbuild enables any website to send any requests to the development server and read the response** — \#\#\# Summary  esbuild allows any websites to send any request to the development server and read the response due to default CORS settings.  \#\#\# Details  esbuild sets 'Access-Control-Allow-Origin: *' header to all requests, including the SSE connection, which allows any websites to send any request to the development server and read the response.  https://github.com/evanw/esbuild/blob/df815ac27b84f8b34374c9182a93c94718f8a630/pkg/api/serve_other.go\#L121 https://github.com/evanw/esbuild/blob/df815a (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] Mermaid improperly sanitizes sequence diagram labels leading to XSS** — Mermaid is a JavaScript based diagramming and charting tool that uses Markdown-inspired text definitions and a renderer to create and modify complex diagrams. In the default configuration of mermaid 10.9.0-rc.1 to 11.9.0, user supplied input for sequence diagram labels is passed to innerHTML during calculation of element size, causing XSS. (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] mermaid: Mermaid: CSS injection vulnerability allows page defacement and information disclosure** — Mermaid is a JavaScript tool that uses Markdown-inspired text to create and modify diagrams and charts. Versions 10.9.5 and prior, in addition to 11.0.0-alpha.1 through 11.12.0 are vulnerable to CSS injection through improper sanitization. The state diagram (and any other diagram type that routes user-controlled style strings through the createCssStyles parser) captures classDef values using an unrestricted regex that matches everything up to a newline. That value then flows unsanitized through  (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] mermaid: Mermaid: HTML injection via classDef directive in state diagrams** — Mermaid is a JavaScript tool that uses Markdown-inspired text to create and modify diagrams and charts. Versions 10.9.5 and earlier, as well as 11.0.0-alpha.1 through 11.14.0, are vulnerable to HTML injection under the default configuration. Specifically, the classDef directive in Mermaid state diagrams permits DOM injection that escapes the SVG context. However, <script> tags are stripped, which prevents cross-site scripting (XSS). This issue has been fixed in versions 10.9.6 and 11.15.0. If de (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] mermaid: Mermaid: Denial of Service via specially crafted gantt charts** — Mermaid is a JavaScript tool that uses Markdown-inspired text to create and modify diagrams and charts. Prior to 10.9.6 and 11.15.0, there is a denial-of-service attack when rendering gantt charts, if they use the excludes attribute to exclude all dates. mermaid.parse is unaffected, unless you then call the ganttDb.getTasks() (which is called when rendering a diagram). This vulnerability is fixed in 10.9.6 and 11.15.0. (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] mermaid: Mermaid: Information disclosure and page defacement via CSS injection** — Mermaid is a JavaScript tool that uses Markdown-inspired text to create and modify diagrams and charts. Prior to 10.9.6 and 11.15.0,  Mermaid's default configuration allows injecting CSS that applies outside of the Mermaid diagram via the fontFamily, themeCSS, and altFontFamily configuration options. The injected CSS exploits stylis's & (scope reference) handling. :not(&) escapes the \#mermaid-xxx automatic scoping, applying styles to all page elements. Global at-rules (@font-face, @keyframes, @c (shifter/shifter_platform/frontend/package-lock.json:None)
- **[high] PostCSS: Path Traversal in Previous Source Map Auto-Loading (sourceMappingURL) leads to Arbitrary .map File Disclosure** — \#\# Vulnerability Details  **File**: 'lib/previous-map.js' **Line**: 87-98 ('loadFile'), 129-144 ('loadMap')   \#\#\# Root Cause PostCSS auto-detects a '/*\# sourceMappingURL=... */' comment inside the CSS text it is asked to parse and, unless the caller explicitly passes 'map: false', attempts to load that path from disk as a "previous source map." This happens on every 'postcss.parse()' / 'postcss().process()' call by default (opt-out, not opt-in).  'loadMap()' builds the candidate path via 'join(d (shifter/shifter_platform/frontend/package-lock.json:None)
- **[high] React Router: RSC Mode CSRF Bypass Allows Action Execution Before 400 Response** — This is a follow up to CVE-2026-22030 to address related CSRF flows in unstable RSC code paths.  > [!NOTE] > This only affects your application if you are using the unstable RSC APIs (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] uuid: uuid: Out-of-bounds write vulnerability impacts data integrity and confidentiality** — uuid is for the creation of RFC9562 (formerly RFC4122) UUIDs. Prior to 14.0.0, v3, v5, and v6 accept external output buffers but do not reject out-of-range writes (small buf or large offset). This allows silent partial writes into caller-provided buffers. This vulnerability is fixed in 14.0.0. (shifter/shifter_platform/frontend/package-lock.json:None)
- **[high] vite: 'server.fs.deny' bypass on Windows alternate paths** — Vite is a frontend tooling framework for JavaScript. Prior to 8.0.16, 7.3.5, and 6.4.3, the contents of files that are specified by server.fs.deny can be returned to the browser on Windows. Vite’s dev server denies direct access to sensitive files through server.fs.deny, including entries such as .env, .env.*, and *.{crt,pem}. However, on Windows, the deny logic does not correctly normalize NTFS ADS path forms before access checks are applied. Because of this, requests such as /.env::$DATA?raw a (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] vite: Vite: Information disclosure via path traversal in dev server's .map request handling** — Vite is a frontend tooling framework for JavaScript. From 6.0.0 to before 6.4.2, 7.3.2, and 8.0.5, the dev server’s handling of .map requests for optimized dependencies resolves file paths and calls readFile without restricting ../ segments in the URL. As a result, it is possible to bypass the server.fs.strict allow list and retrieve .map files located outside the project root, provided they can be parsed as valid source map JSON. This vulnerability is fixed in 6.4.2, 7.3.2, and 8.0.5. (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] launch-editor: launch-editor: Credential compromise via NTLMv2 password hash leak through UNC path access** — launch-editor allows users to open files with line numbers in editor from Node.js. Prior to 2.14.1, the launch-editor NPM package accesses arbitrary paths including Windows UNC paths. When a UNC path is opened, Windows automatically attempts NTLM authentication to the remote host, causing the user’s NTLMv2 password hash to be leaked to an attacker-controlled SMB server. This can result in credential compromise through offline hash cracking. This vulnerability is fixed in 2.14.1. (shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] daphne: daphne: Denial of Service via excessive WebSocket message size** — daphne before 4.2.2 did not pass maxFramePayloadSize or maxMessagePayloadSize to Autobahn's WebSocketServerFactory. Because Autobahn defaults both values to 0 (unlimited), an unauthenticated remote attacker could send arbitrarily large WebSocket messages or frames, causing excessive memory consumption and a denial of service. (shifter/shifter_platform/uv.lock:None)
- **[low] daphne: daphne: Information disclosure via header injection due to parser differential** — daphne before 4.2.2 reconstructs a raw HTTP request from Twisted's parsed headers and feeds it to autobahn for WebSocket handshake processing. Twisted does not treat \x0b, \x0c, \x1c, \x1d, \x1e, or \x85 as header line separators, but autobahn decodes header values to str and calls splitlines(). An attacker can exploit this parser differential to inject additional headers into the ASGI scope passed to the application. daphne now rejects requests with these bytes in any header value with a 400 re (shifter/shifter_platform/uv.lock:None)
- **[high] pyasn1: python-pyasn1: pyasn1: Denial of Service via crafted ASN.1 OBJECT IDENTIFIER** — pyasn1 is a generic ASN.1 library for Python. Prior to 0.6.4, the BER, CER, and DER decoders process OBJECT IDENTIFIER and RELATIVE-OID values in quadratic time relative to the number of arcs, so a small crafted payload containing an OID with many arcs consumes excessive CPU per decode() call and can deny service to applications that decode untrusted ASN.1 data. The corresponding encoders have the same quadratic behavior when an application re-encodes previously decoded attacker-supplied values. (shifter/shifter_platform/uv.lock:None)
- **[high] pyasn1: pyasn1: Denial of Service via crafted ASN.1 REAL values** — pyasn1 is a generic ASN.1 library for Python. Prior to 0.6.4, the univ.Real type converted its mantissa, base, and exponent value to a Python float using exact big-integer exponentiation. A BER, CER, or DER encoded REAL value only a few bytes long can carry a very large exponent, causing float conversion through prettyPrint(), str(), comparison, arithmetic, int(), or an explicit float() call to consume excessive CPU and memory and hang applications that decode untrusted ASN.1 data and then print (shifter/shifter_platform/uv.lock:None)

### osv-scanner (v2.3.8) — Unsafe / 0.0

- **[medium] GHSA-frvp-7c67-39w9 — npm @hono/node-server@1.19.14** — aliases: GHSA-frvp-7c67-39w9 \| CVSS: 5.9 (/repo/mcp/ngfw/package-lock.json:None)
- **[low] GHSA-v422-hmwv-36x6 — npm body-parser@2.2.2** — aliases: CVE-2026-12590, GHSA-v422-hmwv-36x6 \| CVSS: 3.7 (/repo/mcp/ngfw/package-lock.json:None)
- **[high] GHSA-3jxr-9vmj-r5cp — npm brace-expansion@5.0.6** — aliases: CVE-2026-13149, GHSA-3jxr-9vmj-r5cp \| CVSS: 7.7 (/repo/mcp/ngfw/package-lock.json:None)
- **[high] GHSA-mh99-v99m-4gvg — npm brace-expansion@5.0.6** — aliases: CVE-2026-14257, GHSA-mh99-v99m-4gvg \| CVSS: 7.5 (/repo/mcp/ngfw/package-lock.json:None)
- **[high] GHSA-4c8g-83qw-93j6 — npm fast-uri@3.1.2** — aliases: CVE-2026-13676, GHSA-4c8g-83qw-93j6 \| CVSS: 7.5 (/repo/mcp/ngfw/package-lock.json:None)
- **[high] GHSA-v2hh-gcrm-f6hx — npm fast-uri@3.1.2** — aliases: CVE-2026-16221, GHSA-v2hh-gcrm-f6hx \| CVSS: 7.5 (/repo/mcp/ngfw/package-lock.json:None)
- **[medium] GHSA-frvp-7c67-39w9 — npm @hono/node-server@1.19.14** — aliases: GHSA-frvp-7c67-39w9 \| CVSS: 5.9 (/repo/mcp/ops/package-lock.json:None)
- **[low] GHSA-v422-hmwv-36x6 — npm body-parser@2.2.2** — aliases: CVE-2026-12590, GHSA-v422-hmwv-36x6 \| CVSS: 3.7 (/repo/mcp/ops/package-lock.json:None)
- **[high] GHSA-3jxr-9vmj-r5cp — npm brace-expansion@5.0.6** — aliases: CVE-2026-13149, GHSA-3jxr-9vmj-r5cp \| CVSS: 7.7 (/repo/mcp/ops/package-lock.json:None)
- **[high] GHSA-mh99-v99m-4gvg — npm brace-expansion@5.0.6** — aliases: CVE-2026-14257, GHSA-mh99-v99m-4gvg \| CVSS: 7.5 (/repo/mcp/ops/package-lock.json:None)
- **[high] GHSA-4c8g-83qw-93j6 — npm fast-uri@3.1.2** — aliases: CVE-2026-13676, GHSA-4c8g-83qw-93j6 \| CVSS: 7.5 (/repo/mcp/ops/package-lock.json:None)
- **[high] GHSA-v2hh-gcrm-f6hx — npm fast-uri@3.1.2** — aliases: CVE-2026-16221, GHSA-v2hh-gcrm-f6hx \| CVSS: 7.5 (/repo/mcp/ops/package-lock.json:None)
- **[medium] GHSA-frvp-7c67-39w9 — npm @hono/node-server@1.19.14** — aliases: GHSA-frvp-7c67-39w9 \| CVSS: 5.9 (/repo/mcp/planner/package-lock.json:None)
- **[low] GHSA-v422-hmwv-36x6 — npm body-parser@2.2.2** — aliases: CVE-2026-12590, GHSA-v422-hmwv-36x6 \| CVSS: 3.7 (/repo/mcp/planner/package-lock.json:None)
- **[high] GHSA-3jxr-9vmj-r5cp — npm brace-expansion@5.0.6** — aliases: CVE-2026-13149, GHSA-3jxr-9vmj-r5cp \| CVSS: 7.7 (/repo/mcp/planner/package-lock.json:None)
- **[high] GHSA-mh99-v99m-4gvg — npm brace-expansion@5.0.6** — aliases: CVE-2026-14257, GHSA-mh99-v99m-4gvg \| CVSS: 7.5 (/repo/mcp/planner/package-lock.json:None)
- **[high] GHSA-4c8g-83qw-93j6 — npm fast-uri@3.1.2** — aliases: CVE-2026-13676, GHSA-4c8g-83qw-93j6 \| CVSS: 7.5 (/repo/mcp/planner/package-lock.json:None)
- **[high] GHSA-v2hh-gcrm-f6hx — npm fast-uri@3.1.2** — aliases: CVE-2026-16221, GHSA-v2hh-gcrm-f6hx \| CVSS: 7.5 (/repo/mcp/planner/package-lock.json:None)
- **[high] GHSA-3jxr-9vmj-r5cp — npm brace-expansion@5.0.6** — aliases: CVE-2026-13149, GHSA-3jxr-9vmj-r5cp \| CVSS: 7.7 (/repo/mcp/shared/package-lock.json:None)
- **[high] GHSA-mh99-v99m-4gvg — npm brace-expansion@5.0.6** — aliases: CVE-2026-14257, GHSA-mh99-v99m-4gvg \| CVSS: 7.5 (/repo/mcp/shared/package-lock.json:None)
- **[low] GHSA-v422-hmwv-36x6 — npm body-parser@1.20.5** — aliases: CVE-2026-12590, GHSA-v422-hmwv-36x6 \| CVSS: 3.7 (/repo/platform/terraform/gcp/modules/portal/identity-platform/functions/identity-platform/package-lock.json:None)
- **[high] GHSA-3jxr-9vmj-r5cp — npm brace-expansion@1.1.15** — aliases: CVE-2026-13149, GHSA-3jxr-9vmj-r5cp \| CVSS: 7.7 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[high] GHSA-mh99-v99m-4gvg — npm brace-expansion@1.1.15** — aliases: CVE-2026-14257, GHSA-mh99-v99m-4gvg \| CVSS: 7.5 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[high] GHSA-3jxr-9vmj-r5cp — npm brace-expansion@2.1.1** — aliases: CVE-2026-13149, GHSA-3jxr-9vmj-r5cp \| CVSS: 7.7 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[high] GHSA-mh99-v99m-4gvg — npm brace-expansion@2.1.1** — aliases: CVE-2026-14257, GHSA-mh99-v99m-4gvg \| CVSS: 7.5 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[high] GHSA-mh99-v99m-4gvg — npm brace-expansion@5.0.7** — aliases: CVE-2026-14257, GHSA-mh99-v99m-4gvg \| CVSS: 7.5 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-39q2-94rc-95cp — npm dompurify@3.1.6** — aliases: CVE-2026-65903, GHSA-39q2-94rc-95cp \| CVSS: 5.3 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-76mc-f452-cxcm — npm dompurify@3.1.6** — aliases: CVE-2026-65902, GHSA-76mc-f452-cxcm \| CVSS: 6.1 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[low] GHSA-c2j3-45gr-mqc4 — npm dompurify@3.1.6** — aliases: CVE-2026-66010, GHSA-c2j3-45gr-mqc4 \| CVSS: 2.1 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-cj63-jhhr-wcxv — npm dompurify@3.1.6** — aliases: CVE-2026-65913, GHSA-cj63-jhhr-wcxv \| CVSS: 5.3 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-cjmm-f4jc-qw8r — npm dompurify@3.1.6** — aliases: CVE-2026-65912, GHSA-cjmm-f4jc-qw8r \| CVSS: 5.3 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-cmwh-pvxp-8882 — npm dompurify@3.1.6** — aliases: CVE-2026-65898, GHSA-cmwh-pvxp-8882 \| CVSS: 5.1 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-crv5-9vww-q3g8 — npm dompurify@3.1.6** — aliases: CVE-2026-41239, GHSA-crv5-9vww-q3g8 \| CVSS: 6.8 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[low] GHSA-gvmj-g25r-r7wr — npm dompurify@3.1.6** — aliases: CVE-2026-65900, GHSA-gvmj-g25r-r7wr \| CVSS: 2.0 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-h7mw-gpvr-xq4m — npm dompurify@3.1.6** — aliases: CVE-2026-41240, GHSA-h7mw-gpvr-xq4m \| CVSS: 6.0 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-h8r8-wccr-v5f2 — npm dompurify@3.1.6** — aliases: CVE-2026-65914, GHSA-h8r8-wccr-v5f2 \| CVSS: 6.9 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-hpcv-96wg-7vj8 — npm dompurify@3.1.6** — aliases: CVE-2026-49458, GHSA-hpcv-96wg-7vj8 \| CVSS: 6.1 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-r47g-fvhr-h676 — npm dompurify@3.1.6** — aliases: CVE-2026-49459, GHSA-r47g-fvhr-h676 \| CVSS: 6.1 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-rp9w-3fw7-7cwq — npm dompurify@3.1.6** — aliases: CVE-2026-49978, GHSA-rp9w-3fw7-7cwq \| CVSS: 5.1 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-v2wj-7wpq-c8vv — npm dompurify@3.1.6** — aliases: CVE-2026-0540, GHSA-v2wj-7wpq-c8vv \| CVSS: 6.1 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-v8jm-5vwx-cfxm — npm dompurify@3.1.6** — aliases: CVE-2025-15599, GHSA-v8jm-5vwx-cfxm \| CVSS: 6.1 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-v9jr-rg53-9pgp — npm dompurify@3.1.6** — aliases: CVE-2026-41238, GHSA-v9jr-rg53-9pgp \| CVSS: 6.9 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-vhxf-7vqr-mrjg — npm dompurify@3.1.6** — aliases: CVE-2025-26791, GHSA-vhxf-7vqr-mrjg \| CVSS: 4.5 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[low] GHSA-vxr8-fq34-vvx9 — npm dompurify@3.1.6** — aliases: CVE-2026-65899, GHSA-vxr8-fq34-vvx9 \| CVSS: 2.1 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[informational] GHSA-x4vx-rjvf-j5p4 — npm dompurify@3.1.6** — aliases: CVE-2026-65901, GHSA-x4vx-rjvf-j5p4 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-67mh-4wv8-2f99 — npm esbuild@0.21.5** — aliases: GHSA-67mh-4wv8-2f99 \| CVSS: 5.3 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[high] GHSA-52cp-r559-cp3m — npm js-yaml@4.2.0** — aliases: CVE-2026-59869, GHSA-52cp-r559-cp3m \| CVSS: 7.5 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-6m6c-36f7-fhxh — npm mermaid@10.9.3** — aliases: CVE-2026-41150, GHSA-6m6c-36f7-fhxh \| CVSS: 5.3 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-7rqq-prvp-x9jh — npm mermaid@10.9.3** — aliases: CVE-2025-54881, GHSA-7rqq-prvp-x9jh \| CVSS: 5.3 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-87f9-hvmw-gh4p — npm mermaid@10.9.3** — aliases: CVE-2026-41159, GHSA-87f9-hvmw-gh4p \| CVSS: 5.3 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-ghcm-xqfw-q4vr — npm mermaid@10.9.3** — aliases: CVE-2026-41149, GHSA-ghcm-xqfw-q4vr \| CVSS: 5.3 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-xcj9-5m2h-648r — npm mermaid@10.9.3** — aliases: CVE-2026-41148, GHSA-xcj9-5m2h-648r \| CVSS: 5.3 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[high] GHSA-r28c-9q8g-f849 — npm postcss@8.5.16** — aliases: GHSA-r28c-9q8g-f849 \| CVSS: 7.5 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[high] GHSA-qwww-vcr4-c8h2 — npm react-router@7.18.1** — aliases: GHSA-qwww-vcr4-c8h2 \| CVSS: 7.1 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[high] GHSA-w5hq-g745-h8pq — npm uuid@9.0.1** — aliases: CVE-2026-41907, CVE-2026-41988, GHSA-w5hq-g745-h8pq \| CVSS: 7.5 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-4w7w-66w2-5vf9 — npm vite@5.4.21** — aliases: CVE-2026-39365, GHSA-4w7w-66w2-5vf9 \| CVSS: 6.3 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[high] GHSA-fx2h-pf6j-xcff — npm vite@5.4.21** — aliases: CVE-2026-53571, GHSA-fx2h-pf6j-xcff \| CVSS: 8.2 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[medium] GHSA-v6wh-96g9-6wx3 — npm vite@5.4.21** — aliases: CVE-2026-53632, GHSA-v6wh-96g9-6wx3 \| CVSS: 5.5 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[critical] GHSA-5xrq-8626-4rwp — npm vitest@2.1.9** — aliases: CVE-2026-47429, GHSA-5xrq-8626-4rwp \| CVSS: 9.8 (/repo/shifter/shifter_platform/frontend/package-lock.json:None)
- **[high] GHSA-3jxr-9vmj-r5cp — npm brace-expansion@1.1.15** — aliases: CVE-2026-13149, GHSA-3jxr-9vmj-r5cp \| CVSS: 7.7 (/repo/shifter/shifter_platform/package-lock.json:None)
- **[high] GHSA-mh99-v99m-4gvg — npm brace-expansion@1.1.15** — aliases: CVE-2026-14257, GHSA-mh99-v99m-4gvg \| CVSS: 7.5 (/repo/shifter/shifter_platform/package-lock.json:None)
- **[high] GHSA-3jxr-9vmj-r5cp — npm brace-expansion@2.1.1** — aliases: CVE-2026-13149, GHSA-3jxr-9vmj-r5cp \| CVSS: 7.7 (/repo/shifter/shifter_platform/package-lock.json:None)
- **[high] GHSA-mh99-v99m-4gvg — npm brace-expansion@2.1.1** — aliases: CVE-2026-14257, GHSA-mh99-v99m-4gvg \| CVSS: 7.5 (/repo/shifter/shifter_platform/package-lock.json:None)
- **[high] GHSA-3jxr-9vmj-r5cp — npm brace-expansion@5.0.6** — aliases: CVE-2026-13149, GHSA-3jxr-9vmj-r5cp \| CVSS: 7.7 (/repo/shifter/shifter_platform/package-lock.json:None)
- **[high] GHSA-mh99-v99m-4gvg — npm brace-expansion@5.0.6** — aliases: CVE-2026-14257, GHSA-mh99-v99m-4gvg \| CVSS: 7.5 (/repo/shifter/shifter_platform/package-lock.json:None)
- **[high] GHSA-4c8g-83qw-93j6 — npm fast-uri@3.1.2** — aliases: CVE-2026-13676, GHSA-4c8g-83qw-93j6 \| CVSS: 7.5 (/repo/shifter/shifter_platform/package-lock.json:None)
- **[high] GHSA-v2hh-gcrm-f6hx — npm fast-uri@3.1.2** — aliases: CVE-2026-16221, GHSA-v2hh-gcrm-f6hx \| CVSS: 7.5 (/repo/shifter/shifter_platform/package-lock.json:None)
- **[high] GHSA-r28c-9q8g-f849 — npm postcss@8.5.15** — aliases: GHSA-r28c-9q8g-f849 \| CVSS: 7.5 (/repo/shifter/shifter_platform/package-lock.json:None)
- **[high] PYSEC-2026-213 — PyPI daphne@4.2.1** — aliases: CVE-2026-44545, GHSA-rrc9-mx66-ffcm, PYSEC-2026-213 \| CVSS: 7.5 (/repo/shifter/shifter_platform/uv.lock:None)
- **[medium] PYSEC-2026-214 — PyPI daphne@4.2.1** — aliases: CVE-2026-44546, GHSA-xh68-hfp5-5x5m, PYSEC-2026-214 \| CVSS: 5.3 (/repo/shifter/shifter_platform/uv.lock:None)
- **[medium] PYSEC-2026-2090 — PyPI django@6.0.6** — aliases: BIT-django-2026-48588, CVE-2026-48588, PYSEC-2026-2090 \| CVSS: 5.3 (/repo/shifter/shifter_platform/uv.lock:None)
- **[medium] PYSEC-2026-2091 — PyPI django@6.0.6** — aliases: BIT-django-2026-53877, CVE-2026-53877, PYSEC-2026-2091 \| CVSS: 6.3 (/repo/shifter/shifter_platform/uv.lock:None)
- **[medium] PYSEC-2026-2092 — PyPI django@6.0.6** — aliases: BIT-django-2026-53878, CVE-2026-53878, PYSEC-2026-2092 \| CVSS: 5.3 (/repo/shifter/shifter_platform/uv.lock:None)
- **[high] PYSEC-2026-3455 — PyPI pyasn1@0.6.3** — aliases: CVE-2026-59884, GHSA-m4p7-r5rc-7g4j, PYSEC-2026-3455 \| CVSS: 7.5 (/repo/shifter/shifter_platform/uv.lock:None)
- **[high] PYSEC-2026-3456 — PyPI pyasn1@0.6.3** — aliases: CVE-2026-59885, GHSA-8ppf-4f7h-5ppj, PYSEC-2026-3456 \| CVSS: 7.5 (/repo/shifter/shifter_platform/uv.lock:None)
- **[high] PYSEC-2026-3457 — PyPI pyasn1@0.6.3** — aliases: CVE-2026-59886, GHSA-hm4w-wwcw-mr6r, PYSEC-2026-3457 \| CVSS: 7.5 (/repo/shifter/shifter_platform/uv.lock:None)

### trivy_image (v0.71.0) — unavailable / n/a

No findings.

## 4. Threat Model

Threat model synthesis has not yet run for this scan. This section is generated by the registry's LLM pipeline (Req 22.3) and will appear in the next regeneration of this report.

## 5. Audit Chain

- **Scan job:** `cc1af67f-9183-4846-8a6c-8a359fb1be37`
- **Completed:** 2026-07-30T16:01:30.971712+00:00
- **Scanner base image:** `us-central1-docker.pkg.dev/nerlo-vsk-prod/nerlo/scanner-base@sha256:04d4ebff19b52711a0fc06336d25964d24b9072474ff98811e5b82af008f1b8d`
- **AI decision log entries:** 2
  - `572899f4-4028-4a21-8374-1ff05a94a3a5`
  - `6a034ea5-f64e-4851-a69a-9f9337d6e6e2`

## 6. Appendix — Raw Scanner Output

```json
[
  {
    "scanner_name": "agentshield",
    "scanner_version": "1.4.0",
    "score": 95.0,
    "scanner_badge": "Verified",
    "findings": [
      {
        "tool_name": "agentshield",
        "severity": "medium",
        "category": "permissions",
        "file_path": "settings.json",
        "line_number": null,
        "rule_identifier": "permissions-missing-deny-rm--rf",
        "title": "Missing deny rule: Recursive force delete",
        "description": "The deny list does not block \"rm -rf\". Consider adding it to prevent recursive force delete.",
        "remediation": null
      },
      {
        "tool_name": "agentshield",
        "severity": "medium",
        "category": "permissions",
        "file_path": "settings.json",
        "line_number": null,
        "rule_identifier": "permissions-missing-deny-sudo",
        "title": "Missing deny rule: Privilege escalation",
        "description": "The deny list does not block \"sudo\". Consider adding it to prevent privilege escalation.",
        "remediation": null
      },
      {
        "tool_name": "agentshield",
        "severity": "medium",
        "category": "permissions",
        "file_path": "settings.json",
        "line_number": null,
        "rule_identifier": "permissions-missing-deny-chmod-777",
        "title": "Missing deny rule: World-writable permissions",
        "description": "The deny list does not block \"chmod 777\". Consider adding it to prevent world-writable permissions.",
        "remediation": null
      },
      {
        "tool_name": "agentshield",
        "severity": "medium",
        "category": "permissions",
        "file_path": "settings.json",
        "line_number": null,
        "rule_identifier": "permissions-missing-deny-ssh",
        "title": "Missing deny rule: SSH connections from agent",
        "description": "The deny list does not block \"ssh\". Consider adding it to prevent ssh connections from agent.",
        "remediation": null
      },
      {
        "tool_name": "agentshield",
        "severity": "medium",
        "category": "permissions",
        "file_path": "settings.json",
        "line_number": null,
        "rule_identifier": "permissions-missing-deny->-/dev/",
        "title": "Missing deny rule: Writing to device files",
        "description": "The deny list does not block \"> /dev/\". Consider adding it to prevent writing to device files.",
        "remediation": null
      },
      {
        "tool_name": "agentshield",
        "severity": "low",
        "category": "misconfiguration",
        "file_path": "settings.json",
        "line_number": null,
        "rule_identifier": "hooks-no-stop-hooks",
        "title": "No Stop hooks for session-end verification",
        "description": "Hooks are configured but no Stop hooks exist. Stop hooks run when a session ends and are useful for final verification \u2014 checking for uncommitted secrets, ensuring console.log statements were removed, or auditing file changes.",
        "remediation": "Add a Stop hook for session-end checks"
      }
    ],
    "execution_duration_seconds": 4.719628683000337,
    "status": "complete",
    "examined": null,
    "metadata": {
      "source": "npm",
      "source_url": "https://www.npmjs.com/package/ecc-agentshield",
      "install_command": "npm install -g ecc-agentshield@1.4.0",
      "scans_performed": [
        "claude_config"
      ],
      "score_breakdown": {
        "mcp": 100,
        "hooks": 100,
        "agents": 100,
        "secrets": 100,
        "permissions": 73
      }
    },
    "display_score": 95.0,
    "display_badge": "Verified"
  },
  {
    "scanner_name": "cisco-skill-scanner",
    "scanner_version": "2.0.11",
    "score": 0.0,
    "scanner_badge": "Unsafe",
    "findings": [],
    "execution_duration_seconds": 300.0,
    "status": "timeout",
    "examined": null,
    "metadata": {
      "failure_reason": "engine timeout after 300s",
      "timeout_seconds": 300
    },
    "display_score": null,
    "display_badge": "unavailable"
  },
  {
    "scanner_name": "agent-audit-kit",
    "scanner_version": "0.3.26",
    "score": 0.0,
    "scanner_badge": "Unsafe",
    "findings": [],
    "execution_duration_seconds": 300.0,
    "status": "timeout",
    "examined": null,
    "metadata": {
      "failure_reason": "engine timeout after 300s",
      "timeout_seconds": 300
    },
    "display_score": null,
    "display_badge": "unavailable"
  },
  {
    "scanner_name": "nerlo-behavioral",
    "scanner_version": "0.1.0",
    "score": 0.0,
    "scanner_badge": "Unsafe",
    "findings": [],
    "execution_duration_seconds": 300.0,
    "status": "timeout",
    "examined": null,
    "metadata": {
      "failure_reason": "engine timeout after 300s",
      "timeout_seconds": 300
    },
    "display_score": null,
    "display_badge": "unavailable"
  },
  {
    "scanner_name": "nerlo-install-instruction",
    "scanner_version": "0.1.0",
    "score": 0.0,
    "scanner_badge": "Unsafe",
    "findings": [],
    "execution_duration_seconds": 300.0,
    "status": "timeout",
    "examined": null,
    "metadata": {
      "failure_reason": "engine timeout after 300s",
      "timeout_seconds": 300
    },
    "display_score": null,
    "display_badge": "unavailable"
  },
  {
    "scanner_name": "nerlo-multi-source",
    "scanner_version": "0.1.0",
    "score": 100.0,
    "scanner_badge": "Verified",
    "findings": [],
    "execution_duration_seconds": 10.980667829979211,
    "status": "not_applicable",
    "examined": null,
    "metadata": {
      "source": "nerlo-original",
      "per_source": [],
      "report_type": "nerlo-multi-source",
      "diverged_sources": [],
      "published_surfaces_scanned": 0
    },
    "display_score": null,
    "display_badge": "unavailable"
  },
  {
    "scanner_name": "trivy",
    "scanner_version": "0.71.0",
    "score": 0.0,
    "scanner_badge": "Unsafe",
    "findings": [
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "mcp/ngfw/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-frvp-7c67-39w9",
        "title": "Node.js Adapter for Hono: Path traversal in `serve-static` on Windows via encoded backslash (`%5C`)",
        "description": "The same as the `hono` core [Path traversal in `serve-static` on Windows via encoded backslash (`%5C`)](https://github.com/honojs/hono/security/advisories/GHSA-wwfh-h76j-fc44).\n\n### Summary\n\nOn Windows hosts, an encoded backslash (`%5C`) in the request path decodes to `\\`, which the Windows path resolver treats as a separator. `serve-static` then resolves a single URL segment such as `admin\\secret.txt` into a nested file under the root and serves it, letting an attacker read static files meant t",
        "remediation": "Upgrade @hono/node-server from 1.19.14 to 2.0.5 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "low",
        "category": "npm",
        "file_path": "mcp/ngfw/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-12590",
        "title": "body-parser: body-parser: Denial of Service via invalid limit option",
        "description": "Impact: In body-parser versions prior to 1.20.6 (1.x line) and 2.3.0 (2.x line), when the parser is configured with an invalid limit option value such as an unparseable string or NaN, bytes.parse returns null and the request body size check is silently skipped. Applications that rely on limit as their primary safeguard against oversized request bodies will accept arbitrarily large payloads, leading to excessive memory and CPU usage and denial of service. Patches: This issue is fixed in body-pars",
        "remediation": "Upgrade body-parser from 2.2.2 to 1.20.6, 2.3.0 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "high",
        "category": "npm",
        "file_path": "mcp/ngfw/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-13676",
        "title": "fast-uri: fast-uri: Security policy bypass due to improper Unicode hostname canonicalization",
        "description": "fast-uri versions 2.3.1 through 3.1.2 and 4.0.0 fail to canonicalize Unicode (IDN) hostnames for HTTP-family URLs. The IDN conversion path calls a helper that does not exist on the global URL constructor, silently leaving the host in its original Unicode form while normalize() and equal() still return values that differ from a WHATWG-compatible URL parser. Applications that use fast-uri to enforce host-based policy (denylists, loopback filtering, redirect validation, outbound proxy routing) befo",
        "remediation": "Upgrade fast-uri from 3.1.2 to 4.0.1, 3.1.3, 2.4.2 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "high",
        "category": "npm",
        "file_path": "mcp/ngfw/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-16221",
        "title": "Impact: fast-uri versions from 2.3.1 through 4.1.0 (including the 3.x  ...",
        "description": "Impact: fast-uri versions from 2.3.1 through 4.1.0 (including the 3.x line up to 3.1.3 and the 2.x line up to 2.4.2) do not treat a literal backslash character (U+005C) as an authority delimiter. Node's native WHATWG URL parser, used by fetch, undici, and Node's http and https clients, normalizes the backslash to a forward slash for special schemes such as http, https, ws, wss, ftp, and file. As a result, the two parsers extract different hosts from the same input string. Applications that use f",
        "remediation": "Upgrade fast-uri from 3.1.2 to 2.4.3, 3.1.4, 4.1.1 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "mcp/ops/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-frvp-7c67-39w9",
        "title": "Node.js Adapter for Hono: Path traversal in `serve-static` on Windows via encoded backslash (`%5C`)",
        "description": "The same as the `hono` core [Path traversal in `serve-static` on Windows via encoded backslash (`%5C`)](https://github.com/honojs/hono/security/advisories/GHSA-wwfh-h76j-fc44).\n\n### Summary\n\nOn Windows hosts, an encoded backslash (`%5C`) in the request path decodes to `\\`, which the Windows path resolver treats as a separator. `serve-static` then resolves a single URL segment such as `admin\\secret.txt` into a nested file under the root and serves it, letting an attacker read static files meant t",
        "remediation": "Upgrade @hono/node-server from 1.19.14 to 2.0.5 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "low",
        "category": "npm",
        "file_path": "mcp/ops/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-12590",
        "title": "body-parser: body-parser: Denial of Service via invalid limit option",
        "description": "Impact: In body-parser versions prior to 1.20.6 (1.x line) and 2.3.0 (2.x line), when the parser is configured with an invalid limit option value such as an unparseable string or NaN, bytes.parse returns null and the request body size check is silently skipped. Applications that rely on limit as their primary safeguard against oversized request bodies will accept arbitrarily large payloads, leading to excessive memory and CPU usage and denial of service. Patches: This issue is fixed in body-pars",
        "remediation": "Upgrade body-parser from 2.2.2 to 1.20.6, 2.3.0 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "high",
        "category": "npm",
        "file_path": "mcp/ops/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-13676",
        "title": "fast-uri: fast-uri: Security policy bypass due to improper Unicode hostname canonicalization",
        "description": "fast-uri versions 2.3.1 through 3.1.2 and 4.0.0 fail to canonicalize Unicode (IDN) hostnames for HTTP-family URLs. The IDN conversion path calls a helper that does not exist on the global URL constructor, silently leaving the host in its original Unicode form while normalize() and equal() still return values that differ from a WHATWG-compatible URL parser. Applications that use fast-uri to enforce host-based policy (denylists, loopback filtering, redirect validation, outbound proxy routing) befo",
        "remediation": "Upgrade fast-uri from 3.1.2 to 4.0.1, 3.1.3, 2.4.2 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "high",
        "category": "npm",
        "file_path": "mcp/ops/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-16221",
        "title": "Impact: fast-uri versions from 2.3.1 through 4.1.0 (including the 3.x  ...",
        "description": "Impact: fast-uri versions from 2.3.1 through 4.1.0 (including the 3.x line up to 3.1.3 and the 2.x line up to 2.4.2) do not treat a literal backslash character (U+005C) as an authority delimiter. Node's native WHATWG URL parser, used by fetch, undici, and Node's http and https clients, normalizes the backslash to a forward slash for special schemes such as http, https, ws, wss, ftp, and file. As a result, the two parsers extract different hosts from the same input string. Applications that use f",
        "remediation": "Upgrade fast-uri from 3.1.2 to 2.4.3, 3.1.4, 4.1.1 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "mcp/planner/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-frvp-7c67-39w9",
        "title": "Node.js Adapter for Hono: Path traversal in `serve-static` on Windows via encoded backslash (`%5C`)",
        "description": "The same as the `hono` core [Path traversal in `serve-static` on Windows via encoded backslash (`%5C`)](https://github.com/honojs/hono/security/advisories/GHSA-wwfh-h76j-fc44).\n\n### Summary\n\nOn Windows hosts, an encoded backslash (`%5C`) in the request path decodes to `\\`, which the Windows path resolver treats as a separator. `serve-static` then resolves a single URL segment such as `admin\\secret.txt` into a nested file under the root and serves it, letting an attacker read static files meant t",
        "remediation": "Upgrade @hono/node-server from 1.19.14 to 2.0.5 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "low",
        "category": "npm",
        "file_path": "mcp/planner/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-12590",
        "title": "body-parser: body-parser: Denial of Service via invalid limit option",
        "description": "Impact: In body-parser versions prior to 1.20.6 (1.x line) and 2.3.0 (2.x line), when the parser is configured with an invalid limit option value such as an unparseable string or NaN, bytes.parse returns null and the request body size check is silently skipped. Applications that rely on limit as their primary safeguard against oversized request bodies will accept arbitrarily large payloads, leading to excessive memory and CPU usage and denial of service. Patches: This issue is fixed in body-pars",
        "remediation": "Upgrade body-parser from 2.2.2 to 1.20.6, 2.3.0 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "high",
        "category": "npm",
        "file_path": "mcp/planner/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-13676",
        "title": "fast-uri: fast-uri: Security policy bypass due to improper Unicode hostname canonicalization",
        "description": "fast-uri versions 2.3.1 through 3.1.2 and 4.0.0 fail to canonicalize Unicode (IDN) hostnames for HTTP-family URLs. The IDN conversion path calls a helper that does not exist on the global URL constructor, silently leaving the host in its original Unicode form while normalize() and equal() still return values that differ from a WHATWG-compatible URL parser. Applications that use fast-uri to enforce host-based policy (denylists, loopback filtering, redirect validation, outbound proxy routing) befo",
        "remediation": "Upgrade fast-uri from 3.1.2 to 4.0.1, 3.1.3, 2.4.2 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "high",
        "category": "npm",
        "file_path": "mcp/planner/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-16221",
        "title": "Impact: fast-uri versions from 2.3.1 through 4.1.0 (including the 3.x  ...",
        "description": "Impact: fast-uri versions from 2.3.1 through 4.1.0 (including the 3.x line up to 3.1.3 and the 2.x line up to 2.4.2) do not treat a literal backslash character (U+005C) as an authority delimiter. Node's native WHATWG URL parser, used by fetch, undici, and Node's http and https clients, normalizes the backslash to a forward slash for special schemes such as http, https, ws, wss, ftp, and file. As a result, the two parsers extract different hosts from the same input string. Applications that use f",
        "remediation": "Upgrade fast-uri from 3.1.2 to 2.4.3, 3.1.4, 4.1.1 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "low",
        "category": "npm",
        "file_path": "platform/terraform/gcp/modules/portal/identity-platform/functions/identity-platform/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-12590",
        "title": "body-parser: body-parser: Denial of Service via invalid limit option",
        "description": "Impact: In body-parser versions prior to 1.20.6 (1.x line) and 2.3.0 (2.x line), when the parser is configured with an invalid limit option value such as an unparseable string or NaN, bytes.parse returns null and the request body size check is silently skipped. Applications that rely on limit as their primary safeguard against oversized request bodies will accept arbitrarily large payloads, leading to excessive memory and CPU usage and denial of service. Patches: This issue is fixed in body-pars",
        "remediation": "Upgrade body-parser from 1.20.5 to 1.20.6, 2.3.0 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2025-15599",
        "title": "DOMPurify: DOMPurify: Cross-site scripting",
        "description": "DOMPurify 3.1.3 through 3.2.6 and 2.5.3 through 2.5.8 contain a cross-site scripting vulnerability that allows attackers to bypass attribute sanitization by exploiting missing textarea rawtext element validation in the SAFE_FOR_XML regex. Attackers can include closing rawtext tags like </textarea> in attribute values to break out of rawtext contexts and execute JavaScript when sanitized output is placed inside rawtext elements. The 3.x branch was fixed in 3.2.7; the 2.x branch was never patched.",
        "remediation": "Upgrade dompurify from 3.1.6 to 3.2.7 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2025-26791",
        "title": "dompurify: Mutation XSS in DOMPurify Due to Improper Template Literal Handling",
        "description": "DOMPurify before 3.2.4 has an incorrect template literal regular expression, sometimes leading to mutation cross-site scripting (mXSS).",
        "remediation": "Upgrade dompurify from 3.1.6 to 3.2.4 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-0540",
        "title": "DOMPurify: DOMPurify: Cross-site scripting vulnerability",
        "description": "DOMPurify 3.1.3 through 3.3.1 and 2.5.3 through 2.5.8, fixed in commit 2726c74, contain a cross-site scripting vulnerability that allows attackers to bypass attribute sanitization by exploiting five missing rawtext elements (noscript, xmp, noembed, noframes, iframe) in the SAFE_FOR_XML regex. Attackers can include payloads like </noscript><img src=x onerror=alert(1)> in attribute values to execute JavaScript when sanitized output is placed inside these unprotected rawtext contexts.",
        "remediation": "Upgrade dompurify from 3.1.6 to 3.3.2, 2.5.9 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-41238",
        "title": "DOMPurify: DOMPurify: Cross-Site Scripting bypass via prototype pollution",
        "description": "DOMPurify is a DOM-only cross-site scripting sanitizer for HTML, MathML, and SVG. Versions 3.0.1 through 3.3.3 are vulnerable to a prototype pollution-based XSS bypass. When an application uses `DOMPurify.sanitize()` with the default configuration (no `CUSTOM_ELEMENT_HANDLING` option), a prior prototype pollution gadget can inject permissive `tagNameCheck` and `attributeNameCheck` regex values into `Object.prototype`, causing DOMPurify to allow arbitrary custom elements with arbitrary attributes",
        "remediation": "Upgrade dompurify from 3.1.6 to 3.4.0 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-41239",
        "title": "DOMPurify: Vue 2: DOMPurify: Cross-site scripting due to incomplete sanitization of template expressions",
        "description": "DOMPurify is a DOM-only cross-site scripting sanitizer for HTML, MathML, and SVG. Starting in version 1.0.10 and prior to version 3.4.0, `SAFE_FOR_TEMPLATES` strips `{{...}}` expressions from untrusted HTML. This works in string mode but not with `RETURN_DOM` or `RETURN_DOM_FRAGMENT`, allowing XSS via template-evaluating frameworks like Vue 2. Version 3.4.0 patches the issue.",
        "remediation": "Upgrade dompurify from 3.1.6 to 3.4.0 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-41240",
        "title": "DOMPurify: DOMPurify: Cross-Site Scripting (XSS) via inconsistent tag sanitization",
        "description": "DOMPurify is a DOM-only cross-site scripting sanitizer for HTML, MathML, and SVG. Versions prior to 3.4.0 have an inconsistency between FORBID_TAGS and FORBID_ATTR handling when function-based ADD_TAGS is used. Commit c361baa added an early exit for FORBID_ATTR at line 1214. The same fix was not applied to FORBID_TAGS. At line 1118-1123, when EXTRA_ELEMENT_HANDLING.tagCheck returns true, the short-circuit evaluation skips the FORBID_TAGS check entirely. This allows forbidden elements to survive ",
        "remediation": "Upgrade dompurify from 3.1.6 to 3.4.0 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-49458",
        "title": "dompurify: DOMPurify: Cross-site scripting due to improper sanitization of DOM nodes",
        "description": "DOMPurify is a DOM-only cross-site scripting sanitizer for HTML, MathML, and SVG. Prior to 3.4.6, DOMPurify.sanitize(node, { IN_PLACE: true }) accepted same-origin foreign-realm DOM nodes while follow-on checks used parent-realm constructors, causing instanceof checks for forms, named node maps, document fragments, and elements to fail and skip clobber, template-content, and shadow-DOM sanitization branches so executable markup could survive. This issue is fixed in version 3.4.6.",
        "remediation": "Upgrade dompurify from 3.1.6 to 3.4.6 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-49459",
        "title": "dompurify: DOMPurify: Cross-site scripting bypass allows arbitrary script execution",
        "description": "DOMPurify is a DOM-only cross-site scripting sanitizer for HTML, MathML, and SVG. Prior to 3.4.6, DOMPurify.sanitize(root, { IN_PLACE: true }) could preserve event-handler attributes on an attacker-controlled <form> root when a descendant name clobbered properties checked by _isClobbered, because _forceRemove no-opped on the parent-less root and _sanitizeAttributes returned early. This issue is fixed in version 3.4.6.",
        "remediation": "Upgrade dompurify from 3.1.6 to 3.4.6 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-49978",
        "title": "dompurify: DOMPurify: Cross-site scripting vulnerability allows code execution",
        "description": "DOMPurify is a DOM-only cross-site scripting sanitizer for HTML, MathML, and SVG. Prior to 3.4.7, DOMPurify IN_PLACE sanitization could skip shadow contents attached to an element inside <template>.content, allowing attacker-controlled markup such as event handlers, JavaScript URLs, or scripts to survive and execute when an application cloned and inserted the sanitized template. This issue is fixed in version 3.4.7.",
        "remediation": "Upgrade dompurify from 3.1.6 to 3.4.7 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-65898",
        "title": "DOMPurify before 3.4.11 fails to clone the ALLOWED_ATTR allowlist when ...",
        "description": "DOMPurify before 3.4.11 fails to clone the ALLOWED_ATTR allowlist when setConfig() is used with an uponSanitizeAttribute hook, allowing the hook to permanently mutate the shared allowlist. Attackers can register a hook that conditionally allows dangerous attributes like onerror for trusted elements, then submit untrusted content that inherits the polluted allowlist and executes event handlers as stored XSS.",
        "remediation": "Upgrade dompurify from 3.1.6 to 3.4.11 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-65902",
        "title": "DOMPurify before 3.4.7 (affected versions <= 3.4.5) passes direct refe ...",
        "description": "DOMPurify before 3.4.7 (affected versions <= 3.4.5) passes direct references to the module-level DEFAULT_ALLOWED_TAGS and DEFAULT_ALLOWED_ATTR sets to the uponSanitizeElement and uponSanitizeAttribute hooks via data.allowedTags / data.allowedAttributes when sanitize is called without an explicit cfg.ALLOWED_TAGS / cfg.ALLOWED_ATTR array. A hook that mutates these fields permanently widens the default allow-lists for the lifetime of the DOMPurify instance, so all subsequent default-config sanitiz",
        "remediation": "Upgrade dompurify from 3.1.6 to 3.4.7 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-65903",
        "title": "dompurify: DOMPurify: Security bypass allows injection of malicious content",
        "description": "DOMPurify before 3.4.0 contains a logic error in the ADD_TAGS function where short-circuit evaluation allows forbidden tags to bypass FORBID_TAGS restrictions. Attackers can craft input containing tags listed in FORBID_TAGS that are also added via ADD_TAGS function, causing them to be retained in sanitized output.",
        "remediation": "Upgrade dompurify from 3.1.6 to 3.4.0 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-65912",
        "title": "DOMPurify before 3.3.2 contains a URI validation bypass vulnerability  ...",
        "description": "DOMPurify before 3.3.2 contains a URI validation bypass vulnerability when ADD_ATTR is provided as a predicate function via EXTRA_ELEMENT_HANDLING.attributeCheck. Attackers can supply a predicate that accepts specific attribute and tag combinations to bypass URI-safe validation, allowing unsafe protocols like javascript: to survive sanitization and execute as DOM-based XSS when the link is activated.",
        "remediation": "Upgrade dompurify from 3.1.6 to 3.3.2 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-65913",
        "title": "DOMPurify before 3.3.2 contains a prototype pollution vulnerability in ...",
        "description": "DOMPurify before 3.3.2 contains a prototype pollution vulnerability in USE_PROFILES mode that allows attackers to bypass attribute filtering by polluting Array.prototype properties. Attackers can set Array.prototype properties like onclick to true, causing DOMPurify to accept event handlers as allowlisted attributes and resulting in DOM-based XSS when sanitized markup is rendered.",
        "remediation": "Upgrade dompurify from 3.1.6 to 3.3.2 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-65914",
        "title": "DOMPurify before 3.3.2 contains a mutation-XSS vulnerability when sani ...",
        "description": "DOMPurify before 3.3.2 contains a mutation-XSS vulnerability when sanitized HTML is reinserted into special parsing contexts using innerHTML with wrappers like script, xmp, iframe, noembed, noframes, or noscript. Attackers can craft payloads with closing sequences that break out of the wrapper context during reparsing, reactivating dangerous markup with event handlers to execute JavaScript.",
        "remediation": "Upgrade dompurify from 3.1.6 to 3.3.2 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "low",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-65899",
        "title": "DOMPurify 3.0.0 before 3.4.9 does not reset the retained Trusted Types ...",
        "description": "DOMPurify 3.0.0 before 3.4.9 does not reset the retained Trusted Types policy when clearConfig() is called, so a DOMPurify instance reused across trust boundaries stays bound to a previously supplied TRUSTED_TYPES_POLICY. A later caller that requests RETURN_TRUSTED_TYPE output receives a TrustedHTML object created by the old (potentially unsafe) policy rather than a clean default, which can lead to script execution at a Trusted Types sink. Passing TRUSTED_TYPES_POLICY: null on the later call als",
        "remediation": "Upgrade dompurify from 3.1.6 to 3.4.9 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "low",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-65900",
        "title": "DOMPurify versions >=3.0.0 and before 3.4.8, when configured with SAFE ...",
        "description": "DOMPurify versions >=3.0.0 and before 3.4.8, when configured with SAFE_FOR_TEMPLATES together with a DOM output mode (RETURN_DOM, RETURN_DOM_FRAGMENT, or IN_PLACE), fail to strip template expressions (e.g. ${evil}, {{evil}}, <%evil%>) inside <template> element content. The final normalization/scrub pass (_scrubTemplateExpressions) uses a NodeIterator and node.normalize() that do not descend into template.content, so expressions that only form after adjacent text nodes merge survive sanitization.",
        "remediation": "Upgrade dompurify from 3.1.6 to 3.4.8 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "low",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-65901",
        "title": "DOMPurify through 3.4.6 contains a cross-site scripting vulnerability  ...",
        "description": "DOMPurify through 3.4.6 contains a cross-site scripting vulnerability in IN_PLACE mode that trusts attacker-controlled nodeName on live non-form nodes. Attackers can supply hostile live DOM objects with real script children whose observable nodeName is clobbered to appear as allowed elements, causing scripts to execute when the sanitized tree is inserted into a live document.",
        "remediation": null
      },
      {
        "tool_name": "trivy",
        "severity": "low",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-c2j3-45gr-mqc4",
        "title": "DOMPurify: `CUSTOM_ELEMENT_HANDLING` bypasses `afterSanitizeElements` for allowed custom elements.",
        "description": "## Summary\n\nThere is a possible hook-policy inconsistency in DOMPurify 3.4.11 involving `CUSTOM_ELEMENT_HANDLING`.\n\nWhen a custom element is allowed via `CUSTOM_ELEMENT_HANDLING.tagNameCheck`, it appears that the element does not go through `afterSanitizeElements` in the same way as a normal element. As a result, an application that relies on `afterSanitizeElements` as a security policy layer to strip sensitive attributes from all elements may see those attributes removed from normal elements bu",
        "remediation": "Upgrade dompurify from 3.1.6 to 3.4.12 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-67mh-4wv8-2f99",
        "title": "esbuild enables any website to send any requests to the development server and read the response",
        "description": "### Summary\n\nesbuild allows any websites to send any request to the development server and read the response due to default CORS settings.\n\n### Details\n\nesbuild sets `Access-Control-Allow-Origin: *` header to all requests, including the SSE connection, which allows any websites to send any request to the development server and read the response.\n\nhttps://github.com/evanw/esbuild/blob/df815ac27b84f8b34374c9182a93c94718f8a630/pkg/api/serve_other.go#L121\nhttps://github.com/evanw/esbuild/blob/df815a",
        "remediation": "Upgrade esbuild from 0.21.5 to 0.25.0 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2025-54881",
        "title": "Mermaid improperly sanitizes sequence diagram labels leading to XSS",
        "description": "Mermaid is a JavaScript based diagramming and charting tool that uses Markdown-inspired text definitions and a renderer to create and modify complex diagrams. In the default configuration of mermaid 10.9.0-rc.1 to 11.9.0, user supplied input for sequence diagram labels is passed to innerHTML during calculation of element size, causing XSS.",
        "remediation": "Upgrade mermaid from 10.9.3 to 11.10.0, 10.9.4 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-41148",
        "title": "mermaid: Mermaid: CSS injection vulnerability allows page defacement and information disclosure",
        "description": "Mermaid is a JavaScript tool that uses Markdown-inspired text to create and modify diagrams and charts. Versions 10.9.5 and prior, in addition to 11.0.0-alpha.1 through 11.12.0 are vulnerable to CSS injection through improper sanitization. The state diagram (and any other diagram type that routes user-controlled style strings through the createCssStyles parser) captures classDef values using an unrestricted regex that matches everything up to a newline. That value then flows unsanitized through ",
        "remediation": "Upgrade mermaid from 10.9.3 to 11.15.0, 10.9.6 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-41149",
        "title": "mermaid: Mermaid: HTML injection via classDef directive in state diagrams",
        "description": "Mermaid is a JavaScript tool that uses Markdown-inspired text to create and modify diagrams and charts. Versions 10.9.5 and earlier, as well as 11.0.0-alpha.1 through 11.14.0, are vulnerable to HTML injection under the default configuration. Specifically, the classDef directive in Mermaid state diagrams permits DOM injection that escapes the SVG context. However, <script> tags are stripped, which prevents cross-site scripting (XSS). This issue has been fixed in versions 10.9.6 and 11.15.0. If de",
        "remediation": "Upgrade mermaid from 10.9.3 to 11.15.0, 10.9.6 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-41150",
        "title": "mermaid: Mermaid: Denial of Service via specially crafted gantt charts",
        "description": "Mermaid is a JavaScript tool that uses Markdown-inspired text to create and modify diagrams and charts. Prior to 10.9.6 and 11.15.0, there is a denial-of-service attack when rendering gantt charts, if they use the excludes attribute to exclude all dates. mermaid.parse is unaffected, unless you then call the ganttDb.getTasks() (which is called when rendering a diagram). This vulnerability is fixed in 10.9.6 and 11.15.0.",
        "remediation": "Upgrade mermaid from 10.9.3 to 11.15.0, 10.9.6 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-41159",
        "title": "mermaid: Mermaid: Information disclosure and page defacement via CSS injection",
        "description": "Mermaid is a JavaScript tool that uses Markdown-inspired text to create and modify diagrams and charts. Prior to 10.9.6 and 11.15.0,  Mermaid's default configuration allows injecting CSS that applies outside of the Mermaid diagram via the fontFamily, themeCSS, and altFontFamily configuration options. The injected CSS exploits stylis's & (scope reference) handling. :not(&) escapes the #mermaid-xxx automatic scoping, applying styles to all page elements. Global at-rules (@font-face, @keyframes, @c",
        "remediation": "Upgrade mermaid from 10.9.3 to 11.15.0, 10.9.6 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "high",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-r28c-9q8g-f849",
        "title": "PostCSS: Path Traversal in Previous Source Map Auto-Loading (sourceMappingURL) leads to Arbitrary .map File Disclosure",
        "description": "## Vulnerability Details\n\n**File**: `lib/previous-map.js`\n**Line**: 87-98 (`loadFile`), 129-144 (`loadMap`)\n\n\n### Root Cause\nPostCSS auto-detects a `/*# sourceMappingURL=... */` comment inside the CSS text it is asked to parse and, unless the caller explicitly passes `map: false`, attempts to load that path from disk as a \"previous source map.\" This happens on every `postcss.parse()` / `postcss().process()` call by default (opt-out, not opt-in).\n\n`loadMap()` builds the candidate path via `join(d",
        "remediation": "Upgrade postcss from 8.5.16 to 8.5.18 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "high",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-qwww-vcr4-c8h2",
        "title": "React Router: RSC Mode CSRF Bypass Allows Action Execution Before 400 Response",
        "description": "This is a follow up to CVE-2026-22030 to address related CSRF flows in unstable RSC code paths.\n\n> [!NOTE]\n> This only affects your application if you are using the unstable RSC APIs",
        "remediation": "Upgrade react-router from 7.18.1 to 8.3.0 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-41907",
        "title": "uuid: uuid: Out-of-bounds write vulnerability impacts data integrity and confidentiality",
        "description": "uuid is for the creation of RFC9562 (formerly RFC4122) UUIDs. Prior to 14.0.0, v3, v5, and v6 accept external output buffers but do not reject out-of-range writes (small buf or large offset). This allows silent partial writes into caller-provided buffers. This vulnerability is fixed in 14.0.0.",
        "remediation": "Upgrade uuid from 9.0.1 to 11.1.1, 12.0.1, 13.0.1 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "high",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-53571",
        "title": "vite: `server.fs.deny` bypass on Windows alternate paths",
        "description": "Vite is a frontend tooling framework for JavaScript. Prior to 8.0.16, 7.3.5, and 6.4.3, the contents of files that are specified by server.fs.deny can be returned to the browser on Windows. Vite\u2019s dev server denies direct access to sensitive files through server.fs.deny, including entries such as .env, .env.*, and *.{crt,pem}. However, on Windows, the deny logic does not correctly normalize NTFS ADS path forms before access checks are applied. Because of this, requests such as /.env::$DATA?raw a",
        "remediation": "Upgrade vite from 5.4.21 to 8.0.16, 7.3.5, 6.4.3 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-39365",
        "title": "vite: Vite: Information disclosure via path traversal in dev server's .map request handling",
        "description": "Vite is a frontend tooling framework for JavaScript. From 6.0.0 to before 6.4.2, 7.3.2, and 8.0.5, the dev server\u2019s handling of .map requests for optimized dependencies resolves file paths and calls readFile without restricting ../ segments in the URL. As a result, it is possible to bypass the server.fs.strict allow list and retrieve .map files located outside the project root, provided they can be parsed as valid source map JSON. This vulnerability is fixed in 6.4.2, 7.3.2, and 8.0.5.",
        "remediation": "Upgrade vite from 5.4.21 to 8.0.5, 7.3.2, 6.4.2 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "npm",
        "file_path": "shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "CVE-2026-53632",
        "title": "launch-editor: launch-editor: Credential compromise via NTLMv2 password hash leak through UNC path access",
        "description": "launch-editor allows users to open files with line numbers in editor from Node.js. Prior to 2.14.1, the launch-editor NPM package accesses arbitrary paths including Windows UNC paths. When a UNC path is opened, Windows automatically attempts NTLM authentication to the remote host, causing the user\u2019s NTLMv2 password hash to be leaked to an attacker-controlled SMB server. This can result in credential compromise through offline hash cracking. This vulnerability is fixed in 2.14.1.",
        "remediation": "Upgrade vite from 5.4.21 to 8.0.16, 7.3.5, 6.4.3 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "medium",
        "category": "uv",
        "file_path": "shifter/shifter_platform/uv.lock",
        "line_number": null,
        "rule_identifier": "CVE-2026-44545",
        "title": "daphne: daphne: Denial of Service via excessive WebSocket message size",
        "description": "daphne before 4.2.2 did not pass maxFramePayloadSize or maxMessagePayloadSize to Autobahn's WebSocketServerFactory. Because Autobahn defaults both values to 0 (unlimited), an unauthenticated remote attacker could send arbitrarily large WebSocket messages or frames, causing excessive memory consumption and a denial of service.",
        "remediation": "Upgrade daphne from 4.2.1 to 4.2.2 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "low",
        "category": "uv",
        "file_path": "shifter/shifter_platform/uv.lock",
        "line_number": null,
        "rule_identifier": "CVE-2026-44546",
        "title": "daphne: daphne: Information disclosure via header injection due to parser differential",
        "description": "daphne before 4.2.2 reconstructs a raw HTTP request from Twisted's parsed headers and feeds it to autobahn for WebSocket handshake processing. Twisted does not treat \\x0b, \\x0c, \\x1c, \\x1d, \\x1e, or \\x85 as header line separators, but autobahn decodes header values to str and calls splitlines(). An attacker can exploit this parser differential to inject additional headers into the ASGI scope passed to the application. daphne now rejects requests with these bytes in any header value with a 400 re",
        "remediation": "Upgrade daphne from 4.2.1 to 4.2.2 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "high",
        "category": "uv",
        "file_path": "shifter/shifter_platform/uv.lock",
        "line_number": null,
        "rule_identifier": "CVE-2026-59885",
        "title": "pyasn1: python-pyasn1: pyasn1: Denial of Service via crafted ASN.1 OBJECT IDENTIFIER",
        "description": "pyasn1 is a generic ASN.1 library for Python. Prior to 0.6.4, the BER, CER, and DER decoders process OBJECT IDENTIFIER and RELATIVE-OID values in quadratic time relative to the number of arcs, so a small crafted payload containing an OID with many arcs consumes excessive CPU per decode() call and can deny service to applications that decode untrusted ASN.1 data. The corresponding encoders have the same quadratic behavior when an application re-encodes previously decoded attacker-supplied values.",
        "remediation": "Upgrade pyasn1 from 0.6.3 to 0.6.4 or later"
      },
      {
        "tool_name": "trivy",
        "severity": "high",
        "category": "uv",
        "file_path": "shifter/shifter_platform/uv.lock",
        "line_number": null,
        "rule_identifier": "CVE-2026-59886",
        "title": "pyasn1: pyasn1: Denial of Service via crafted ASN.1 REAL values",
        "description": "pyasn1 is a generic ASN.1 library for Python. Prior to 0.6.4, the univ.Real type converted its mantissa, base, and exponent value to a Python float using exact big-integer exponentiation. A BER, CER, or DER encoded REAL value only a few bytes long can carry a very large exponent, causing float conversion through prettyPrint(), str(), comparison, arithmetic, int(), or an explicit float() call to consume excessive CPU and memory and hang applications that decode untrusted ASN.1 data and then print",
        "remediation": "Upgrade pyasn1 from 0.6.3 to 0.6.4 or later"
      }
    ],
    "execution_duration_seconds": 18.21029108396033,
    "status": "complete",
    "examined": {
      "unit": "manifests",
      "count": 17
    },
    "metadata": {
      "source": "github-releases",
      "source_url": "https://github.com/aquasecurity/trivy/releases/tag/v0.71.0",
      "report_type": "filesystem-vulnerability",
      "install_command": "curl -sfL -o /tmp/trivy.deb https://github.com/aquasecurity/trivy/releases/download/v0.71.0/trivy_0.71.0_Linux-64bit.deb && echo '<sha256>  /tmp/trivy.deb' | sha256sum -c - && dpkg -i /tmp/trivy.deb",
      "severity_counts": {
        "low": 9,
        "high": 11,
        "medium": 28,
        "critical": 0,
        "informational": 0
      },
      "manifests_scanned": [
        "mcp/ngfw/package-lock.json",
        "mcp/ops/package-lock.json",
        "mcp/planner/package-lock.json",
        "platform/terraform/gcp/modules/portal/identity-platform/functions/identity-platform/package-lock.json",
        "scripts/assert_portal_inspection/uv.lock",
        "scripts/bootstrap/uv.lock",
        "scripts/check_layer_imports/uv.lock",
        "scripts/check_rds_pending_modifications/uv.lock",
        "scripts/gcp/uv.lock",
        "scripts/handle_sd_replacement/uv.lock",
        "shifter/cyberscript/uv.lock",
        "shifter/engine/provisioner/uv.lock",
        "shifter/installation/uv.lock",
        "shifter/packer/uv.lock",
        "shifter/shifter_platform/frontend/package-lock.json",
        "shifter/shifter_platform/uv.lock",
        "uat/event-load-harness/uv.lock"
      ]
    },
    "display_score": 0.0,
    "display_badge": "Unsafe"
  },
  {
    "scanner_name": "osv-scanner",
    "scanner_version": "2.3.8",
    "score": 0.0,
    "scanner_badge": "Unsafe",
    "findings": [
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/mcp/ngfw/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-frvp-7c67-39w9",
        "title": "GHSA-frvp-7c67-39w9 \u2014 npm @hono/node-server@1.19.14",
        "description": "aliases: GHSA-frvp-7c67-39w9 | CVSS: 5.9",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "low",
        "category": "npm",
        "file_path": "/repo/mcp/ngfw/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-v422-hmwv-36x6",
        "title": "GHSA-v422-hmwv-36x6 \u2014 npm body-parser@2.2.2",
        "description": "aliases: CVE-2026-12590, GHSA-v422-hmwv-36x6 | CVSS: 3.7",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/mcp/ngfw/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-3jxr-9vmj-r5cp",
        "title": "GHSA-3jxr-9vmj-r5cp \u2014 npm brace-expansion@5.0.6",
        "description": "aliases: CVE-2026-13149, GHSA-3jxr-9vmj-r5cp | CVSS: 7.7",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/mcp/ngfw/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-mh99-v99m-4gvg",
        "title": "GHSA-mh99-v99m-4gvg \u2014 npm brace-expansion@5.0.6",
        "description": "aliases: CVE-2026-14257, GHSA-mh99-v99m-4gvg | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/mcp/ngfw/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-4c8g-83qw-93j6",
        "title": "GHSA-4c8g-83qw-93j6 \u2014 npm fast-uri@3.1.2",
        "description": "aliases: CVE-2026-13676, GHSA-4c8g-83qw-93j6 | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/mcp/ngfw/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-v2hh-gcrm-f6hx",
        "title": "GHSA-v2hh-gcrm-f6hx \u2014 npm fast-uri@3.1.2",
        "description": "aliases: CVE-2026-16221, GHSA-v2hh-gcrm-f6hx | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/mcp/ops/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-frvp-7c67-39w9",
        "title": "GHSA-frvp-7c67-39w9 \u2014 npm @hono/node-server@1.19.14",
        "description": "aliases: GHSA-frvp-7c67-39w9 | CVSS: 5.9",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "low",
        "category": "npm",
        "file_path": "/repo/mcp/ops/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-v422-hmwv-36x6",
        "title": "GHSA-v422-hmwv-36x6 \u2014 npm body-parser@2.2.2",
        "description": "aliases: CVE-2026-12590, GHSA-v422-hmwv-36x6 | CVSS: 3.7",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/mcp/ops/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-3jxr-9vmj-r5cp",
        "title": "GHSA-3jxr-9vmj-r5cp \u2014 npm brace-expansion@5.0.6",
        "description": "aliases: CVE-2026-13149, GHSA-3jxr-9vmj-r5cp | CVSS: 7.7",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/mcp/ops/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-mh99-v99m-4gvg",
        "title": "GHSA-mh99-v99m-4gvg \u2014 npm brace-expansion@5.0.6",
        "description": "aliases: CVE-2026-14257, GHSA-mh99-v99m-4gvg | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/mcp/ops/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-4c8g-83qw-93j6",
        "title": "GHSA-4c8g-83qw-93j6 \u2014 npm fast-uri@3.1.2",
        "description": "aliases: CVE-2026-13676, GHSA-4c8g-83qw-93j6 | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/mcp/ops/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-v2hh-gcrm-f6hx",
        "title": "GHSA-v2hh-gcrm-f6hx \u2014 npm fast-uri@3.1.2",
        "description": "aliases: CVE-2026-16221, GHSA-v2hh-gcrm-f6hx | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/mcp/planner/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-frvp-7c67-39w9",
        "title": "GHSA-frvp-7c67-39w9 \u2014 npm @hono/node-server@1.19.14",
        "description": "aliases: GHSA-frvp-7c67-39w9 | CVSS: 5.9",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "low",
        "category": "npm",
        "file_path": "/repo/mcp/planner/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-v422-hmwv-36x6",
        "title": "GHSA-v422-hmwv-36x6 \u2014 npm body-parser@2.2.2",
        "description": "aliases: CVE-2026-12590, GHSA-v422-hmwv-36x6 | CVSS: 3.7",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/mcp/planner/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-3jxr-9vmj-r5cp",
        "title": "GHSA-3jxr-9vmj-r5cp \u2014 npm brace-expansion@5.0.6",
        "description": "aliases: CVE-2026-13149, GHSA-3jxr-9vmj-r5cp | CVSS: 7.7",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/mcp/planner/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-mh99-v99m-4gvg",
        "title": "GHSA-mh99-v99m-4gvg \u2014 npm brace-expansion@5.0.6",
        "description": "aliases: CVE-2026-14257, GHSA-mh99-v99m-4gvg | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/mcp/planner/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-4c8g-83qw-93j6",
        "title": "GHSA-4c8g-83qw-93j6 \u2014 npm fast-uri@3.1.2",
        "description": "aliases: CVE-2026-13676, GHSA-4c8g-83qw-93j6 | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/mcp/planner/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-v2hh-gcrm-f6hx",
        "title": "GHSA-v2hh-gcrm-f6hx \u2014 npm fast-uri@3.1.2",
        "description": "aliases: CVE-2026-16221, GHSA-v2hh-gcrm-f6hx | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/mcp/shared/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-3jxr-9vmj-r5cp",
        "title": "GHSA-3jxr-9vmj-r5cp \u2014 npm brace-expansion@5.0.6",
        "description": "aliases: CVE-2026-13149, GHSA-3jxr-9vmj-r5cp | CVSS: 7.7",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/mcp/shared/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-mh99-v99m-4gvg",
        "title": "GHSA-mh99-v99m-4gvg \u2014 npm brace-expansion@5.0.6",
        "description": "aliases: CVE-2026-14257, GHSA-mh99-v99m-4gvg | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "low",
        "category": "npm",
        "file_path": "/repo/platform/terraform/gcp/modules/portal/identity-platform/functions/identity-platform/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-v422-hmwv-36x6",
        "title": "GHSA-v422-hmwv-36x6 \u2014 npm body-parser@1.20.5",
        "description": "aliases: CVE-2026-12590, GHSA-v422-hmwv-36x6 | CVSS: 3.7",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-3jxr-9vmj-r5cp",
        "title": "GHSA-3jxr-9vmj-r5cp \u2014 npm brace-expansion@1.1.15",
        "description": "aliases: CVE-2026-13149, GHSA-3jxr-9vmj-r5cp | CVSS: 7.7",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-mh99-v99m-4gvg",
        "title": "GHSA-mh99-v99m-4gvg \u2014 npm brace-expansion@1.1.15",
        "description": "aliases: CVE-2026-14257, GHSA-mh99-v99m-4gvg | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-3jxr-9vmj-r5cp",
        "title": "GHSA-3jxr-9vmj-r5cp \u2014 npm brace-expansion@2.1.1",
        "description": "aliases: CVE-2026-13149, GHSA-3jxr-9vmj-r5cp | CVSS: 7.7",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-mh99-v99m-4gvg",
        "title": "GHSA-mh99-v99m-4gvg \u2014 npm brace-expansion@2.1.1",
        "description": "aliases: CVE-2026-14257, GHSA-mh99-v99m-4gvg | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-mh99-v99m-4gvg",
        "title": "GHSA-mh99-v99m-4gvg \u2014 npm brace-expansion@5.0.7",
        "description": "aliases: CVE-2026-14257, GHSA-mh99-v99m-4gvg | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-39q2-94rc-95cp",
        "title": "GHSA-39q2-94rc-95cp \u2014 npm dompurify@3.1.6",
        "description": "aliases: CVE-2026-65903, GHSA-39q2-94rc-95cp | CVSS: 5.3",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-76mc-f452-cxcm",
        "title": "GHSA-76mc-f452-cxcm \u2014 npm dompurify@3.1.6",
        "description": "aliases: CVE-2026-65902, GHSA-76mc-f452-cxcm | CVSS: 6.1",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "low",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-c2j3-45gr-mqc4",
        "title": "GHSA-c2j3-45gr-mqc4 \u2014 npm dompurify@3.1.6",
        "description": "aliases: CVE-2026-66010, GHSA-c2j3-45gr-mqc4 | CVSS: 2.1",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-cj63-jhhr-wcxv",
        "title": "GHSA-cj63-jhhr-wcxv \u2014 npm dompurify@3.1.6",
        "description": "aliases: CVE-2026-65913, GHSA-cj63-jhhr-wcxv | CVSS: 5.3",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-cjmm-f4jc-qw8r",
        "title": "GHSA-cjmm-f4jc-qw8r \u2014 npm dompurify@3.1.6",
        "description": "aliases: CVE-2026-65912, GHSA-cjmm-f4jc-qw8r | CVSS: 5.3",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-cmwh-pvxp-8882",
        "title": "GHSA-cmwh-pvxp-8882 \u2014 npm dompurify@3.1.6",
        "description": "aliases: CVE-2026-65898, GHSA-cmwh-pvxp-8882 | CVSS: 5.1",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-crv5-9vww-q3g8",
        "title": "GHSA-crv5-9vww-q3g8 \u2014 npm dompurify@3.1.6",
        "description": "aliases: CVE-2026-41239, GHSA-crv5-9vww-q3g8 | CVSS: 6.8",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "low",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-gvmj-g25r-r7wr",
        "title": "GHSA-gvmj-g25r-r7wr \u2014 npm dompurify@3.1.6",
        "description": "aliases: CVE-2026-65900, GHSA-gvmj-g25r-r7wr | CVSS: 2.0",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-h7mw-gpvr-xq4m",
        "title": "GHSA-h7mw-gpvr-xq4m \u2014 npm dompurify@3.1.6",
        "description": "aliases: CVE-2026-41240, GHSA-h7mw-gpvr-xq4m | CVSS: 6.0",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-h8r8-wccr-v5f2",
        "title": "GHSA-h8r8-wccr-v5f2 \u2014 npm dompurify@3.1.6",
        "description": "aliases: CVE-2026-65914, GHSA-h8r8-wccr-v5f2 | CVSS: 6.9",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-hpcv-96wg-7vj8",
        "title": "GHSA-hpcv-96wg-7vj8 \u2014 npm dompurify@3.1.6",
        "description": "aliases: CVE-2026-49458, GHSA-hpcv-96wg-7vj8 | CVSS: 6.1",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-r47g-fvhr-h676",
        "title": "GHSA-r47g-fvhr-h676 \u2014 npm dompurify@3.1.6",
        "description": "aliases: CVE-2026-49459, GHSA-r47g-fvhr-h676 | CVSS: 6.1",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-rp9w-3fw7-7cwq",
        "title": "GHSA-rp9w-3fw7-7cwq \u2014 npm dompurify@3.1.6",
        "description": "aliases: CVE-2026-49978, GHSA-rp9w-3fw7-7cwq | CVSS: 5.1",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-v2wj-7wpq-c8vv",
        "title": "GHSA-v2wj-7wpq-c8vv \u2014 npm dompurify@3.1.6",
        "description": "aliases: CVE-2026-0540, GHSA-v2wj-7wpq-c8vv | CVSS: 6.1",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-v8jm-5vwx-cfxm",
        "title": "GHSA-v8jm-5vwx-cfxm \u2014 npm dompurify@3.1.6",
        "description": "aliases: CVE-2025-15599, GHSA-v8jm-5vwx-cfxm | CVSS: 6.1",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-v9jr-rg53-9pgp",
        "title": "GHSA-v9jr-rg53-9pgp \u2014 npm dompurify@3.1.6",
        "description": "aliases: CVE-2026-41238, GHSA-v9jr-rg53-9pgp | CVSS: 6.9",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-vhxf-7vqr-mrjg",
        "title": "GHSA-vhxf-7vqr-mrjg \u2014 npm dompurify@3.1.6",
        "description": "aliases: CVE-2025-26791, GHSA-vhxf-7vqr-mrjg | CVSS: 4.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "low",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-vxr8-fq34-vvx9",
        "title": "GHSA-vxr8-fq34-vvx9 \u2014 npm dompurify@3.1.6",
        "description": "aliases: CVE-2026-65899, GHSA-vxr8-fq34-vvx9 | CVSS: 2.1",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "informational",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-x4vx-rjvf-j5p4",
        "title": "GHSA-x4vx-rjvf-j5p4 \u2014 npm dompurify@3.1.6",
        "description": "aliases: CVE-2026-65901, GHSA-x4vx-rjvf-j5p4",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-67mh-4wv8-2f99",
        "title": "GHSA-67mh-4wv8-2f99 \u2014 npm esbuild@0.21.5",
        "description": "aliases: GHSA-67mh-4wv8-2f99 | CVSS: 5.3",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-52cp-r559-cp3m",
        "title": "GHSA-52cp-r559-cp3m \u2014 npm js-yaml@4.2.0",
        "description": "aliases: CVE-2026-59869, GHSA-52cp-r559-cp3m | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-6m6c-36f7-fhxh",
        "title": "GHSA-6m6c-36f7-fhxh \u2014 npm mermaid@10.9.3",
        "description": "aliases: CVE-2026-41150, GHSA-6m6c-36f7-fhxh | CVSS: 5.3",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-7rqq-prvp-x9jh",
        "title": "GHSA-7rqq-prvp-x9jh \u2014 npm mermaid@10.9.3",
        "description": "aliases: CVE-2025-54881, GHSA-7rqq-prvp-x9jh | CVSS: 5.3",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-87f9-hvmw-gh4p",
        "title": "GHSA-87f9-hvmw-gh4p \u2014 npm mermaid@10.9.3",
        "description": "aliases: CVE-2026-41159, GHSA-87f9-hvmw-gh4p | CVSS: 5.3",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-ghcm-xqfw-q4vr",
        "title": "GHSA-ghcm-xqfw-q4vr \u2014 npm mermaid@10.9.3",
        "description": "aliases: CVE-2026-41149, GHSA-ghcm-xqfw-q4vr | CVSS: 5.3",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-xcj9-5m2h-648r",
        "title": "GHSA-xcj9-5m2h-648r \u2014 npm mermaid@10.9.3",
        "description": "aliases: CVE-2026-41148, GHSA-xcj9-5m2h-648r | CVSS: 5.3",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-r28c-9q8g-f849",
        "title": "GHSA-r28c-9q8g-f849 \u2014 npm postcss@8.5.16",
        "description": "aliases: GHSA-r28c-9q8g-f849 | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-qwww-vcr4-c8h2",
        "title": "GHSA-qwww-vcr4-c8h2 \u2014 npm react-router@7.18.1",
        "description": "aliases: GHSA-qwww-vcr4-c8h2 | CVSS: 7.1",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-w5hq-g745-h8pq",
        "title": "GHSA-w5hq-g745-h8pq \u2014 npm uuid@9.0.1",
        "description": "aliases: CVE-2026-41907, CVE-2026-41988, GHSA-w5hq-g745-h8pq | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-4w7w-66w2-5vf9",
        "title": "GHSA-4w7w-66w2-5vf9 \u2014 npm vite@5.4.21",
        "description": "aliases: CVE-2026-39365, GHSA-4w7w-66w2-5vf9 | CVSS: 6.3",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-fx2h-pf6j-xcff",
        "title": "GHSA-fx2h-pf6j-xcff \u2014 npm vite@5.4.21",
        "description": "aliases: CVE-2026-53571, GHSA-fx2h-pf6j-xcff | CVSS: 8.2",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-v6wh-96g9-6wx3",
        "title": "GHSA-v6wh-96g9-6wx3 \u2014 npm vite@5.4.21",
        "description": "aliases: CVE-2026-53632, GHSA-v6wh-96g9-6wx3 | CVSS: 5.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "critical",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-5xrq-8626-4rwp",
        "title": "GHSA-5xrq-8626-4rwp \u2014 npm vitest@2.1.9",
        "description": "aliases: CVE-2026-47429, GHSA-5xrq-8626-4rwp | CVSS: 9.8",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-3jxr-9vmj-r5cp",
        "title": "GHSA-3jxr-9vmj-r5cp \u2014 npm brace-expansion@1.1.15",
        "description": "aliases: CVE-2026-13149, GHSA-3jxr-9vmj-r5cp | CVSS: 7.7",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-mh99-v99m-4gvg",
        "title": "GHSA-mh99-v99m-4gvg \u2014 npm brace-expansion@1.1.15",
        "description": "aliases: CVE-2026-14257, GHSA-mh99-v99m-4gvg | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-3jxr-9vmj-r5cp",
        "title": "GHSA-3jxr-9vmj-r5cp \u2014 npm brace-expansion@2.1.1",
        "description": "aliases: CVE-2026-13149, GHSA-3jxr-9vmj-r5cp | CVSS: 7.7",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-mh99-v99m-4gvg",
        "title": "GHSA-mh99-v99m-4gvg \u2014 npm brace-expansion@2.1.1",
        "description": "aliases: CVE-2026-14257, GHSA-mh99-v99m-4gvg | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-3jxr-9vmj-r5cp",
        "title": "GHSA-3jxr-9vmj-r5cp \u2014 npm brace-expansion@5.0.6",
        "description": "aliases: CVE-2026-13149, GHSA-3jxr-9vmj-r5cp | CVSS: 7.7",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-mh99-v99m-4gvg",
        "title": "GHSA-mh99-v99m-4gvg \u2014 npm brace-expansion@5.0.6",
        "description": "aliases: CVE-2026-14257, GHSA-mh99-v99m-4gvg | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-4c8g-83qw-93j6",
        "title": "GHSA-4c8g-83qw-93j6 \u2014 npm fast-uri@3.1.2",
        "description": "aliases: CVE-2026-13676, GHSA-4c8g-83qw-93j6 | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-v2hh-gcrm-f6hx",
        "title": "GHSA-v2hh-gcrm-f6hx \u2014 npm fast-uri@3.1.2",
        "description": "aliases: CVE-2026-16221, GHSA-v2hh-gcrm-f6hx | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "npm",
        "file_path": "/repo/shifter/shifter_platform/package-lock.json",
        "line_number": null,
        "rule_identifier": "GHSA-r28c-9q8g-f849",
        "title": "GHSA-r28c-9q8g-f849 \u2014 npm postcss@8.5.15",
        "description": "aliases: GHSA-r28c-9q8g-f849 | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "PyPI",
        "file_path": "/repo/shifter/shifter_platform/uv.lock",
        "line_number": null,
        "rule_identifier": "PYSEC-2026-213",
        "title": "PYSEC-2026-213 \u2014 PyPI daphne@4.2.1",
        "description": "aliases: CVE-2026-44545, GHSA-rrc9-mx66-ffcm, PYSEC-2026-213 | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "PyPI",
        "file_path": "/repo/shifter/shifter_platform/uv.lock",
        "line_number": null,
        "rule_identifier": "PYSEC-2026-214",
        "title": "PYSEC-2026-214 \u2014 PyPI daphne@4.2.1",
        "description": "aliases: CVE-2026-44546, GHSA-xh68-hfp5-5x5m, PYSEC-2026-214 | CVSS: 5.3",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "PyPI",
        "file_path": "/repo/shifter/shifter_platform/uv.lock",
        "line_number": null,
        "rule_identifier": "PYSEC-2026-2090",
        "title": "PYSEC-2026-2090 \u2014 PyPI django@6.0.6",
        "description": "aliases: BIT-django-2026-48588, CVE-2026-48588, PYSEC-2026-2090 | CVSS: 5.3",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "PyPI",
        "file_path": "/repo/shifter/shifter_platform/uv.lock",
        "line_number": null,
        "rule_identifier": "PYSEC-2026-2091",
        "title": "PYSEC-2026-2091 \u2014 PyPI django@6.0.6",
        "description": "aliases: BIT-django-2026-53877, CVE-2026-53877, PYSEC-2026-2091 | CVSS: 6.3",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "medium",
        "category": "PyPI",
        "file_path": "/repo/shifter/shifter_platform/uv.lock",
        "line_number": null,
        "rule_identifier": "PYSEC-2026-2092",
        "title": "PYSEC-2026-2092 \u2014 PyPI django@6.0.6",
        "description": "aliases: BIT-django-2026-53878, CVE-2026-53878, PYSEC-2026-2092 | CVSS: 5.3",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "PyPI",
        "file_path": "/repo/shifter/shifter_platform/uv.lock",
        "line_number": null,
        "rule_identifier": "PYSEC-2026-3455",
        "title": "PYSEC-2026-3455 \u2014 PyPI pyasn1@0.6.3",
        "description": "aliases: CVE-2026-59884, GHSA-m4p7-r5rc-7g4j, PYSEC-2026-3455 | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "PyPI",
        "file_path": "/repo/shifter/shifter_platform/uv.lock",
        "line_number": null,
        "rule_identifier": "PYSEC-2026-3456",
        "title": "PYSEC-2026-3456 \u2014 PyPI pyasn1@0.6.3",
        "description": "aliases: CVE-2026-59885, GHSA-8ppf-4f7h-5ppj, PYSEC-2026-3456 | CVSS: 7.5",
        "remediation": null
      },
      {
        "tool_name": "osv-scanner",
        "severity": "high",
        "category": "PyPI",
        "file_path": "/repo/shifter/shifter_platform/uv.lock",
        "line_number": null,
        "rule_identifier": "PYSEC-2026-3457",
        "title": "PYSEC-2026-3457 \u2014 PyPI pyasn1@0.6.3",
        "description": "aliases: CVE-2026-59886, GHSA-hm4w-wwcw-mr6r, PYSEC-2026-3457 | CVSS: 7.5",
        "remediation": null
      }
    ],
    "execution_duration_seconds": 51.898372888041195,
    "status": "complete",
    "examined": {
      "unit": "manifests",
      "count": 8
    },
    "metadata": {
      "source": "github-releases",
      "source_url": "https://github.com/google/osv-scanner/releases/tag/v2.3.8",
      "report_type": "osv-vulnerability",
      "ecosystems_seen": [
        "PyPI",
        "npm"
      ],
      "install_command": "curl -sfL -o /usr/local/bin/osv-scanner https://github.com/google/osv-scanner/releases/download/v2.3.8/osv-scanner_linux_amd64 && echo '<sha256>  /usr/local/bin/osv-scanner' | sha256sum -c - && chmod +x /usr/local/bin/osv-scanner",
      "severity_counts": {
        "low": 7,
        "high": 37,
        "medium": 30,
        "critical": 1,
        "informational": 1
      },
      "manifests_scanned": [
        "/repo/mcp/ngfw/package-lock.json",
        "/repo/mcp/ops/package-lock.json",
        "/repo/mcp/planner/package-lock.json",
        "/repo/mcp/shared/package-lock.json",
        "/repo/platform/terraform/gcp/modules/portal/identity-platform/functions/identity-platform/package-lock.json",
        "/repo/shifter/shifter_platform/frontend/package-lock.json",
        "/repo/shifter/shifter_platform/package-lock.json",
        "/repo/shifter/shifter_platform/uv.lock"
      ],
      "finding_id_aliases": {
        "PYSEC-2026-213": [
          "CVE-2026-44545",
          "GHSA-rrc9-mx66-ffcm"
        ],
        "PYSEC-2026-214": [
          "CVE-2026-44546",
          "GHSA-xh68-hfp5-5x5m"
        ],
        "PYSEC-2026-2090": [
          "BIT-django-2026-48588",
          "CVE-2026-48588"
        ],
        "PYSEC-2026-2091": [
          "BIT-django-2026-53877",
          "CVE-2026-53877"
        ],
        "PYSEC-2026-2092": [
          "BIT-django-2026-53878",
          "CVE-2026-53878"
        ],
        "PYSEC-2026-3455": [
          "CVE-2026-59884",
          "GHSA-m4p7-r5rc-7g4j"
        ],
        "PYSEC-2026-3456": [
          "CVE-2026-59885",
          "GHSA-8ppf-4f7h-5ppj"
        ],
        "PYSEC-2026-3457": [
          "CVE-2026-59886",
          "GHSA-hm4w-wwcw-mr6r"
        ],
        "GHSA-39q2-94rc-95cp": [
          "CVE-2026-65903"
        ],
        "GHSA-3jxr-9vmj-r5cp": [
          "CVE-2026-13149",
          "CVE-2026-13149",
          "CVE-2026-13149",
          "CVE-2026-13149",
          "CVE-2026-13149",
          "CVE-2026-13149",
          "CVE-2026-13149",
          "CVE-2026-13149",
          "CVE-2026-13149"
        ],
        "GHSA-4c8g-83qw-93j6": [
          "CVE-2026-13676",
          "CVE-2026-13676",
          "CVE-2026-13676",
          "CVE-2026-13676"
        ],
        "GHSA-4w7w-66w2-5vf9": [
          "CVE-2026-39365"
        ],
        "GHSA-52cp-r559-cp3m": [
          "CVE-2026-59869"
        ],
        "GHSA-5xrq-8626-4rwp": [
          "CVE-2026-47429"
        ],
        "GHSA-6m6c-36f7-fhxh": [
          "CVE-2026-41150"
        ],
        "GHSA-76mc-f452-cxcm": [
          "CVE-2026-65902"
        ],
        "GHSA-7rqq-prvp-x9jh": [
          "CVE-2025-54881"
        ],
        "GHSA-87f9-hvmw-gh4p": [
          "CVE-2026-41159"
        ],
        "GHSA-c2j3-45gr-mqc4": [
          "CVE-2026-66010"
        ],
        "GHSA-cj63-jhhr-wcxv": [
          "CVE-2026-65913"
        ],
        "GHSA-cjmm-f4jc-qw8r": [
          "CVE-2026-65912"
        ],
        "GHSA-cmwh-pvxp-8882": [
          "CVE-2026-65898"
        ],
        "GHSA-crv5-9vww-q3g8": [
          "CVE-2026-41239"
        ],
        "GHSA-fx2h-pf6j-xcff": [
          "CVE-2026-53571"
        ],
        "GHSA-ghcm-xqfw-q4vr": [
          "CVE-2026-41149"
        ],
        "GHSA-gvmj-g25r-r7wr": [
          "CVE-2026-65900"
        ],
        "GHSA-h7mw-gpvr-xq4m": [
          "CVE-2026-41240"
        ],
        "GHSA-h8r8-wccr-v5f2": [
          "CVE-2026-65914"
        ],
        "GHSA-hpcv-96wg-7vj8": [
          "CVE-2026-49458"
        ],
        "GHSA-mh99-v99m-4gvg": [
          "CVE-2026-14257",
          "CVE-2026-14257",
          "CVE-2026-14257",
          "CVE-2026-14257",
          "CVE-2026-14257",
          "CVE-2026-14257",
          "CVE-2026-14257",
          "CVE-2026-14257",
          "CVE-2026-14257",
          "CVE-2026-14257"
        ],
        "GHSA-r47g-fvhr-h676": [
          "CVE-2026-49459"
        ],
        "GHSA-rp9w-3fw7-7cwq": [
          "CVE-2026-49978"
        ],
        "GHSA-v2hh-gcrm-f6hx": [
          "CVE-2026-16221",
          "CVE-2026-16221",
          "CVE-2026-16221",
          "CVE-2026-16221"
        ],
        "GHSA-v2wj-7wpq-c8vv": [
          "CVE-2026-0540"
        ],
        "GHSA-v422-hmwv-36x6": [
          "CVE-2026-12590",
          "CVE-2026-12590",
          "CVE-2026-12590",
          "CVE-2026-12590"
        ],
        "GHSA-v6wh-96g9-6wx3": [
          "CVE-2026-53632"
        ],
        "GHSA-v8jm-5vwx-cfxm": [
          "CVE-2025-15599"
        ],
        "GHSA-v9jr-rg53-9pgp": [
          "CVE-2026-41238"
        ],
        "GHSA-vhxf-7vqr-mrjg": [
          "CVE-2025-26791"
        ],
        "GHSA-vxr8-fq34-vvx9": [
          "CVE-2026-65899"
        ],
        "GHSA-w5hq-g745-h8pq": [
          "CVE-2026-41907",
          "CVE-2026-41988"
        ],
        "GHSA-x4vx-rjvf-j5p4": [
          "CVE-2026-65901"
        ],
        "GHSA-xcj9-5m2h-648r": [
          "CVE-2026-41148"
        ]
      },
      "cross_scanner_correlation": {
        "only_osv": [
          "GHSA-3jxr-9vmj-r5cp",
          "GHSA-52cp-r559-cp3m",
          "GHSA-5xrq-8626-4rwp",
          "GHSA-mh99-v99m-4gvg",
          "PYSEC-2026-2090",
          "PYSEC-2026-2091",
          "PYSEC-2026-2092",
          "PYSEC-2026-3455"
        ],
        "only_trivy": [],
        "intersection_ids": [
          "CVE-2025-15599",
          "CVE-2025-26791",
          "CVE-2025-54881",
          "CVE-2026-0540",
          "CVE-2026-12590",
          "CVE-2026-13676",
          "CVE-2026-16221",
          "CVE-2026-39365",
          "CVE-2026-41148",
          "CVE-2026-41149",
          "CVE-2026-41150",
          "CVE-2026-41159",
          "CVE-2026-41238",
          "CVE-2026-41239",
          "CVE-2026-41240",
          "CVE-2026-41907",
          "CVE-2026-44545",
          "CVE-2026-44546",
          "CVE-2026-49458",
          "CVE-2026-49459",
          "CVE-2026-49978",
          "CVE-2026-53571",
          "CVE-2026-53632",
          "CVE-2026-59885",
          "CVE-2026-59886",
          "CVE-2026-65898",
          "CVE-2026-65899",
          "CVE-2026-65900",
          "CVE-2026-65901",
          "CVE-2026-65902",
          "CVE-2026-65903",
          "CVE-2026-65912",
          "CVE-2026-65913",
          "CVE-2026-65914",
          "GHSA-67mh-4wv8-2f99",
          "GHSA-c2j3-45gr-mqc4",
          "GHSA-frvp-7c67-39w9",
          "GHSA-qwww-vcr4-c8h2",
          "GHSA-r28c-9q8g-f849"
        ]
      }
    },
    "display_score": 0.0,
    "display_badge": "Unsafe"
  },
  {
    "scanner_name": "trivy_image",
    "scanner_version": "0.71.0",
    "score": 100.0,
    "scanner_badge": "Verified",
    "findings": [],
    "execution_duration_seconds": 0.0012264199904166162,
    "status": "not_applicable",
    "examined": {
      "unit": "image_targets",
      "count": 0
    },
    "metadata": {
      "reason": "no OCI image acquired for this artifact"
    },
    "display_score": null,
    "display_badge": "unavailable"
  }
]
```
