跳转到正文
报告库
用途分类 / 其他用途

Expo Dev Client Skill 安全审计

作者说它能做什么(原文)

Framework (OSS). Build and distribute Expo development clients locally or via TestFlight for internal testing. For production TestFlight releases and store submission, use the eas-app-stores skill.

第三方安全检查结论

先别安装或运行

已检查文件
2
发现的风险
6
会不会运行危险命令?检查是否下载程序后直接运行、让他人远程控制电脑,或藏起要运行的命令。发现 2 项风险
中风险

反馈步骤会下载并立即执行未固定版本的 npm 包

原文依据:1 处
发现了什么

命令使用 `npx --yes` 和 `@latest`,会在不要求安装确认的情况下获取并执行当时最新的 `submit-expo-feedback` 包。审计材料没有包含该包的源码,因此无法从本 Skill 验证其具体行为。

为什么需要注意

如果包或其发布账户遭到入侵,执行时可继承当前用户权限并访问命令运行环境中的文件或凭据。命令还会把用户填写的反馈文本交给该程序处理。

反馈命令明确使用 `npx --yes` 执行 `submit-expo-feedback@latest`:`@latest` 不固定代码版本,`--yes` 跳过安装确认,而且所给材料没有该包源码。只有提交具体反馈时才会触发,但届时最新包会以用户权限运行并接收反馈文本。用户可限制自动执行,并要求固定且审计过的版本。

SKILL.md:176来自说明文档打开原文件
## Submitting FeedbackIf you encounter errors, misleading or outdated information in this skill, report it so Expo can improve:```bashnpx --yes submit-expo-feedback@latest --category skills --subject "expo-dev-client" "<actionable feedback>"```Only submit when you have something specific and actionable to report. Include as much relevant context as possible.If an AI agent repeatedly failed or the user had to take over an Expo task, load the expo-skill-feedback skill and follow its eval-candidate flow instead of reusing the command above.
中风险

连接不受信任的 Metro 地址会让开发客户端加载该服务器提供的代码

原文依据:2 处
发现了什么

Skill 允许扫描二维码或手动输入 Metro URL,但没有提醒用户验证服务器身份。开发客户端专门用于加载开发服务器提供的应用代码,并可能包含该应用已经获得的原生能力。

为什么需要注意

恶意或被劫持的服务器可能向设备提供非预期代码;代码能够使用开发客户端中已集成并获准的 API,可能读取测试数据或执行网络操作。

这段证据能说明什么

材料说明开发客户端可通过二维码或手工 URL 连接开发服务器,但没有指示用户连接陌生或不可信的服务器,也没有展示所加载代码可访问哪些原生权限。因此“连接任意不可信地址并获得应用原生能力”的具体风险缺少源码或权限配置支持。用户仍可要求仅允许可信的本地 Metro 地址,并在连接前显示目标主机。

这项判断针对展示的代码和适用条件,不表示风险已经实际发生。
SKILL.md:140来自说明文档打开原文件
Once installed, the dev client provides:- **Development server connection** - Enter your Metro bundler URL or scan QR- **Build information** - View native build details- **Launcher UI** - Switch between development servers
查看另外 1 个位置
SKILL.md:146来自说明文档打开原文件
Connect to local development:```bash# Start Metro bundlernpx expo start --dev-client# Scan QR code with dev client or enter URL manually```
会不会泄露文件和密钥?检查是否发送含密码或密钥的文件,以及代码里是否直接写了密钥。未发现风险
会不会删除文件或一直在后台运行?检查是否大范围删除文件、改写磁盘,或设置自动启动。发现 1 项风险
中风险

归档文件被直接解压到当前目录,可能覆盖现有文件

原文依据:1 处
发现了什么

安装说明使用通配符选择归档,并在未指定隔离目标目录的情况下运行 `tar -xzf`。归档中的路径会写入当前工作目录;若目录内存在同名文件,或归档来源不可信,可能产生覆盖或越界写入风险。

为什么需要注意

项目文件、配置或其他当前目录内容可能被替换;恶意构造的归档还可能尝试写到预期目录之外。

示例在当前目录执行 `tar -xzf build-*.tar.gz`,没有指定独立目标目录,也用通配符选择归档。解压会按归档内路径写入当前目录;若选中错误、被替换或不可信的归档,可能覆盖同名文件,恶意路径还可能写到预期目录之外。用户可要求先确认唯一归档及内容,并解压到新建的隔离目录。

