firebase / firebase/firebase-ios-sdk

[Analytics/GoogleAppMeasurement 12.17.0] Security-scanner findings: MD5/SHA‑1 (CC_MD5/CC_SHA1) in analytics event hashing, JWT persisted in GDT cache, and undeclared tracking domains

Open
#16,506 3 comments 0 reactions 0 assignees View on GitHub
api: analytics
Dominant language
C++
Stars
6.7k
Forks
1.8k
Avg merge
2d 14h
Merged PRs (30d)
72

Description

### Description

# Firebase SDK Security Scanner Findings – GoogleAppMeasurement 12.17.0

## Overview

A NowSecure scan of our iOS application identified several security findings originating from Firebase/Google SDK binaries.

We verified that our application source code does **not** use `CC_MD5`, `CC_SHA1`, CommonCrypto hashing, or generate/store the flagged JWT.

### Environment

* Firebase iOS SDK: **12.17.0**
* GoogleAppMeasurement: **12.17.0**
* GoogleDataTransport: **10.1.1**
* Integration: **Swift Package Manager**
* Products: **FirebaseAnalyticsCore + FirebaseCrashlytics**
* IDFA/Ad-ID: **Disabled**
* Scanner: **NowSecure Static + Dynamic Analysis**

## Findings

### 1. MD5 / SHA-1 Hashing

NowSecure detected `CC_MD5` and `CC_SHA1` inside the **GoogleAppMeasurement** binary.

The hashing appears to be used for analytics event/instance identification and deduplication. The resulting data is passed to GoogleDataTransport and persisted in its local event cache.

**Request:** Please confirm that these hashes are used only for non-security analytics purposes and provide any planned migration from MD5/SHA-1 to a modern algorithm such as SHA-256.

### 2. JWT in GoogleDataTransport Cache

An ES256 JWT was detected in:

```text
Library/Caches/google-sdks-events/GDTCORFlatFileStorage/gdt_event_data/...
```

This appears to be an SDK-managed Google/Firebase transport token rather than an application or user credential.

**Request:** Please confirm the token's purpose, lifetime, security classification, and whether its on-disk storage is expected SDK behavior.

### 3. Tracking Domains

NowSecure identified the following hardcoded domains within Firebase/Google SDK binaries:

```text
firebase-settings.crashlytics.com
www.googleadservices.com
```

Our configuration uses FirebaseAnalyticsCore and Crashlytics with IDFA/Ad-ID disabled. We do not enable ATT tracking.

**Request:** Please confirm whether these domains should be considered tracking domains in this configuration and whether keeping:

```text
NSPrivacyTracking = false
```

is correct.

## Current Disposition

All findings have been identified as **SDK-internal** and are not caused by application code.

We are currently risk-accepting these findings pending vendor clarification/remediation, as disabling Analytics or Crashlytics is not an option for our application.

### Requested Vendor Response

Please provide:

1. Confirmation of the purpose and security relevance of the MD5/SHA-1 operations.
2. Remediation timeline, if MD5/SHA-1 replacement is planned.
3. Confirmation regarding the JWT stored by GoogleDataTransport.
4. Privacy/tracking classification of the identified domains.
5. Any supported mitigation that avoids these findings without disabling Firebase Analytics or Crashlytics.

An official response or statement would be helpful for our security audit documentation.

### Reproducing the issue

_No response_

### Firebase SDK Version

12.17.0

### Xcode Version

26.6

### Installation Method

Swift Package Manager

### Firebase Product(s)

Analytics, Crashlytics

### Targeted Platforms

iOS

### Relevant Log Output

```shell

```

### If using Swift Package Manager, the project's Package.resolved

Expand Package.resolved snippet

```json

Replace this line with the contents of your Package.resolved.

```

### If using CocoaPods, the project's Podfile.lock

Expand Podfile.lock snippet

```yml

Replace this line with the contents of your Podfile.lock!

```

Contributor guide

Open the contributing guide

Research direction

Start by reviewing the GoogleAppMeasurement and GoogleDataTransport binaries and the reported Library/Caches/google-sdks-events/GDTCORFlatFileStorage/gdt_event_data path alongside the NowSecure findings. Determine whether the MD5/SHA-1 calls, cached ES256 JWT, and listed domains are expected for Analytics and Crashlytics; done requires an official clarification or supported mitigation.

Written by the indexing model from the issue text.

Assessment

Tech stack
ios, objective-c, swift
Domain
analytics, mobile-dev, security
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.