Back to skill

Security audit

Robot Id Card

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a real bot identity toolkit, but its artifacts show serious security gaps that could expose bot identity and let others manipulate trust ratings.

Install only for review, experimentation, or tightly controlled local development. Do not rely on this as a production bot identity or access-control system until the registry signature placeholder, admin authentication, report moderation, replay protection, SDK caching, browser-extension scoping, private-key storage, dependency updates, and network binding defaults are fixed.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (9)

T09 · Insecure Skill Coding Practices

Error
Location
packages/registry/src/routes/audit.ts:23
Finding

Known Fallback Administrator Credential Permits Unauthorized Grade Changes

Content
View full analysis
{ const body = GradeUpdateSchema.safeParse(request.body) if (!body.success) { return reply.status(400).send({ error: 'Invalid request', details: body.error.flatten() }) } const { ric_id, grade, reason, admin_key } = body.data if (admin_key !== ADMIN_KEY) { return reply.status(403).send({ error: 'Forbidden' }) } const cert = botStore.findById(ric_id) if (!cert) { return reply.status(404).send({ error: 'Bot not found', ric_id }) } const oldGrade = cert.grade botStore.updateGrade(ric_id, grade) ``` ### Technical Analysis When `RIC_ADMIN_KEY` is absent, the registry silently uses the publicly visible value `dev-admin-key-change-me`. The `/v1/audit/grade` endpoint accepts this secret inside the request body and uses a normal string comparison. Although `render.yaml` generates a secret for the documented Render deployment, local installations and alternative deployments can start successfully without one. This makes the known fallback an active administrative credential. ### Attack Path 1. Locate a reachable registry and a target RIC identifier. 2. Send a POST request to `/v1/audit/grade`. 3. Supply `admin_key` as `dev-admin-key-change-me`. 4. Select an arbitrary grade such as `healthy` or `dangerous`. 5. The registry updates the target bot's authorization and reputation state. ### Impact Assessment An unauthenticated network client can obtain registry-level grade-management privileges when the fallback ...[truncated 162 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Error
Location
packages/registry/src/routes/audit.ts:38
Finding

Unauthenticated Reports Can Automatically Disable Arbitrary Bots

Content
View full analysis
{ const body = ReportSchema.safeParse(request.body) if (!body.success) { return reply.status(400).send({ error: 'Invalid report', details: body.error.flatten() }) } const { ric_id, reporter_domain, reason, description } = body.data const cert = botStore.findById(ric_id) if (!cert) { return reply.status(404).send({ error: 'Bot not found', ric_id }) } const entry = auditStore.append({ ric_id, event: 'violation_report', reason, reporter: reporter_domain, description, }) const recentCount = botStore.countRecentReports(ric_id) if (recentCount >= 3 && cert.grade !== 'dangerous') { const oldGrade = cert.grade botStore.updateGrade(ric_id, 'dangerous') auditStore.append({ ric_id, event: 'grade_changed', old_grade: oldGrade, new_grade: 'dangerous', reason: `Auto-flagged: ${recentCount} violation reports in 24h`, }) } return reply.status(202).send({ message: 'Report submitted for review', report_id: entry.id, }) }) ``` ### Technical Analysis The reporting route requires no reporter authentication, signed request, domain-control proof, or moderation approval. `reporter_domain` is caller-supplied text rather than a verified identity. Three accepted reports within 24 hours automatically change the target's grade to `dangerous`. Global rate limiting does not establish reporter uniqueness and does not prevent a single caller from submitting the three reports needed for automatic enforcement. ### Attack Path 1. Query the public bot list or otherwise obtain a victim RIC ID. 2. Submit three reports to `/v1/audit/report`. 3. Use arbitrary or different values for `reporter_domain`. 4. ...[truncated 442 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
packages/registry/src/routes/verify.ts:125
Finding

Optional Nonces and Unbounded Future Legacy Timestamps Permit Replay

Content
View full analysis
nowSec + 30) { return reply.status(401).send({ error: 'Signature created timestamp is in the future', code: 'CLOCK_SKEW', }) } if (nowSec - created > 300) { return reply.status(401).send({ error: 'Signature expired (> 5 minutes old)', code: 'EXPIRED', }) } if (expires !== undefined && nowSec > expires) { return reply.status(401).send({ error: 'Signature past its expires field', code: 'EXPIRED', }) } if (nonce) { const fresh = botStore.checkAndMarkNonce(nonce, keyid, created) if (!fresh) { return reply.status(401).send({ error: 'Nonce already used — replay attack detected', code: 'NONCE_REPLAY', }) } } ``` ```ts const { ric_id, timestamp, signature, message } = body as { ric_id?: string timestamp?: number signature?: string message?: string } if (!ric_id || !timestamp || !signature) { return reply.status(400).send({ error: 'Missing ric_id, timestamp, or signature', }) } const age = Date.now() - timestamp if (age > 5 * 60 * 1000) { return reply.status(401).send({ error: 'Request expired', code: 'EXPIRED', }) } ``` ### Technical Analysis RFC 9421 requests are accepted without a nonce because uniqueness is checked only when `nonce` is present. Such signatures can be replayed throughout their accepted lifetime. The legacy verifier only checks whether a timestamp is too old. If a valid request is signed with a timestamp far in the future, `Date.now() - timestamp` is negative and never exceeds the five-minute threshold until that future time has passed. Nonce state is also marked before cryptographic signature verification. This allows invalid requests containing another party's nonce to consume that nonc ...[truncated 1084 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
packages/sdk/src/verify.ts:75
Finding

SDK Verification Cache Omits Signature and Request Context

Content
View full analysis
Date.now()) return cached.result try { const res = await fetch(`${registryUrl}/v1/verify`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ signature_input: headers.signatureInput, signature: headers.signature, signature_agent: headers.signatureAgent, authority: options.authority ?? '', method: options.method ?? 'GET', path: options.path ?? '/', }), }) const result: RICVerifyResult = await res.json() cache.set(cacheKey, { result, expiresAt: Date.now() + cacheTtl, }) return result } catch { return null } } ``` ### Technical Analysis The cache key contains only the extracted key ID and `Signature-Input`. It omits: - The actual signature bytes. - Request authority. - HTTP method. - Request path. - Registry URL. - Current registry grade or revocation state. After one valid request is cached, a later request with the same `Signature-Input` can receive the cached result without cryptographic verification, even if its signature or request context differs. ### Attack Path 1. Cause or observe one valid request that populates the process-wide SDK cache. 2. Reuse the same `Signature-Input`. 3. Change the signature, method, path, or authority. 4. Submit the altered request to the same application instance. 5. The SDK finds the incomplete cache key and returns the prior successful result without calling the registry. ### Impact Assessment The flaw can bypass signature validation and request binding for the ...[truncated 190 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
packages/cli/src/index.ts:33
Finding

