{"data":{"skill":{"slug":"get-convex-convex-auth","name":"convex-auth","icon":"📦","repo":"https://github.com/get-convex/agent-skills/tree/c41ece22681a50d326e54f30d24148a6d46d0c3c/skills/convex-auth","status":"approved","author":"get-convex","authorVersion":null,"skillstoreRevision":1},"audit":{"id":"edafcbf9-7ba6-4a71-bb1d-66f8a0d2a7e5","skill_id":"b7a48b7d-e3b4-4bcd-93d4-5303c42558f8","version":1,"content_hash":"v3:d9e5ab86dafd32a1ddde9b8b4fde177589b55b95:4909b6f370df16f557a4c23bfbf61ca2543a1f776770ff79c22ac9007c9ae2e8:2668c0155d0e483fc9590d98beada97c97fda260a1bed0b1ea976ea7b30e4a24:736b696c6c732f6765742d636f6e7665782f636f6e7665782d61757468:104a12e417e265ac6110da94b6d33dab","risk_level":"high","is_blocked":false,"safe_to_publish":false,"analysis_status":"ok","agent_auto_install_policy":"confirmation_required","manual_install_policy":"allowed","summary":"Eight findings are confirmed because package execution and JWT secret handling create project, supply-chain, and credential-exposure risks. Six findings are false positives caused by Markdown, a fixed import, an illustrative localhost URL, or misclassified prose. No prompt injection or malicious intent was found.","remediation":[{"issue":"The key-generation command writes a private JWT key to a plaintext file without restrictive permissions.","severity":"high","suggestion":"Avoid persistent plaintext storage. If temporary storage is necessary, enforce owner-only permissions, exclude the file from version control, and delete it reliably."},{"issue":"The CLI fallback places private key material in command arguments.","severity":"high","suggestion":"Use a secret-input mechanism that keeps JWT_PRIVATE_KEY out of process listings and shell history."},{"issue":"Package installation and npx instructions can execute mutable third-party package code.","severity":"medium","suggestion":"Pin exact package versions and verify package integrity before installation or npx execution."}],"risk_factor_evidence":[{"factor":"scripts","evidence":[{"file":"SKILL.md","line_end":17,"line_start":17}]},{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":14,"line_start":14},{"file":"SKILL.md","line_end":16,"line_start":16},{"file":"SKILL.md","line_end":18,"line_start":18},{"file":"SKILL.md","line_end":20,"line_start":20},{"file":"SKILL.md","line_end":25,"line_start":25},{"file":"SKILL.md","line_end":28,"line_start":28}]},{"factor":"network","evidence":[{"file":"SKILL.md","line_end":18,"line_start":18}]},{"factor":"env_access","evidence":[{"file":"SKILL.md","line_end":16,"line_start":16},{"file":"SKILL.md","line_end":17,"line_start":17},{"file":"SKILL.md","line_end":18,"line_start":18},{"file":"SKILL.md","line_end":25,"line_start":25}]}],"critical_findings":[],"high_findings":[{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":18,"line_start":18}],"confidence":0.95,"description":"Then set JWT_PRIVATE_KEY and JWKS (from .auth-keys.json) plus SITE_URL on the deployment. Prefer the","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The CLI fallback places JWT private key material in process arguments. This risks exposure through process listings or shell history."},{"title":"Generic API/secret keys","locations":[{"file":"SKILL.md","line_end":17,"line_start":17}],"confidence":0.98,"description":"node -e 'import(\"jose\").then(async({generateKeyPair,exportPKCS8,exportJWK})=>{const k=await generate","review_kind":"capability","source_category":"env_access","source_severity":"high","confidence_reasoning":"The command creates a private JWT key and redirects it into plaintext .auth-keys.json without setting restrictive permissions."},{"title":"Generic API/secret keys","locations":[{"file":"SKILL.md","line_end":18,"line_start":18}],"confidence":0.97,"description":"Then set JWT_PRIVATE_KEY and JWKS (from .auth-keys.json) plus SITE_URL on the deployment. Prefer the","review_kind":"capability","source_category":"env_access","source_severity":"high","confidence_reasoning":"The instruction reads generated key material and writes it into deployment configuration. Its CLI fallback can expose the secret in process arguments."},{"title":"Generic API/secret keys","locations":[{"file":"SKILL.md","line_end":25,"line_start":25}],"confidence":0.9,"description":"- Generate JWT_PRIVATE_KEY/JWKS with `jose` (extractable RS256; PKCS8 newlines to spaces; JWKS = {ke","review_kind":"capability","source_category":"env_access","source_severity":"high","confidence_reasoning":"The rule directs the agent to generate and deploy a JWT private key. This grants access to authentication secrets and privileged configuration."},{"title":"Crypto seed/private key mention","locations":[{"file":"SKILL.md","line_end":17,"line_start":17}],"confidence":0.99,"description":"node -e 'import(\"jose\").then(async({generateKeyPair,exportPKCS8,exportJWK})=>{const k=await generate","review_kind":"security","source_category":"sensitive","source_severity":"high","confidence_reasoning":"The command generates an actual JWT signing private key and stores it in a local plaintext file. This is genuine sensitive-key handling."}],"medium_findings":[{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":14,"line_start":14}],"confidence":0.72,"description":"1. Install @convex-dev/auth (pinned build) and add it to convex.config.ts. With pnpm, also `pnpm add","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The skill directs the agent to install packages, which executes lifecycle code and changes dependencies. The jose version is not explicitly pinned."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":20,"line_start":20}],"confidence":0.91,"description":"5. Wire the client: ConvexAuthProvider, the sign-in component, and route guards. If you import shadc","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The npx command downloads and executes a mutable latest package version. A compromised or changed release could run code in the project environment."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":28,"line_start":28}],"confidence":0.91,"description":"- Install any shadcn/ui primitive you import up front (`npx shadcn@latest add ...`); a missing @/com","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The npx command executes the mutable shadcn latest release. It exposes the project environment to unpinned third-party package code."}],"low_findings":[],"dangerous_patterns":[],"files_scanned":1,"total_lines":30,"audit_model":"codex","audited_at":"2026-09-07T13:53:51.354+00:00","created_at":"2026-09-08T15:34:16.558567+00:00","static_findings":[{"id":"scripts:SKILL.md:17:dynamic-import-expression","file":"SKILL.md","pattern":"Dynamic import() expression","snippet":"node -e 'import(\"jose\").then(async({generateKeyPair,exportPKCS8,exportJWK})=>{const k=await generate","category":"scripts","line_end":17,"severity":"medium","line_start":17},{"id":"external_commands:SKILL.md:14:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"1. Install @convex-dev/auth (pinned build) and add it to convex.config.ts. With pnpm, also `pnpm add","category":"external_commands","line_end":14,"severity":"medium","line_start":14},{"id":"external_commands:SKILL.md:16:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"3. Generate the auth keys HEADLESSLY. Do NOT run the interactive `npx @convex-dev/auth` wizard: it n","category":"external_commands","line_end":16,"severity":"medium","line_start":16},{"id":"external_commands:SKILL.md:18:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Then set JWT_PRIVATE_KEY and JWKS (from .auth-keys.json) plus SITE_URL on the deployment. Prefer the","category":"external_commands","line_end":18,"severity":"medium","line_start":18},{"id":"external_commands:SKILL.md:20:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"5. Wire the client: ConvexAuthProvider, the sign-in component, and route guards. If you import shadc","category":"external_commands","line_end":20,"severity":"medium","line_start":20},{"id":"external_commands:SKILL.md:25:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Generate JWT_PRIVATE_KEY/JWKS with `jose` (extractable RS256; PKCS8 newlines to spaces; JWKS = {ke","category":"external_commands","line_end":25,"severity":"medium","line_start":25},{"id":"external_commands:SKILL.md:28:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Install any shadcn/ui primitive you import up front (`npx shadcn@latest add ...`); a missing @/com","category":"external_commands","line_end":28,"severity":"medium","line_start":28},{"id":"network:SKILL.md:18:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"Then set JWT_PRIVATE_KEY and JWKS (from .auth-keys.json) plus SITE_URL on the deployment. Prefer the","category":"network","line_end":18,"severity":"low","line_start":18},{"id":"env_access:SKILL.md:16:generic-api-secret-keys","file":"SKILL.md","pattern":"Generic API/secret keys","snippet":"3. Generate the auth keys HEADLESSLY. Do NOT run the interactive `npx @convex-dev/auth` wizard: it n","category":"env_access","line_end":16,"severity":"high","line_start":16},{"id":"env_access:SKILL.md:17:generic-api-secret-keys","file":"SKILL.md","pattern":"Generic API/secret keys","snippet":"node -e 'import(\"jose\").then(async({generateKeyPair,exportPKCS8,exportJWK})=>{const k=await generate","category":"env_access","line_end":17,"severity":"high","line_start":17},{"id":"env_access:SKILL.md:18:generic-api-secret-keys","file":"SKILL.md","pattern":"Generic API/secret keys","snippet":"Then set JWT_PRIVATE_KEY and JWKS (from .auth-keys.json) plus SITE_URL on the deployment. Prefer the","category":"env_access","line_end":18,"severity":"high","line_start":18},{"id":"env_access:SKILL.md:25:generic-api-secret-keys","file":"SKILL.md","pattern":"Generic API/secret keys","snippet":"- Generate JWT_PRIVATE_KEY/JWKS with `jose` (extractable RS256; PKCS8 newlines to spaces; JWKS = {ke","category":"env_access","line_end":25,"severity":"high","line_start":25},{"id":"sensitive:SKILL.md:17:crypto-seed-private-key-mention","file":"SKILL.md","pattern":"Crypto seed/private key mention","snippet":"node -e 'import(\"jose\").then(async({generateKeyPair,exportPKCS8,exportJWK})=>{const k=await generate","category":"sensitive","line_end":17,"severity":"high","line_start":17},{"id":"blocker:SKILL.md:18:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"Then set JWT_PRIVATE_KEY and JWKS (from .auth-keys.json) plus SITE_URL on the deployment. Prefer the","category":"blocker","line_end":18,"severity":"low","line_start":18}],"finding_verdicts":[{"id":"scripts:SKILL.md:17:dynamic-import-expression","reason":"The expression imports the fixed jose package inside a documented key-generation command. No user-controlled module path or dynamic code source is present.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:14:ruby-shell-backtick-execution","reason":"The skill directs the agent to install packages, which executes lifecycle code and changes dependencies. The jose version is not explicitly pinned.","verdict":"confirmed","severity":"medium","confidence":0.72},{"id":"external_commands:SKILL.md:16:ruby-shell-backtick-execution","reason":"The backticks delimit Markdown around a command the skill explicitly forbids. They are not Ruby execution syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:18:ruby-shell-backtick-execution","reason":"The CLI fallback places JWT private key material in process arguments. This risks exposure through process listings or shell history.","verdict":"confirmed","severity":"high","confidence":0.95},{"id":"external_commands:SKILL.md:20:ruby-shell-backtick-execution","reason":"The npx command downloads and executes a mutable latest package version. A compromised or changed release could run code in the project environment.","verdict":"confirmed","severity":"medium","confidence":0.91},{"id":"external_commands:SKILL.md:25:ruby-shell-backtick-execution","reason":"The backticks mark tool and variable names in Markdown. The only npx command on this line is explicitly prohibited.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:28:ruby-shell-backtick-execution","reason":"The npx command executes the mutable shadcn latest release. It exposes the project environment to unpinned third-party package code.","verdict":"confirmed","severity":"medium","confidence":0.91},{"id":"network:SKILL.md:18:hardcoded-url","reason":"The localhost URL is an illustrative development SITE_URL. It is not an external destination or a hidden network endpoint.","verdict":"false_positive","confidence":0.99},{"id":"env_access:SKILL.md:16:generic-api-secret-keys","reason":"This line names required JWT variables and forbids an interactive wizard. It does not read, transmit, or expose an existing secret.","verdict":"false_positive","confidence":0.98},{"id":"env_access:SKILL.md:17:generic-api-secret-keys","reason":"The command creates a private JWT key and redirects it into plaintext .auth-keys.json without setting restrictive permissions.","verdict":"confirmed","severity":"high","confidence":0.98},{"id":"env_access:SKILL.md:18:generic-api-secret-keys","reason":"The instruction reads generated key material and writes it into deployment configuration. Its CLI fallback can expose the secret in process arguments.","verdict":"confirmed","severity":"high","confidence":0.97},{"id":"env_access:SKILL.md:25:generic-api-secret-keys","reason":"The rule directs the agent to generate and deploy a JWT private key. This grants access to authentication secrets and privileged configuration.","verdict":"confirmed","severity":"high","confidence":0.9},{"id":"sensitive:SKILL.md:17:crypto-seed-private-key-mention","reason":"The command generates an actual JWT signing private key and stores it in a local plaintext file. This is genuine sensitive-key handling.","verdict":"confirmed","severity":"high","confidence":0.99},{"id":"blocker:SKILL.md:18:system-reconnaissance","reason":"The line configures three known deployment variables. It does not enumerate the system, inspect unrelated settings, or collect host information.","verdict":"false_positive","confidence":0.99}],"semantic_findings":[],"subject_marketplace_commit_sha":"d9e5ab86dafd32a1ddde9b8b4fde177589b55b95","subject_content_hash":"4909b6f370df16f557a4c23bfbf61ca2543a1f776770ff79c22ac9007c9ae2e8","subject_tree_hash":"2668c0155d0e483fc9590d98beada97c97fda260a1bed0b1ea976ea7b30e4a24","subject_plugin_path":"skills/get-convex/convex-auth","audit_payload_hash":"104a12e417e265ac6110da94b6d33dab","confirmed_risk_level":"high","scanner_version":"3.0.0","policy_version":"skillstore-security-audit-policy-v1","subject":{"marketplaceCommitSha":"d9e5ab86dafd32a1ddde9b8b4fde177589b55b95","contentHash":"4909b6f370df16f557a4c23bfbf61ca2543a1f776770ff79c22ac9007c9ae2e8","treeHash":"2668c0155d0e483fc9590d98beada97c97fda260a1bed0b1ea976ea7b30e4a24","pluginPath":"skills/get-convex/convex-auth","auditPayloadHash":"104a12e417e265ac6110da94b6d33dab"},"scannerVersion":"3.0.0","policyVersion":"skillstore-security-audit-policy-v1"},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"issued","url":"/api/skills/get-convex-convex-auth/audits/1/attestation","status":"active"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"high","confirmedFindingCount":1,"capabilityReviewCount":7,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"confirmation_required","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"active","verificationState":"not_verified"},"isLatest":true}}