HomeBlog › Analysis

Analysis

What verified developer identity changes about the code you ship

Over the past few months the way a mobile app reaches a phone has quietly changed shape. Distribution is moving toward verified developer identity: to install or update on a certified device, an app increasingly has to trace back to an organisation that has been checked. On the timelines announced so far the rollout is phased and regional and runs well into next year, but the direction is settled and it applies beyond the main marketplaces.

I run engineering at a mobile security company, so I have read a lot of commentary on this in the past week. Most of it treats the change as a distribution problem, something for the release manager and the legal team to absorb. I think that reading is wrong, and it is wrong in an expensive way. This is an engineering problem. The part that will bite is not the registration form. It is that from here on, everything inside the package you publish carries a permanent, checkable owner.

What is actually changing

Strip the noise off and three things are moving at once.

First, publishing is being tied to a verified organisation rather than an account. The check happens once, at the identity level, and it sits behind everything that account ships afterwards.

Second, the requirement is reaching past the main marketplaces. Apps distributed through other channels, including direct download, are being pulled into the same expectation. A team that treated its enterprise or side-channel build as living outside the rules no longer gets that separation.

Third, installing something that does not carry a verified identity is moving behind a slower, more deliberate path. Nothing is being banned outright. The default is simply shifting from permissive to cautious, and defaults are what almost everyone lives with.

None of that is dramatic on its own. Together they close a gap that has been open since mobile began.

Anonymity was doing quiet work in your release process

Here is the part nobody puts in the release notes. For most of the past fifteen years, a mistake in a shipped mobile binary was absorbable. A bad build could be pulled. A leaked key could be rotated with a quiet apology. In the worst case an account went away and a new one appeared. The consequence attached to a listing, not to a company.

Verified identity ends that arrangement. When the artifact traces to a legal entity, the consequence does too, and it accumulates. A pattern of shipping packages with the same class of defect is no longer a series of unrelated incidents. It becomes a record about your organisation, held by a party you do not control, that you cannot edit and cannot leave behind by opening a new account.

I am not arguing this is unfair. On balance I think attribution is good for the ecosystem and overdue. I am arguing that a control which used to be optional has quietly become load bearing, and most release processes have not been updated to match.

You are accountable for the artifact, not the repository

This is where I see teams reason their way into trouble. They hear that shipping is becoming attributable, and they respond by tightening code review. Reasonable instinct, wrong target.

The thing that carries your name is the compiled package. Not your source tree. And the distance between what your team wrote and what actually lands in that package is larger than most engineering leaders assume. Between the two sit:

  • Third-party components you did not write. The analytics, crash, payment, advertising and push libraries you pulled in bring their own code, their own network calls, their own permissions and their own declared components. Their behaviour ships under your identity.
  • Transitive dependencies. The library you chose pulled in four you never evaluated.
  • Build-time injection. Configuration, keys and endpoints written in by the pipeline never appear in a pull request.
  • Resources and assets. Config files, certificates, database seeds and leftover test material sit in the package untouched by code review.
  • Post-processing. Shrinking, obfuscation and repackaging change the artifact after the last human looked at it.

A clean pull request tells you what your team intended. It does not tell you what you shipped. Under attribution, only the second one has your name on it. We wrote about the mechanics of this in testing an APK without source code, because that is the view an outside party gets, and it is now the view that counts.

The question you should be able to answer in one minute

Try this on your own team. Pick a release from eight months ago and ask what was inside it, and how it differed from the release before.

Most organisations cannot answer. They have the tag in version control and the build in the pipeline, and neither one tells them which third-party components were embedded, which permissions were requested, which endpoints were reachable or which credentials were sitting in the package. The knowledge existed for about a day and then dispersed.

That was survivable when nobody was going to ask. It is a different position when your published history is attached to a verified identity and the answer may be requested by a platform, an enterprise customer during procurement, or your own counsel after an incident.

The fix is unglamorous. Assess every artifact you publish, keep the result, and keep it dated. What you want at the end of a year is not a dashboard. It is a per-version record you can hand to someone.

Four findings that get materially worse under attribution

Everything on this list was already a defect. Attribution changes how long it follows you.

