Overview › Security Controls · WCAG 2.2 · Licenses

Security Controls · WCAG 2.2 · Licenses

Detailed static-analysis report for security controls · wcag 2.2 · licenses.

Source: codebase scan · 2026-05-07

Executive summary

The security baseline is solid (HTTPS-only, AES-256-GCM Keystore, biometric auth, R8 obfuscation, backup disabled). The notable gaps are WebView lockdown, no Play Integrity API, no FLAG_SECURE on sensitive screens, no Data Extraction Rules, and uncertainty around certificate pinning activation. WCAG 2.2 conformance is poor — most criteria fail or partially pass. Seven commercial SDKs require licensing review, and no GPL/LGPL copyleft dependencies were found.

Security controls matrix

ControlStatusEvidence / Note
HTTPS-only (Network Security Config)PRESENTCostco/src/main/res/xml/network_security_config.xml · cleartextTrafficPermitted="false"
Certificate pinningCONFIRMCertificatePinner import found in shared/common/.../RetrofitServiceImpl.kt — verify pins are populated, not commented out
android:allowBackup=falsePRESENTCostco/src/main/AndroidManifest.xml line 53
data_extraction_rules.xmlABSENTRequired for Android 12+ device transfer behavior
backup_rules.xmlABSENTMitigated by allowBackup=false
R8 / minificationENABLEDRelease build sets minifyEnabled=true, shrinkResources=true
Biometric authPRESENTCostco/.../BiometricUtilImpl.java uses BiometricPrompt
AndroidKeystore (AES-256-GCM)PRESENTshared/storage/.../KeyStoreManagerImpl.kt lines 16-85
Encrypted token persistencePRESENTTokens encrypted via KeyStoreManager before DataStore write
Play Integrity APIABSENTNo IntegrityManager imports detected
Root / tamper detectionABSENTNo RootBeer / SafetyNet / Play Integrity
WebView lockdownPARTIALWebView used in pharmacy + main; explicit setAllowFileAccess(false) not found
FLAG_SECURE on sensitive screensABSENTNo FLAG_SECURE blocks screen capture on payment / DMC screens
Debug logging stripped in releasePARTIALTimber present; no explicit ProGuard rule strips Timber.* in release
NowSecure scanning in CIPRESENTazure-pipelines-nowsecure.yml

WCAG 2.2 conformance summary

CriterionLevelStatusNote
1.1.1 Non-text ContentAPARTIALSome contentDescription set; many Composables omit it
1.3.1 Info & RelationshipsAPARTIALSome semantics/role; coverage incomplete
1.4.3 Contrast (Minimum)AAFAILDesign tokens auto-generated; no contrast validation in pipeline
1.4.4 Resize TextAAFAILHardcoded sp values; no font-scale 200% snapshot
2.4.7 Focus VisibleAAPARTIALSome focusable(); not consistent
2.5.5 Target SizeAAAFAILNo 48dp minimum target enforcement visible
4.1.2 Name, Role, ValueAPARTIALSome role semantics; many gaps
CRITICAL

WCAG 2.2 conformance gap

Three FAILs (contrast, text resize, target size) and four PARTIALs. For a Canada-targeted retail app this is also an AODA exposure.
Recommendation: Run a one-time codemod for contentDescription. Add Compose-rule contrast assertions in design-token build. Add 48dp target enforcement via Modifier.minimumInteractiveComponentSize(). Snapshot every Composable at fontScale = 2.0f.

Open-source license audit

License familyExamplesRisk
Apache 2.0Most Google / AndroidX / Kotlin / Square / Firebase libsSAFE
MITTimber, Coil, Lottie, MockK, TurbineSAFE
BSDBouncyCastle 1.70, ZXing, HamcrestSAFE
LGPL / GPLNone detectedCLEAR
Proprietary / CommercialAdobe Marketing Cloud (BOM 3.17.0), Contentstack 4.0.0, NokNok FIDO2 9.2.0, ThreatMetrix 7.7-71, Mastercard ClickToPay, OneTrust, LucidworksREVIEW LICENSING
MEDIUM

7 commercial SDKs need licensing audit

Adobe, Contentstack, NokNok, ThreatMetrix, Mastercard, OneTrust, Lucidworks. Each likely has per-MAU pricing or seat-based licensing.
Recommendation: Confirm contracts are current. Document the renewal calendar in a vendor-management doc. Track usage metrics so renewals are negotiated from data.
INFO

Generate machine-readable license report

Use the com.jaredsburrows:gradle-license-plugin or oss-licenses-plugin to produce a release-time license inventory and an in-app Open Source Notices screen.
Costco Android · Code Review Report · Generated 2026-05-07 · 626 machine-curated findings