T08 · Insecure Dependencies
- Location
SKILL.md:76- Finding
Unpinned FlyVerify CocoaPods Dependency
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill fits its iOS FlyVerify integration purpose, but it handles a service secret in project files and recommends risky dependency/build settings without enough safeguards.
Review before installing. Use only if you are comfortable with an agent modifying an iOS project and handling FlyVerify credentials. Keep any generated FlyVerify_iOS_Config.xlsx out of source control, avoid putting real secrets in code where possible, pin and review Podfile.lock changes, and avoid disabling Xcode script sandboxing except temporarily in an isolated build environment.
SKILL.md:76Unpinned FlyVerify CocoaPods Dependency
assets/generate_excel_template.py:38Plaintext Collection and Embedding of the FlyVerify Application Secret
SKILL.md:359Disabling Xcode User Script Sandboxing Expands Dependency Build-Script Access
The declared description promises an active iOS integration skill that scans an engineering project, infers setup details, integrates FlyVerify dependencies, applies privacy-related changes, and wires login flow with minimal edits. The actual code only creates an Excel workbook template for collecting configuration information and guidance. While the spreadsheet content is related to FlyVerify integration and privacy compliance, the code does not perform the core declared actions such as scanning the project, choosing CocoaPods, editing project files, or implementing login flow. This is a material purpose/behavior mismatch, not merely an implementation detail.
The skill description is written entirely in Chinese and does not indicate that other languages are supported or that the language choice is optional. Under the stated policy, forcing a specific language or locale without user opt-in is a natural-language policy violation unless the constraint is explicitly justified.
技能要求在 Info.plist 中配置 flyverifykey 与 flyverifysecret,意味着长期凭据将以静态明文形式保存在工程和产物配置中。若仓库泄露、构建产物被提取或应用被逆向,第三方服务凭据可能被获取并被滥用,造成服务盗用或配额消耗。
- 默认 Pod 为 `pod 'FlyVerify'`
- 工程需要链接 `libsqlite3.tbd`、`libc++.tbd`、`libz.1.2.5.tbd`
- `Other Linker Flags` 需要添加 `-ObjC`
- `Info.plist` 需要配置 `flyverifykey` 与 `flyverifysecret`
- 严格隐私模式需要在默认 `plist` 中添加 `FlyVerifyPLevel = 2`
- 如果项目全局禁止 HTTP,需要为以下域名配置 ATS 白名单:
- `zzx9.cn`
最小改动计划明确包含向 Info.plist 写入 flyverifykey、flyverifysecret。这会把敏感服务凭据固化到客户端配置中,增加源码泄露、二进制逆向和批量滥用的风险;在面向大量项目自动化修改的 skill 中,这种模式会被规模化复制,放大暴露面。
- `Podfile`:按需加入 `pod 'FlyVerify'`
- `.gitignore`:按需加入 `Pods/`
- `Info.plist`:写入 `flyverifykey`、`flyverifysecret`、`FlyVerifyPLevel`
- Xcode 构建设置:补 `-ObjC`
- Swift 工程:新增或复用 Bridging Header,并配置 `SWIFT_OBJC_BRIDGING_HEADER`
- 视情况补 ATS 白名单或提示用户已有配置可复用
该段开始进入 Info.plist 默认写入/校正流程,实质上推动将 FlyVerify 凭据持久化到应用配置。客户端静态存储第三方服务 secret 在移动端通常不可保密,攻击者可通过反编译或读取应用包内容恢复凭据并进行未授权调用。
- 按官方资料把下载的 SDK 拖入工程
- 检查并补系统库、`-ObjC` 与 `Info.plist`
### 5-2 `Info.plist` 配置
默认写入或校正:
代码示例 initKey:secret:privacyLevel: 直接将 secret 置于客户端初始化路径,即使不写入 Info.plist,最终仍会出现在客户端代码或构建配置中。对移动端而言,这类硬编码或可恢复配置都难以真正保密,可能导致第三方 SDK 账户被冒用。
[FlyVerifyC initKey:@"" secret:@"" privacyLevel:2];
否则优先沿用 `Info.plist` 配置,不同时强塞两套初始化方案。
### 5-4 登录流程接入
This markdown file presents all trigger and usage examples exclusively in Chinese, which can amount to a language/locale policy violation when no user opt-in or justification is provided. The content does not indicate that the skill is intentionally limited to Chinese-speaking users or a China-specific deployment context.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
## 工程改造类问法
6. 帮我检查这个 iOS 项目还缺哪些 FlyVerify 配置
7. FlyVerify 的 `Info.plist` 应该怎么配
8. `agreePrivacy` 应该放在哪个回调里
9. iOS 秒验的 `preLogin` 和授权页怎么接
10. 帮我把 FlyVerify 授权页接到现有手机号登录页
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
## 工程改造类问法
6. 帮我检查这个 iOS 项目还缺哪些 FlyVerify 配置
7. FlyVerify 的 `Info.plist` 应该怎么配
8. `agreePrivacy` 应该放在哪个回调里
9. iOS 秒验的 `preLogin` 和授权页怎么接
10. 帮我把 FlyVerify 授权页接到现有手机号登录页
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
## 工程改造类问法
6. 帮我检查这个 iOS 项目还缺哪些 FlyVerify 配置
7. FlyVerify 的 `Info.plist` 应该怎么配
8. `agreePrivacy` 应该放在哪个回调里
9. iOS 秒验的 `preLogin` 和授权页怎么接
10. 帮我把 FlyVerify 授权页接到现有手机号登录页
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
## 工程改造类问法
6. 帮我检查这个 iOS 项目还缺哪些 FlyVerify 配置
7. FlyVerify 的 `Info.plist` 应该怎么配
8. `agreePrivacy` 应该放在哪个回调里
9. iOS 秒验的 `preLogin` 和授权页怎么接
10. 帮我把 FlyVerify 授权页接到现有手机号登录页
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
## 工程改造类问法
6. 帮我检查这个 iOS 项目还缺哪些 FlyVerify 配置
7. FlyVerify 的 `Info.plist` 应该怎么配
8. `agreePrivacy` 应该放在哪个回调里
9. iOS 秒验的 `preLogin` 和授权页怎么接
10. 帮我把 FlyVerify 授权页接到现有手机号登录页
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
## 工程改造类问法
6. 帮我检查这个 iOS 项目还缺哪些 FlyVerify 配置
7. FlyVerify 的 `Info.plist` 应该怎么配
8. `agreePrivacy` 应该放在哪个回调里
9. iOS 秒验的 `preLogin` 和授权页怎么接
10. 帮我把 FlyVerify 授权页接到现有手机号登录页
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
## 工程改造类问法
6. 帮我检查这个 iOS 项目还缺哪些 FlyVerify 配置
7. FlyVerify 的 `Info.plist` 应该怎么配
8. `agreePrivacy` 应该放在哪个回调里
9. iOS 秒验的 `preLogin` 和授权页怎么接
10. 帮我把 FlyVerify 授权页接到现有手机号登录页
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
## 工程改造类问法
6. 帮我检查这个 iOS 项目还缺哪些 FlyVerify 配置
7. FlyVerify 的 `Info.plist` 应该怎么配
8. `agreePrivacy` 应该放在哪个回调里
9. iOS 秒验的 `preLogin` 和授权页怎么接
10. 帮我把 FlyVerify 授权页接到现有手机号登录页
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
## 工程改造类问法
6. 帮我检查这个 iOS 项目还缺哪些 FlyVerify 配置
7. FlyVerify 的 `Info.plist` 应该怎么配
8. `agreePrivacy` 应该放在哪个回调里
9. iOS 秒验的 `preLogin` 和授权页怎么接
10. 帮我把 FlyVerify 授权页接到现有手机号登录页
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
## 工程改造类问法
6. 帮我检查这个 iOS 项目还缺哪些 FlyVerify 配置
7. FlyVerify 的 `Info.plist` 应该怎么配
8. `agreePrivacy` 应该放在哪个回调里
9. iOS 秒验的 `preLogin` 和授权页怎么接
10. 帮我把 FlyVerify 授权页接到现有手机号登录页
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
## 工程改造类问法
6. 帮我检查这个 iOS 项目还缺哪些 FlyVerify 配置
7. FlyVerify 的 `Info.plist` 应该怎么配
8. `agreePrivacy` 应该放在哪个回调里
9. iOS 秒验的 `preLogin` 和授权页怎么接
10. 帮我把 FlyVerify 授权页接到现有手机号登录页
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
## 工程改造类问法
6. 帮我检查这个 iOS 项目还缺哪些 FlyVerify 配置
7. FlyVerify 的 `Info.plist` 应该怎么配
8. `agreePrivacy` 应该放在哪个回调里
9. iOS 秒验的 `preLogin` 和授权页怎么接
10. 帮我把 FlyVerify 授权页接到现有手机号登录页
The markdown explicitly says '默认使用中文与用户沟通', which imposes a language default on user-facing responses. Under the policy rule, locale/language constraints should either offer user choice or be clearly justified as region-specific; this section does not provide an opt-in or fallback.
No suspicious patterns detected.