SKILL.md:92来自说明文档打开原文件
## Installing Local BuildsInstall iOS build on simulator:```bash# Find the .app in the .tar.gz outputtar -xzf build-*.tar.gzxcrun simctl install booted ./path/to/App.app```
会不会绕过安全保护?检查是否跳过网站安全验证、开放过多文件权限,或取消操作前的确认。发现 2 项风险
高风险

“检查 EAS CLI 版本”步骤包含可能发布应用更新的命令

原文依据:1 处
发现了什么

故障排除段落把 `eas update` 放在“检查 EAS CLI 版本”标题下。该命令不是查看或升级 CLI 版本的命令;在已配置的 Expo 项目中,它用于创建并发布 EAS Update。用户可能因标题而误以为这是无副作用的版本检查。

为什么需要注意

运行后可能把当前 JavaScript 和资源发布到项目配置的更新渠道或分支,影响已经安装的应用和测试人员,并在错误代码或敏感资源存在时造成发布事故。

标题称该步骤用于检查 EAS CLI 版本,但紧接着还给出 `eas update`。该命令与只读的 `eas --version` 明显不同;在已配置项目中运行时可能执行发布更新的有状态操作。用户可能因误导性标题而在未打算发布时运行它。可要求作者删除该命令,或明确说明其发布效果和所需确认。

SKILL.md:169来自说明文档打开原文件
**Check EAS CLI version:**```basheas --versioneas update```
低风险

安装命令没有固定依赖版本

原文依据:2 处
发现了什么

安装命令没有指定依赖版本。同样的命令以后可能下载不同代码,你实际安装的内容可能与这次检查时不同。

为什么需要注意

即使命令和报告没变,以后安装时也可能下载到另一份代码。

这段证据能说明什么

`npx expo start --dev-client` 是启动开发服务器的命令,不是明确的安装步骤。若项目已有本地 `expo` 依赖,npx 通常会使用它;只有缺失时才可能尝试获取其他版本。因此存在未固定解析的条件性风险,但材料不足以断言该命令必然下载或安装不同代码。