Raw Private Keys Are Stored Without Restrictive File or Platform Protection

Content
View full analysis
{ await refreshHeaders() sendResponse({ success: true }) }) ``` ### Technical Analysis The CLI writes unencrypted Ed25519 private keys without specifying mode `0600`. Effective permissions therefore depend on the user's umask and existing destination file. The registration output combines public certificate data and the private key in one file, increasing the chance that a file treated as a certificate will be copied or published. The browser extension stores the raw private key in `chrome.storage.local` rather than a hardware-backed, non-exportable, or otherwise protected key facility. ### Attack Path 1. The user generates or registers an identity. 2. A plaintext key file is created with inherited permissions, or the private key is placed in extension storage. 3. Another local process, user, backup system, malware instance, or extension compromise reads the key. 4. The attacker signs claims and HTTP requests as the victim bot. ### Impact Assessment Disclosure grants the ability to impersonate the affected bot and submit valid ownership claims and request signatures. The compromise persists until the identity ...[truncated 98 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
packages/extension/src/background.ts:102
Finding

Browser Extension Injects a Stable Identity into All HTTPS Sites

Content
View full analysis
" ] ``` ```ts const signatureInput = `${label}=${sigInputParams}` const signature = `${label}=:${sigB64}:` const signatureAgent = `"RIC-Extension"; cert="https://registry.robotidcard.dev/v1/bots/${config.ricId}"` await chrome.declarativeNetRequest.updateDynamicRules({ removeRuleIds: [HEADER_RULE_ID], addRules: [ { id: HEADER_RULE_ID, priority: 1, action: { type: 'modifyHeaders' as chrome.declarativeNetRequest.RuleActionType, requestHeaders: [ { header: 'Signature-Input', operation: 'set', value: signatureInput }, { header: 'Signature', operation: 'set', value: signature }, { header: 'Signature-Agent', operation: 'set', value: signatureAgent }, ], }, condition: { urlFilter: '|https://', resourceTypes: [ 'xmlhttprequest', 'main_frame', 'sub_frame', ], }, }, ], }) ``` ### Technical Analysis The extension requests access to all URLs and injects RIC headers into all HTTPS main-frame, sub-frame, and XHR requests. `Signature-Agent` includes a stable certificate URL containing the user's RIC identifier. The Base64 conversion in this file serializes an Ed25519 signature; it does not encode or transmit the private key. The confirmed issue is the indiscriminate disclosure of a stable identity and the excessive host scope. ### Attack Path 1. A user imports a RIC private key and enables the extension. 2. The extension installs a global dynamic request rule. 3. The user browses unrelated HTTPS sites. 4. Each covered site receives th ...[truncated 459 chars]
Remediation
View remediation
` with an explicit user-managed allowlist. - Request optional per-origin host permissions only when the user opts in. - Inject headers only for sites that advertise or request RIC authentication. - Exclude subresources and frames unless they explicitly require authentication. - Provide a clear per-site enable/disable indicator. - Consider origin-specific unlinkable identifiers rather than one global identifier. - Explain identity disclosure and tracking implications before activation. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
packages/extension/src/popup.ts:43
Finding

Registry-Controlled Fields Are Rendered as Extension HTML Without Escaping

Content
View full analysis
${cert.bot.name} ${grade.emoji} ${grade.label}
RIC ID ${cert.id}
Developer ${cert.developer.name} ${ cert.developer.org ? `· ${cert.developer.org}` : '' }
Purpose ${cert.bot.purpose}
` } ``` ### Technical Analysis Bot name, developer name, organization, purpose, and ID are inserted directly into `innerHTML`. These values are fetched from the public registry, and registration validates their type and length but does not escape HTML characters. Extension content-security policy may limit inline script execution, but it does not make direct HTML insertion safe. Crafted markup can alter the trusted popup interface, create misleading elements, or become a stronger extension-context injection if executable sinks or CSP conditions change. ### Attack Path 1. Register a bot containing crafted HTML in an accepted text field. 2. Configure the ex ...[truncated 488 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
packages/registry/src/routes/registration.ts:88
Finding

Issued Certificates Contain Random Placeholder Values Instead of Registry Signatures

Content
View full analysis
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
packages/registry/src/index.ts:16
Finding

Registry Binds to All Interfaces Despite a Documented Localhost Boundary

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (91)

Known Vulnerable Dependency: vitest==1.6.1 — 1 advisory(ies): CVE-2026-47429 (When Vitest UI server is listening, arbitrary file can be read and executed)

Critical
Category
Supply Chain
Confidence
90% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: vitest==1.6.1 — 1 advisory(ies): CVE-2026-47429 (When Vitest UI server is listening, arbitrary file can be read and executed)

Critical
Category
Supply Chain
Confidence
90% confidence
Finding

Vitest 1.6.1 is reported vulnerable when the Vitest UI server is exposed, enabling arbitrary file read and execution. Because this package.json only references 'vitest ... run src' and does not enable the UI server, the practical exposure is development/test-scoped rather than production runtime; however, it still poses risk in developer environments or CI agents if the vulnerable feature is used elsewhere.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: vitest==1.6.1 — 1 advisory(ies): CVE-2026-47429 (When Vitest UI server is listening, arbitrary file can be read and executed)

Critical
Category
Supply Chain
Confidence
97% confidence
Finding

The package declares vitest 1.6.1, which is flagged with a critical advisory involving arbitrary file read and code execution when the Vitest UI server is exposed. Although this is a devDependency and not part of production runtime, it can still compromise developer workstations or CI environments if the affected UI/server mode is used.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The analyzed behavior appears limited to header extraction and remote verification usage, while the description claims a full identity/authentication standard with local trust infrastructure. This discrepancy is dangerous because remote verification wrappers are not equivalent to implementing the underlying security guarantees, yet users may assume they are.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The analyzed behavior appears limited to header extraction and remote verification usage, while the description claims a full identity/authentication standard with local trust infrastructure. This discrepancy is dangerous because remote verification wrappers are not equivalent to implementing the underlying security guarantees, yet users may assume they are.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The analyzed behavior appears limited to header extraction and remote verification usage, while the description claims a full identity/authentication standard with local trust infrastructure. This discrepancy is dangerous because remote verification wrappers are not equivalent to implementing the underlying security guarantees, yet users may assume they are.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The analyzed behavior appears limited to header extraction and remote verification usage, while the description claims a full identity/authentication standard with local trust infrastructure. This discrepancy is dangerous because remote verification wrappers are not equivalent to implementing the underlying security guarantees, yet users may assume they are.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The analyzed behavior appears limited to header extraction and remote verification usage, while the description claims a full identity/authentication standard with local trust infrastructure. This discrepancy is dangerous because remote verification wrappers are not equivalent to implementing the underlying security guarantees, yet users may assume they are.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The analyzed behavior appears limited to header extraction and remote verification usage, while the description claims a full identity/authentication standard with local trust infrastructure. This discrepancy is dangerous because remote verification wrappers are not equivalent to implementing the underlying security guarantees, yet users may assume they are.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The analyzed behavior appears limited to header extraction and remote verification usage, while the description claims a full identity/authentication standard with local trust infrastructure. This discrepancy is dangerous because remote verification wrappers are not equivalent to implementing the underlying security guarantees, yet users may assume they are.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The analyzed behavior appears limited to header extraction and remote verification usage, while the description claims a full identity/authentication standard with local trust infrastructure. This discrepancy is dangerous because remote verification wrappers are not equivalent to implementing the underlying security guarantees, yet users may assume they are.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · docs/deploy.md (reported line 74)May include surrounding context.

md
Packages are scoped under `@robot-id-card/`. The `publishConfig.access: "public"` flag is set in both `package.json` files.

Required npm token: create a **Automation** token at npmjs.com → Account → Access Tokens, then add as `NPM_TOKEN` in GitHub repo secrets for automated CI publishing.

---

Known Vulnerable Dependency: fast-uri==3.1.0 — 7 advisory(ies): CVE-2026-13676 (fast-uri vulnerable to host confusion via failed IDN canonicalization); CVE-2026-18446 (fast-uri vulnerable to host confusion via backslash authority introducer); CVE-2026-75975 (fast-uri vulnerable to server-side request forgery via malformed IPv6 normalizat) +4 more

High
Category
Supply Chain
Confidence
91% confidence
Finding

fast-uri is used transitively by Fastify and JSON/schema handling, and the cited host confusion/SSRF class issues can matter in a network-facing identity/registry service that parses or validates attacker-controlled URLs or hosts. In the context of a bot identity registry, URI parsing mistakes can undermine origin checks, callback validation, or access-control logic tied to hostnames.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: fastify==5.8.2 — 3 advisory(ies): CVE-2025-32442 (Fastify has a Body Schema Validation Bypass via Leading Space in Content-Type He); CVE-2026-3635 (fastify: request.protocol and request.host Spoofable via X-Forwarded-Proto/Host ); CVE-2026-18504 (fastify vulnerable to schema validation bypass via root primitive coercion misma)

High
Category
Supply Chain
Confidence
96% confidence
Finding

fastify 5.8.2 is a direct dependency of the registry package, which appears to be an internet-facing service handling authentication and signed identity workflows. The cited issues include schema-validation bypass and spoofable host/protocol handling, which are especially dangerous in systems making trust decisions based on request metadata or validated request bodies.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: find-my-way==9.5.0 — 1 advisory(ies): CVE-2026-47219 (find-my-way: DDoS with HTTP2)

High
Category
Supply Chain
Confidence
88% confidence
Finding

find-my-way is Fastify's router and the cited issue is an HTTP/2 DDoS condition. Because this project includes a registry service intended for public access, a routing-layer denial of service can meaningfully reduce availability even if it does not directly expose data.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: nanoid==5.1.7 — 2 advisory(ies): CVE-2026-67214 (nanoid: non-secure generators can loop indefinitely with negative size); CVE-2026-73086 (nanoid: Integer Overflow or Wraparound)

High
Category
Supply Chain
Confidence
80% confidence
Finding

nanoid 5.1.7 is a direct dependency of the registry package, and the cited flaws can cause hangs or incorrect behavior when sizes are attacker-influenced or insufficiently validated. In a public registry service, any ID-generation path reachable from untrusted input can become a denial-of-service or reliability issue.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: picomatch==4.0.3 — 2 advisory(ies): CVE-2026-33672 (Picomatch: Method Injection in POSIX Character Classes causes incorrect Glob Mat); CVE-2026-33671 (Picomatch has a ReDoS vulnerability via extglob quantifiers)

High
Category
Supply Chain
Confidence
80% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: postcss==8.5.8 — 4 advisory(ies): CVE-2026-45623 (PostCSS: Arbitrary file read and information disclosure via attacker-controlled ); CVE-2026-69153 (PostCSS: incomplete fix of GHSA-6g55-p6wh-862q — attacker-controlled sourceMappi); CVE-2026-41305 (PostCSS has XSS via Unescaped </style> in its CSS Stringify Output) +1 more

High
Category
Supply Chain
Confidence
80% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: nanoid==3.3.11 — 3 advisory(ies): CVE-2026-67214 (nanoid: non-secure generators can loop indefinitely with negative size); CVE-2026-67213 (nanoid: custom generators can loop indefinitely when size is zero); CVE-2026-73086 (nanoid: Integer Overflow or Wraparound)

High
Category
Supply Chain
Confidence
80% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: vite==5.4.21 — 3 advisory(ies): CVE-2026-39365 (Vite Vulnerable to Path Traversal in Optimized Deps `.map` Handling); CVE-2026-53571 (vite: `server.fs.deny` bypass on Windows alternate paths); CVE-2026-53632 (launch-editor: NTLMv2 hash disclosure via UNC path handling on Windows)

High
Category
Supply Chain
Confidence
80% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: vite==8.0.0 — 5 advisory(ies): CVE-2026-39365 (Vite Vulnerable to Path Traversal in Optimized Deps `.map` Handling); CVE-2026-53571 (vite: `server.fs.deny` bypass on Windows alternate paths); CVE-2026-39363 (Vite Vulnerable to Arbitrary File Read via Vite Dev Server WebSocket) +2 more

High
Category
Supply Chain
Confidence
80% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: vite==5.4.21 — 3 advisory(ies): CVE-2026-39365 (Vite Vulnerable to Path Traversal in Optimized Deps `.map` Handling); CVE-2026-53571 (vite: `server.fs.deny` bypass on Windows alternate paths); CVE-2026-53632 (launch-editor: NTLMv2 hash disclosure via UNC path handling on Windows)

High
Category
Supply Chain
Confidence
96% confidence
Finding

The package range ^5.4.0 can resolve to vite 5.4.21, which is flagged with multiple known high-severity advisories including path traversal and Windows-specific protections bypass. Even though Vite is a devDependency, it commonly runs a local development server and build tooling; if used in developer environments or CI, these issues can expose files, bypass filesystem restrictions, or leak credentials in affected setups.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The code claims RFC 9421-style signing but intentionally signs a wildcard placeholder authority ('"@authority": *') that cannot match the real destination. This undermines message-binding guarantees and can cause relying parties to accept signatures that are detached from the actual request target, weakening authentication semantics and enabling misuse if verifiers fall back to partial checks.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

Modifying all HTTPS requests to attach identity headers without clear in-flow disclosure creates a privacy and security risk: users may unknowingly authenticate or identify themselves to every visited site. In this skill context, the danger is increased because the product is specifically an identity standard, so silent universal propagation of identity assertions directly contradicts least privilege and user expectation.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: fastify==5.8.2 — 3 advisory(ies): CVE-2025-32442 (Fastify has a Body Schema Validation Bypass via Leading Space in Content-Type He); CVE-2026-3635 (fastify: request.protocol and request.host Spoofable via X-Forwarded-Proto/Host ); CVE-2026-18504 (fastify vulnerable to schema validation bypass via root primitive coercion misma)

High
Category
Supply Chain
Confidence
89% confidence
Finding

The manifest includes Fastify 5.8.2, which is flagged with multiple advisories affecting request validation and proxy-derived protocol/host handling. In a registry server that issues or validates bot identities and likely relies on HTTP trust boundaries, schema-bypass or spoofed host/protocol behavior could enable request smuggling of unvalidated input, incorrect security decisions, or abuse of origin/proxy logic.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.env_credential_access

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
packages/cli/src/index.ts:22