| name | dependency-scanning |
| description | Scanning mobile app dependencies for known vulnerabilities — Gradle Versions, Snyk, Dependabot, CocoaPods Audit, and npm audit. Use to keep the dependency surface patched. |
Dependency Scanning on Mobile
Instructions
Most reported mobile CVEs live in dependencies — third-party SDKs, networking libs, image loaders, JSON parsers. A weekly cadence beats a one-off audit.
1. Inventory First
You can't scan what you can't see. Produce an SBOM per build:
- Android: CycloneDX Gradle plugin (
org.cyclonedx.bom) produces bom.json.
- iOS:
cyclonedx-cocoapods / cyclonedx-swift for SwiftPM.
- Flutter:
cyclonedx_dart or parse pubspec.lock.
- React Native:
@cyclonedx/cdxgen handles npm + native.
Archive the SBOM with the release artifact. You will want it the day a new CVE drops.
2. Gradle / Android
gradle-versions-plugin flags outdated direct dependencies:
plugins { id("com.github.ben-manes.versions") version "0.51.0" }
For CVEs, OWASP Dependency-Check or Snyk:
plugins { id("org.owasp.dependencycheck") version "11.1.0" }
dependencyCheck {
failBuildOnCVSS = 7.0f
suppressionFile = "config/owasp-suppressions.xml"
}
3. CocoaPods / SwiftPM
pod outdated for CocoaPods outdated check.
bundler-audit / custom script hitting the GitHub Security Advisory DB for CVEs.
- SwiftPM: Xcode 14+ shows a "Package Dependencies" pane; integrate Snyk / Socket for deeper checks.
- Carthage: dying, migrate.
4. Flutter / pub.dev
dart pub outdated on every PR.
- Monitor
pubspec.lock in review — large transitive changes often hide breaking updates.
pana scores each package on health / maintenance; good signal for low-maintenance abandons.
5. React Native / npm
npm audit / pnpm audit / yarn npm audit on every install.
- Pin via a lockfile (
package-lock.json / pnpm-lock.yaml). Never "^"-float sensitive deps in production.
- Watch for postinstall scripts from dependencies — supply-chain attacks increasingly target these.
socket.dev or snyk provides behavioral analysis (network access, file writes from a JS package).
6. GitHub Dependabot
Enable across platforms:
version: 2
updates:
- package-ecosystem: gradle
directory: "/"
schedule: { interval: weekly }
groups:
non-major: { update-types: [minor, patch] }
- package-ecosystem: cocoapods
directory: "/ios"
schedule: { interval: weekly }
- package-ecosystem: pub
directory: "/"
schedule: { interval: weekly }
- package-ecosystem: npm
directory: "/"
schedule: { interval: weekly }
- package-ecosystem: github-actions
directory: "/"
schedule: { interval: weekly }
Group non-major updates so you get one PR a week, not fifty.
7. Triage Policy
Not every HIGH CVE is exploitable in your app. Have a documented triage policy:
- CVSS ≥ 9 or actively exploited in the wild → patch within 7 days, release out-of-band if needed.
- CVSS 7–9 → patch within 30 days.
- CVSS < 7 → next scheduled release.
- Not applicable (e.g., CVE in a code path you don't use) → document suppression with link to reasoning, review quarterly.
8. Transitive Dependency Attacks
The 2021–2024 wave of typosquat / account-takeover attacks on npm, PyPI, and RubyGems applies to mobile too. Defenses:
- Lockfile + integrity hashes (
--frozen-lockfile, pod install --deployment).
- Block CI from installing from non-registry sources unless whitelisted.
- Review diffs on major dep bumps — not just semver; read the changelog.
9. Native Libraries (AAR / .framework / .xcframework)
Binary SDKs are a black box. Mitigations:
- Prefer SDKs that publish source.
- Pin versions by checksum (
sha256 in lockfile where supported).
- On major vendor upgrades, run the APK / IPA through MobSF to check for new permissions / classes.
10. Kotlin / Swift Version Churn
Bumping Kotlin or Swift often cascades into every dependency. Plan for this in the Gradle / Xcode upgrade issues — not every PR.
Checklist