{"data":{"skill":{"slug":"expo-upgrading-expo","name":"upgrading-expo","icon":"📦","repo":"https://github.com/expo/skills/tree/main/plugins/upgrading-expo/skills/upgrading-expo/","status":"approved","author":"expo","authorVersion":null,"skillstoreRevision":null},"audit":{"id":"33a42fc0-c00b-4122-8863-f1df9da01f22","skill_id":"38f72859-7ec7-4778-8aaf-d184da29a597","version":3,"content_hash":"8f18e0d946bb3459e5b185cf14a35212","risk_level":"medium","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":null,"manual_install_policy":null,"summary":"Static analysis flagged many Markdown backticks, documentation URLs, and API names as dangerous code patterns. Review found no executable skill scripts, credential access, prompt injection, or malicious intent, but the skill does instruct agents to run project-changing Expo, CocoaPods, Gradle, and deletion commands. Publish with a warning that commands should be reviewed before execution in user projects.","remediation":[],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"references/new-architecture.md","line_end":33,"line_start":27},{"file":"references/new-architecture.md","line_end":51,"line_start":33},{"file":"references/new-architecture.md","line_end":53,"line_start":51},{"file":"references/new-architecture.md","line_end":55,"line_start":53},{"file":"references/new-architecture.md","line_end":65,"line_start":55},{"file":"references/new-architecture.md","line_end":70,"line_start":65},{"file":"references/new-architecture.md","line_end":72,"line_start":70},{"file":"references/new-architecture.md","line_end":72,"line_start":72},{"file":"references/new-architecture.md","line_end":76,"line_start":72},{"file":"references/new-architecture.md","line_end":77,"line_start":76},{"file":"references/react-19.md","line_end":9,"line_start":9},{"file":"references/react-19.md","line_end":9,"line_start":9},{"file":"references/react-19.md","line_end":19,"line_start":11},{"file":"references/react-19.md","line_end":21,"line_start":19},{"file":"references/react-19.md","line_end":22,"line_start":21},{"file":"references/react-19.md","line_end":26,"line_start":22},{"file":"references/react-19.md","line_end":28,"line_start":26},{"file":"references/react-19.md","line_end":38,"line_start":28},{"file":"references/react-19.md","line_end":44,"line_start":38},{"file":"references/react-19.md","line_end":44,"line_start":44},{"file":"references/react-19.md","line_end":46,"line_start":44},{"file":"references/react-19.md","line_end":58,"line_start":46},{"file":"references/react-19.md","line_end":62,"line_start":58},{"file":"references/react-19.md","line_end":63,"line_start":62},{"file":"references/react-19.md","line_end":64,"line_start":63},{"file":"references/react-19.md","line_end":71,"line_start":64},{"file":"references/react-19.md","line_end":71,"line_start":71},{"file":"references/react-19.md","line_end":77,"line_start":71},{"file":"references/react-19.md","line_end":77,"line_start":77},{"file":"references/react-19.md","line_end":78,"line_start":77},{"file":"references/react-19.md","line_end":79,"line_start":78},{"file":"references/react-19.md","line_end":79,"line_start":79},{"file":"references/react-compiler.md","line_end":3,"line_start":3},{"file":"references/react-compiler.md","line_end":3,"line_start":3},{"file":"references/react-compiler.md","line_end":3,"line_start":3},{"file":"references/react-compiler.md","line_end":7,"line_start":7},{"file":"references/react-compiler.md","line_end":17,"line_start":9},{"file":"references/react-compiler.md","line_end":23,"line_start":17},{"file":"references/react-compiler.md","line_end":23,"line_start":23},{"file":"references/react-compiler.md","line_end":30,"line_start":23},{"file":"references/react-compiler.md","line_end":40,"line_start":30},{"file":"references/react-compiler.md","line_end":56,"line_start":40},{"file":"SKILL.md","line_end":21,"line_start":18},{"file":"SKILL.md","line_end":23,"line_start":21},{"file":"SKILL.md","line_end":27,"line_start":23},{"file":"SKILL.md","line_end":31,"line_start":27},{"file":"SKILL.md","line_end":45,"line_start":31},{"file":"SKILL.md","line_end":47,"line_start":45},{"file":"SKILL.md","line_end":49,"line_start":47},{"file":"SKILL.md","line_end":49,"line_start":49},{"file":"SKILL.md","line_end":53,"line_start":49},{"file":"SKILL.md","line_end":54,"line_start":53},{"file":"SKILL.md","line_end":55,"line_start":54},{"file":"SKILL.md","line_end":61,"line_start":55},{"file":"SKILL.md","line_end":62,"line_start":61},{"file":"SKILL.md","line_end":63,"line_start":62},{"file":"SKILL.md","line_end":63,"line_start":63},{"file":"SKILL.md","line_end":63,"line_start":63},{"file":"SKILL.md","line_end":63,"line_start":63},{"file":"SKILL.md","line_end":71,"line_start":63},{"file":"SKILL.md","line_end":71,"line_start":71},{"file":"SKILL.md","line_end":71,"line_start":71},{"file":"SKILL.md","line_end":72,"line_start":71},{"file":"SKILL.md","line_end":73,"line_start":72},{"file":"SKILL.md","line_end":73,"line_start":73},{"file":"SKILL.md","line_end":74,"line_start":73},{"file":"SKILL.md","line_end":74,"line_start":74},{"file":"SKILL.md","line_end":75,"line_start":74},{"file":"SKILL.md","line_end":75,"line_start":75},{"file":"SKILL.md","line_end":80,"line_start":75},{"file":"SKILL.md","line_end":84,"line_start":80},{"file":"SKILL.md","line_end":85,"line_start":84},{"file":"SKILL.md","line_end":92,"line_start":85},{"file":"SKILL.md","line_end":93,"line_start":92},{"file":"SKILL.md","line_end":99,"line_start":93}]},{"factor":"network","evidence":[{"file":"references/new-architecture.md","line_end":7,"line_start":7},{"file":"SKILL.md","line_end":59,"line_start":59},{"file":"SKILL.md","line_end":95,"line_start":95}]}],"critical_findings":[],"high_findings":[],"medium_findings":[{"title":"Project-Changing Shell Commands in Upgrade Guidance","locations":[{"file":"SKILL.md","line_end":20,"line_start":18},{"file":"SKILL.md","line_end":30,"line_start":27},{"file":"SKILL.md","line_end":46,"line_start":45},{"file":"SKILL.md","line_end":55,"line_start":53},{"file":"references/new-architecture.md","line_end":54,"line_start":53},{"file":"references/new-architecture.md","line_end":77,"line_start":76}],"confidence":0.78,"description":"The skill recommends shell commands that install packages, clear caches, regenerate native directories, and remove local dependency folders. These are normal Expo upgrade actions, but an agent should not run them without user awareness because they can modify project state and remove generated files.","confidence_reasoning":"The commands are directly present in Markdown guidance and include installation, cleanup, and prebuild actions. They appear legitimate for Expo upgrades, so the risk is operational rather than malicious."}],"low_findings":[{"title":"Static Command-Execution Alerts Are Mostly Markdown False Positives","locations":[{"file":"SKILL.md","line_end":95,"line_start":18},{"file":"references/new-architecture.md","line_end":77,"line_start":27},{"file":"references/react-19.md","line_end":79,"line_start":9},{"file":"references/react-compiler.md","line_end":59,"line_start":3}],"confidence":0.86,"description":"Most external command alerts refer to Markdown code fences, inline package names, JSX snippets, or migration examples. I found no executable script file, dynamic command construction, or hidden code path in the reviewed skill files.","confidence_reasoning":"The flagged content is visible Markdown documentation, and no executable source file is present among the scanned files. Some shell commands remain operationally sensitive, which is covered by the medium finding."},{"title":"Network and Weak-Crypto Alerts Are Documentation False Positives","locations":[{"file":"references/new-architecture.md","line_end":7,"line_start":7},{"file":"SKILL.md","line_end":59,"line_start":59},{"file":"SKILL.md","line_end":95,"line_start":95},{"file":"references/react-19.md","line_end":63,"line_start":63},{"file":"references/react-compiler.md","line_end":59,"line_start":59}],"confidence":0.91,"description":"The hardcoded URLs point to Expo documentation and migration references. The weak cryptographic algorithm alerts appear to be triggered by ordinary words in documentation, with no cryptographic implementation or hash function usage found.","confidence_reasoning":"The cited lines contain documentation URLs or migration prose rather than network code or cryptographic operations. There is no evidence of data transfer, hashing, encryption, or credential handling."},{"title":"Browser Storage and Reconnaissance Alerts Lack Malicious Context","locations":[{"file":"SKILL.md","line_end":74,"line_start":74},{"file":"SKILL.md","line_end":55,"line_start":55},{"file":"SKILL.md","line_end":82,"line_start":82}],"confidence":0.88,"description":"The browser storage hit is a deprecated package table entry for AsyncStorage replacement guidance. The reconnaissance hits map to normal mobile build cleanup instructions and section headings, with no host probing or network scanning behavior found.","confidence_reasoning":"The relevant lines are documentation about package migration and build cleanup. I found no semantic evidence of credential collection, browser storage access, system enumeration, or network reconnaissance."}],"dangerous_patterns":[{"title":"Shell Commands Require User Review Before Execution","locations":[{"file":"SKILL.md","line_end":30,"line_start":18},{"file":"SKILL.md","line_end":55,"line_start":45},{"file":"references/new-architecture.md","line_end":77,"line_start":53},{"file":"references/react-compiler.md","line_end":56,"line_start":55}],"confidence":0.8,"description":"The skill contains commands such as Expo installs, cache clearing, prebuild regeneration, CocoaPods update, and Gradle cleanup. These commands are appropriate for the stated task but should be treated as user-approved maintenance actions.","confidence_reasoning":"The command examples are explicit and contextually related to Expo maintenance. The concern is safe execution practice, not confirmed malicious behavior."}],"files_scanned":4,"total_lines":320,"audit_model":"codex","audited_at":"2026-06-30T01:15:48.937+00:00","created_at":"2026-06-30T01:34:34.373412+00:00","static_findings":[],"finding_verdicts":[],"semantic_findings":[],"subject_marketplace_commit_sha":null,"subject_content_hash":null,"subject_tree_hash":null,"subject_plugin_path":null,"audit_payload_hash":null,"confirmed_risk_level":null,"scanner_version":null,"policy_version":null,"subject":{"marketplaceCommitSha":null,"contentHash":null,"treeHash":null,"pluginPath":null,"auditPayloadHash":null},"scannerVersion":null,"policyVersion":null},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"not_attestable","url":null,"status":null,"reason":"canonical install advisories are incomplete"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"safe","confirmedFindingCount":0,"capabilityReviewCount":2,"needsReviewCount":0,"falsePositiveCount":2,"agentAutoInstallPolicy":null,"manualInstallPolicy":null,"artifactSignatureState":"available","attestationState":"not_attestable","verificationState":"not_verified"},"isLatest":false}}