Procedure
変更種別を分類する
CURRENT_PROJECT_VERSION/MARKETING_VERSIONのみ → ビルド番号バンプ。セキュリティ影響ゼロ。終了。NSXxxキー(Info.plist 権限)の追加・変更 → Step 2 へ。- その他(依存ライブラリ・ビルドフラグ・entitlements)→ 該当箇所を個別確認。
権限キーの範囲を確認する
NSPhotoLibraryAddUsageDescription= 追加専用(Photos への書き込みのみ)NSPhotoLibraryUsageDescription= 読み書き(より広い権限)- 追加された権限キーが最小権限原則に沿っているか確認する。
- 権限キー対照表(旧 ios-permission-key-security-matrix から吸収):
権限キー アクセス範囲 リスク NSPhotoLibraryAddUsageDescription追加専用 低 NSPhotoLibraryUsageDescription全読み書き 中〜高 NSCameraUsageDescriptionカメラ撮影のみ 低〜中 NSMicrophoneUsageDescriptionマイク録音 中 NSLocationWhenInUseUsageDescription使用中のみ位置情報 低〜中 NSLocationAlwaysUsageDescription常時位置情報 高 NSContactsUsageDescription連絡先読み取り 高 NSFaceIDUsageDescriptionFace ID 中 ITSAppUsesNonExemptEncryption: falseは輸出コンプライアンス申告でありセキュリティ上問題ない。- 使用説明文字列に
\(variable)等の文字列補間が入っていないか(内容注入リスク・稀)。
Usage Description 文字列を検査する
- 静的リテラルか(変数展開・文字列結合がないか)確認する。
NSXxxUsageDescriptionは Apple が要求する静的プロンプト。省略するとクラッシュ(セキュリティ改善ではない)。- 日本語など多言語文字列でも同様に扱う。
セキュリティ関連要素のチェックリスト(該当なしでも「なし」と明示する)
- エントリーポイント(URL schemes、Universal Links、Shortcuts など)の追加・変更
- データシンク(ファイル書き込み・ネットワーク・Keychain・クリップボード)
- バリデーター・サニタイザーの変更
- IAM バインディング・entitlements の変更
- CI/CD トリガーへの影響(スクリプト実行など)
- 実行コードパスの追加(
SWIFT_FLAGS・スクリプトフェーズなど)
判定と報告
- 上記チェックリストがすべて「なし」なら → No findings と報告し理由を 1〜2 行で添える。
- 該当ありなら → 重大度(CRITICAL/HIGH/MEDIUM/LOW)と影響範囲を報告する。
Pitfalls
NSPhotoLibraryAddUsageDescriptionの不在はクラッシュを引き起こすため、削除は「セキュリティ強化」ではない。- XcodeGen の
project.yml変更はコード変更なしでも Entitlements や Capability を追加できる。entitlements:セクションが変更されていないか必ず確認する。 MARKETING_VERSIONとCURRENT_PROJECT_VERSIONは別物。CFBundleShortVersionString(表示版)と CFBundleVersion(ビルド番号)に対応する。
Verification
# 権限キーの追加分だけ抽出して確認
git diff HEAD~1 -- project.yml | grep '^+' | grep -E 'NS[A-Z].*Description|entitlements'
# Entitlements ファイルが変更されていないか確認
git diff HEAD~1 -- '*.entitlements'