这项判断针对展示的代码和适用条件,不表示风险已经实际发生。
SKILL.md:150来自说明文档打开原文件
# Start Metro bundlernpx expo start --dev-client
查看另外 1 个位置
SKILL.md:146来自说明文档打开原文件
Connect to local development:```bash# Start Metro bundlernpx expo start --dev-client
会不会误导 AI 或隐藏内容?检查工作说明是否要求 AI 忽略你的指令、干扰检查结果,或夹带看不见的文字。未发现风险
会不会偷偷改推广链接或收款方?检查是否强制替换推广链接或收款对象,同时要求隐瞒更改。发现 1 项风险
中风险

单条构建命令会消耗云构建额度并提交至 App Store Connect

原文依据:2 处
发现了什么

推荐的 `--submit` 命令同时启动付费 EAS 云构建和外部 App Store Connect 提交。这比单纯创建本地开发客户端具有更大的账户和商业影响。Skill 虽然披露了费用,但命令本身没有设置单独的提交确认环节。

为什么需要注意

用户可能消耗 EAS 构建分钟、生成新的远程构建号,并在 Apple 账户中创建 TestFlight 构建记录;错误的应用、配置或签名身份也可能被提交。

这段代码的正常用途

该命令确实同时发起云构建并提交到 App Store Connect,但它位于明确的“Building for TestFlight”章节,正文逐项说明了云构建、自动提交及邮件结果,并在前文披露云构建可能付费及需要 Apple Developer 账户。这是有账户和费用影响的操作,但其效果与该章节的明确目的相符,并未伪装成本地构建。

这项判断针对展示的代码和适用条件,不表示风险已经实际发生。
SKILL.md:10来自说明文档打开原文件
> **Free locally; cloud builds are paid.** `expo-dev-client` itself is open source and building locally is free. Building or distributing via EAS Build/TestFlight uses your EAS plan's build minutes and needs a paid Apple Developer account for device/TestFlight distribution. See https://expo.dev/pricing.
查看另外 1 个位置
SKILL.md:55来自说明文档打开原文件
## Building for TestFlightBuild iOS dev client and submit to TestFlight in one command:```basheas build -p ios --profile development --submit```This will:1. Build the development client in the cloud2. Automatically submit to App Store Connect3. Send you an email when the build is ready in TestFlight

Skill 逻辑拆解

8 个说明模块

该 Skill 指导用户为包含自定义原生功能的 Expo 应用创建开发客户端,并区分云端构建与本地构建;它明确说明云构建可能收费,设备或 TestFlight 分发需要付费 Apple Developer 账户。

查看原文
SKILL.md:8来自说明文档打开原文件
Use EAS Build to create development clients for testing native code changes on physical devices. Use this for creating custom Expo Go clients for testing branches of your app.> **Free locally; cloud builds are paid.** `expo-dev-client` itself is open source and building locally is free. Building or distributing via EAS Build/TestFlight uses your EAS plan's build minutes and needs a paid Apple Developer account for device/TestFlight distribution. See https://expo.dev/pricing.

建议的 EAS 配置把版本号交由远程 EAS 管理,并在每次开发和生产构建时自动增加构建号。这会改变远程账户中的版本状态,而不只是生成本地测试文件。

查看原文
SKILL.md:29来自说明文档打开原文件
{  "cli": {    "version": ">= 16.0.1",    "appVersionSource": "remote"  },  "build": {    "production": {      "autoIncrement": true    },    "development": {      "autoIncrement": true,      "developmentClient": true    }
SKILL.md:49来自说明文档打开原文件
Key settings:- `developmentClient: true` - Bundles expo-dev-client for development builds- `autoIncrement: true` - Automatically increments build numbers- `appVersionSource: "remote"` - Uses EAS as the source of truth for version numbers

开发客户端能够连接到 Metro 开发服务器,并允许扫描二维码或手动输入服务器地址。因此,运行中的应用所加载的开发代码取决于用户选择的服务器。

查看原文
SKILL.md:140来自说明文档打开原文件
Once installed, the dev client provides:- **Development server connection** - Enter your Metro bundler URL or scan QR- **Build information** - View native build details- **Launcher UI** - Switch between development servers
SKILL.md:146来自说明文档打开原文件
Connect to local development:```bash# Start Metro bundlernpx expo start --dev-client# Scan QR code with dev client or enter URL manually```
从这里开始 · 工作说明SKILL.md
expo-dev-client
连线表示工作说明包含的模块,不是实际运行顺序。点击模块可查看原文。 另有 2 个章节,可在原文件中查看。
文件与检查记录2 个文件

检查范围与遗漏

逐文件查看涉及的内容

下方列出本次涉及的原文范围;纳入检查不代表已查清所有问题。

  • SKILL.md已纳入全文
  • agents/openai.yaml已纳入全文

这份报告只针对上方版本。我们看了拿到的代码和说明文件,没有实际运行 Skill,也没有检查它另外安装的软件包。因此,这不是“保证安全”的承诺;换了版本或使用环境,结果也可能不同。

  • SKILL.md工作说明
  • agents/openai.yaml配套文件

代码和说明中提到的操作

连接外部网站
SKILL.md:10来自说明文档打开原文件
> **Free locally; cloud builds are paid.** `expo-dev-client` itself is open source and building locally is free. Building or distributing via EAS Build/TestFlight uses your EAS plan's build minutes and needs a paid Apple Developer account for device/TestFlight distribution. See https://expo.dev/pricing.
SKILL.md:14来自说明文档打开原文件
**Development clients are the recommended setup for any real or production app.** Expo Go is a playground for learning and quick experiments with the native libraries it bundles; most apps outgrow it and move to a development client. See [Expo Go vs. development builds](https://docs.expo.dev/develop/development-builds/introduction/) for the full reasoning.
运行命令
SKILL.md:59来自说明文档打开原文件
```basheas build -p ios --profile development --submit
SKILL.md:79来自说明文档打开原文件
```bash# iOS (requires Xcode)
SKILL.md:96来自说明文档打开原文件
```bash# Find the .app in the .tar.gz output
安装其他软件包
SKILL.md:150来自说明文档打开原文件
# Start Metro bundlernpx expo start --dev-client
SKILL.md:179来自说明文档打开原文件
```bashnpx --yes submit-expo-feedback@latest --category skills --subject "expo-dev-client" "<actionable feedback>"```
读取密钥或账号配置
SKILL.md:160来自说明文档打开原文件
```basheas credentials```
读取了多少行
188
文件校验值(用于核对版本)
2e5b402416efbdfabc080a2f636c6fc848a497abf720126df4d33281a4ef8840