How attribution changes the cost of four common mobile findings
FindingWhy it is worse now
Credentials inside the packageA key in a shipped binary is exposed to anyone who downloads the app. The build stays on devices long after you fix it, so the exposure outlives the patch, and the package it sits in is now attributable to you by name. This remains the most common serious result we see in a real scan queue.
Third-party componentsYou did not write it, you cannot patch it, and under attribution you answer for it. Knowing which components are actually embedded in the built artifact stops being a licensing question and becomes a risk question.
Weak cryptography and plaintext storageDeprecated ciphers and unprotected local databases are trivial to demonstrate from the package alone. Anyone can produce the evidence without your cooperation.
Exported components and broad permissionsAn entry point reachable by any other app on the device is attack surface you published deliberately, as far as an outside reviewer can tell. Intent is not visible in a manifest.

If you want the longer treatment of the first one, we covered it in finding hardcoded secrets in an Android app.

What I would do this quarter

Five steps, in the order I would take them. None of them require a new team.

  1. Inventory what you actually ship. Produce a component list from the built artifact, not from your dependency file. The two disagree more often than people expect, and the artifact is the one that carries your name.
  2. Assess the artifact on every release, not on every sprint. The unit of accountability is the published package, so that is the unit to test. Pull it apart, read the manifest and configuration, look for credentials, check what the third-party code brought with it.
  3. Put a gate in the pipeline. Decide what stops a release and enforce it automatically. A useful starting rule: no new critical or high finding relative to the previous version. It fails loudly, it is easy to justify to product, and it prevents the slow drift that most teams only notice during an audit.
  4. Keep the evidence, dated and per version. A report you can attach to a version number is worth more during procurement or an incident than any live dashboard.
  5. Treat anything that shipped as burned. If a credential reached a public build, rotate it. Do not reason about whether anyone found it. The build is on devices you do not control and it stays there.

If you want a shorter pre-release version of this, we keep one at the checklist before you ship.

Attribution is only a burden if you do not know what is in the box

I have watched teams treat verified identity as friction to be minimised. I understand the instinct and I think it points the wrong way. Identity checks are a one-time cost. Not knowing what is inside the thing you publish is a recurring one, and it is the cost that grows now that the publishing is attributable.

The teams that will find the next two years easy are not the ones with the cleanest source code. They are the ones who can say, for any version they ever published, what was inside it and what changed since the last one. That is a process question before it is a tooling question, and most organisations can answer it within a quarter if they decide to.

Mobexa exists to make that answer cheap to produce: it takes the package you are about to publish, pulls it apart the way an outside party would, maps what it finds to the OWASP MASVS control behind it, and keeps a dated record per version so you have something to hand over rather than something to reconstruct. Whatever you use to get there, get there before someone asks you for it. One note on method, and we mean it: only test applications you own or are authorised in writing to test.

Common questions

What does verified developer identity mean for mobile apps?
It means publishing is tied to an organisation that has been checked, rather than to an anonymous account. The check happens at the identity level and sits behind everything that publisher ships afterwards. The requirement is being introduced in phases and by region, and it reaches beyond the main marketplaces to other distribution channels.
Does this stop apps being installed from outside a marketplace?
Installing outside the main marketplaces is not being removed. What changes is the default: material that does not carry a verified identity moves behind a slower and more deliberate installation path. In practice most users stay on the default, so the effect is significant even though nothing is banned outright.
Why does attribution change how I should test my app?
Because the unit of accountability is the published package, not your source tree. Code review tells you what your team intended to ship. It does not show you what third-party libraries added, what the build injected, what stayed in resources or what post-processing changed. Only an assessment of the built artifact shows the thing that carries your name.
What should a release gate for mobile actually check?
Start with a comparison against the previous version and fail the build on any new critical or high severity finding. That single rule is easy to explain to product, it prevents slow drift between releases, and it forces a decision at the moment it is cheapest to act on. Tighten the threshold once the team is used to it.
A credential already shipped in a public build. What should we do?
Rotate it and treat it as compromised, whether or not you have evidence it was used. The affected build stays installed on devices you do not control, and many users never update, so the exposure continues after your fix goes out. Then add a check to the pipeline so the same class of defect cannot reach a public build again.
What evidence should we keep for each release?
A dated report tied to a specific version, listing the findings, their severity, the third-party components embedded in the artifact and what changed since the previous version. That record is what is useful during enterprise procurement, during an audit, or after an incident, and it is much cheaper to keep as you go than to reconstruct afterwards.

See it on one of your own apps

Mobexa tests the exact Android or iOS build you ship and maps every finding to the OWASP Mobile Top 10 and MASVS.

Start Free Trial