RiderNav is a closed-source motorcycle navigation app for Android and iOS. This page publishes the results of the security scans that run on every change to its codebase, so that the claim “it has been security tested” is checkable rather than something you are asked to take on trust.
Honesty note. These scans are run by RiderNav’s own build pipeline against its private repository. They are automated static analysis and dependency checks, not an independent audit or penetration test. What this page offers is transparency: the tools, their versions, the scanned commit, the raw counts, and the maker’s triage of every accepted finding are all published on every run. If a scan fails, the build fails, and this page does not update until it is fixed.
Last scan: 2026-08-24 · commit 6862363ac04e of the private repository chris-wild/ridernav.
| Check | Tool | Result |
|---|---|---|
| Secrets in the full git history | gitleaks (8.30.1) | clean — no leaks |
| Static analysis, Kotlin + Swift source | Semgrep (1.153.0, rulesets p/default + p/kotlin + p/secrets) | clean — no findings beyond the accepted triage below |
| Known vulnerabilities in shipped dependencies | OSV.dev query of 221 resolved Android artifacts + 13 pinned Swift packages | clean — no known vulnerabilities |
The scans above read source; MobSF
(v4.5.2) inspects the built binary — permissions, exported components, storage
and network flags — so it catches what the build itself introduces. Latest scan: 2026-08-24,
app-arm64-v8a-beta.apk (minified beta build) at commit 6862363.
All warnings trace to third-party SDK internals (Mapbox common/maps classes and minified library code) or entropy-based false positives (localised Mapbox UI strings, hex lookup tables). The exported Android Auto service is the documented Car App Library contract. No finding is in RiderNav’s own code.
| Tool | Finding | Status | Why |
|---|---|---|---|
| Semgrep | exported_activity on MainActivity |
Accepted | It is the launcher activity and the GPX/KML file-open target; Android requires both to be exported. It carries no privileged interface. |
| Android Lint | ExportedService on RiderNavCarAppService |
Accepted | The Android Auto host binds this service; the Car App Library contract requires it exported with the androidx.car.app.CarAppService intent filter. |
| Android Lint | DataExtractionRules deprecation warning |
Fixed 2026-08-24 | allowBackup="false" was already set; explicit dataExtractionRules (all backup and device-transfer excluded) added for Android 12+. |
| OSV | com.google.guava:guava:31.1-android (CVE-2020-8908, CVE-2023-2976) |
Fixed 2026-08-24 | Transitive via androidx.car.app:1.7.0; constrained to 32.0.1-android, where both are fixed. |
| Semgrep | dynamic-urllib-use-detected in scripts/security/osv_check.py |
Accepted (inline nosemgrep) |
The flagged call fetches the literal https://api.osv.dev endpoint declared two lines above; no dynamic scheme can reach it. This is scan tooling, not app code. |
| MobSF | 9 warnings on the beta APK (hardcoded strings, insecure RNG, raw SQL, external storage, unprotected AndroidX components) | Accepted | Every flagged file is third-party SDK code (Mapbox com.mapbox.common/com.mapbox.maps classes and minified library classes), or the Android Auto service covered above. The “hardcoded secrets” list is entropy false positives: localised Mapbox UI strings and hex lookup tables. Zero findings are in RiderNav’s own code. |
| MobSF | The Mapbox public access token ships in the app | Accepted by design | Mapbox client apps authenticate with a public (pk.) token that is intended to be embedded; the account’s secret (sk.) token is not in the app or the repository, which the secrets scan enforces. |
RiderNav’s app data (imported routes, settings, downloaded offline maps) stays on the device.
Backup extraction and device-to-device transfer are disabled at the platform level
(allowBackup="false" plus explicit Android 12+ dataExtractionRules excluding everything).
Mapbox telemetry is disabled in the app.
This page is generated by the scan pipeline itself
(render_report.py); the only hand-written
content is the triage table, which is labelled as such.