Skip to content

Build1 publisher3 min readPublished

One npm install can put three telemetry SDKs behind your Data Safety declaration

The sixth item in OWASP's mobile list is rated low technical impact and severe business impact. A dev.to walkthrough argues React Native stacks carry extra exposure, and the reason it gives is the telemetry that arrives with dependencies.

The Engineer · Build desk

What happened

  • OWASP's M6, Inadequate Privacy Controls, is rated low technical impact and severe business impact, the only such inversion among the ten mobile risks, according to a dev.to walkthrough of the item.
  • An app that collects no personal data still holds an IP address, device identifiers, usage logs, crash metadata, timestamps, locale and network carrier, which the post says usually identify one person.
  • The walkthrough defines M6 as the other Top 10 items multiplied by personal data, routing exposure through M5 and M9, M3 and M1, and M2, M4 and M8.

Compiled by The EngineerSomething wrong?How this is made

Why it matters

  • constraint Encryption cannot close this item. M5 and M9 controls leave the collection decision untouched, so the remediation that actually removes the risk is deciding not to gather the field.
  • exposure Whoever signs the Data Safety form is asserting facts about outbound calls made by third-party native code, so the accuracy of the declaration rests on dependencies the signer did not write.
  • decision Adding a native SDK becomes a disclosure decision for the release, because the form has to account for whatever that SDK sends at its default configuration.
  • contradiction The same post rates business impact severe and says an attacker must breach another level of security before reaching PII, which leaves the severity resting on compliance exposure the text does not price.

An M6 finding does not start with an exploit. The dev.to walkthrough of the item says the usual sources of personal data are already well protected: the app sandbox, network communication with the server, the app's logs and backups, with URL query parameters and clipboard content less protected but still hard to reach [13]. Getting at that data, by the same account, means breaching security at another level first [13]. The severe business rating sits on the platform declarations. Apple's Privacy Manifest requirement and Google Play's Data Safety form both have to match what the app actually does, the post says [8].

React Native's dependency depth lands straight on that requirement. One `npm install` can pull in three native SDKs, each sending its own telemetry [6]. Filling in the form then means enumerating the outbound calls of code nobody on the team wrote. For that risk to transfer to a specific app, two things have to hold: the bundled SDKs are sending telemetry at their default configuration, and the declaration was written from the app's own source. The walkthrough asserts the pattern without measuring how often it does.

The JavaScript side adds a second path. The post names the `console.log` habit, crash reporting integrations and dev tooling as the reasons PII leaks easily there [7]. It then lists what an app holds when it "doesn't collect PII": the IP address in server logs on every request, device identifiers including IDFA, Android ID and install ID, usage logs, crash metadata, timestamps, language and locale, and network carrier [9]. Seven categories, before anyone writes a line of collection code [16]. Combined, the post argues, they are usually enough to identify one person, which by definition makes them PII [10], and it counts crash report metadata among the PII that applies to most apps [18].

The mapping is the part I would take into a review. The post writes M6 as the other items multiplied by personal data: M5 and M9 for insecure storage and communication, M3 and M1 for access with broken authentication and authorization, M2, M4 and M8 for insider attacks on the sandbox [11]. That is seven of the nine other items [15]. M6 adds no control of its own; it re-scores the ones a team already has with personal data in scope. Its one original question, in the post's words, is "Why are you collecting this data at all?", and it says that if the answer is "because we might need it," the violation already exists [4]. M5 tells you to encrypt the data, M9 to store it securely [12].

The fine exposure is where the record is thin. Code can work perfectly, nothing crashes, no system goes down, and a company can still face millions in fines, the post says [14]. It does not name a regulation, an enforcement case, or an amount [21]. The seven-field list is checkable in a way the rating is not: each item either appears in a release build's outbound traffic or it does not. I would run that capture before signing the next Data Safety form.

What to watch

  • Whether later entries in the series attach a named regulation or enforcement figure to the severe business rating, which the M6 post does not.
  • Native SDK maintainers documenting their default outbound calls, so a Data Safety form can be filled from docs instead of a packet capture.
  • Any platform review that rejects a build because a bundled SDK's traffic contradicts the submitted Data Safety declaration.
Loading claim ledger
Loading source directory links
Loading share composer
Loading topic controls
Loading related stories