skip to content

The model shipped inside a past mobile app release was extracted — what does shipping a replacement buy you?

level: seniorimportance: should knowfreq 40%

answer

  1. you cannot recall a copy
  2. the clock is the installed base
  3. not a credential, so not revocable
  4. only the server-side half can change
  5. the register entry becomes white-box permanently

basics

~20 s

Very little on its own. Copies already taken cannot be recalled, and old installs keep the old file working for months. A replacement helps only once the server stops honouring what the old model produces.

solid answer

~50 s

A weight file is not a credential you can revoke — every copy taken stays usable forever, and you cannot force an uninstall. Two things follow. First, your remediation clock is the installed-base tail, not the release date: users update over weeks or months, and some never do, so the old artifact remains a live attack surface for as long as your service still accepts what it feeds. Second, the only lever that actually moves is server-side. Change what the server decides — a check the shipped model cannot compute, a binding to attestation the client cannot mint, a re-enrolment of the references the comparison uses — and retire acceptance of the old client version on a schedule you publish. Shipping a new model is worth doing, but it is a step in that plan rather than the fix, and the risk register should now carry the white-box number.

go deeper

for a junior

Understand that a file you have distributed cannot be taken back, and that a new version does not remove old copies from the devices that already have them.

for a middle

Explain why revocation has no analogue for weights, and identify which parts of the deployment can still change once the file is out.

for a senior

Show you would drive remediation server-side first, reason about the exposure window as an installed-base curve, and correct the documented access class rather than argue about extraction difficulty.

for a principal

Own the tradeoff between cutting off old clients quickly and locking out users who cannot update, and be prepared to publish and defend the retirement date.

## The instinct, and why it misfires The reflex on learning that a shipped model was extracted is to treat it like a leaked secret: rotate it, ship a new one, close the ticket. The analogy breaks in two places. **A weight file has no revocation.** Rotating a key works because a verifier stops accepting the old one at a moment you control. A copied model file is not presented to any verifier — the adversary runs it themselves. There is nothing to refuse. The old copy keeps working as long as it is *useful*, and its usefulness is set by whether your service still behaves the way it did. **You do not control the client population.** A new build reaches users on their update schedule, not yours. Some fraction never updates. So even where the new model does change the picture, the change arrives as a long tail rather than a cutover, and during that tail the old file and the old client protocol are both live. ## What is actually still yours The same thing as before the incident: whatever the server decides for itself. That means remediation has to be phrased as *changes to what the server accepts*, and the new model is only one input to that. Practical shapes this takes, from most to least reliable: - **Add a decision the shipped model cannot compute.** A check that runs server-side on evidence the client does not produce is not defeated by holding an old encoder, because holding it says nothing about that check. - **Bind submissions to something unforgeable.** A hardware-backed attestation of device and app build, or a fresh server-issued challenge, means the server is no longer accepting anonymous values of unknown origin. - **Re-enrol or re-key the references the comparison uses.** If the adversary's advantage came from anything derived from stored references, changing those is the part that expires their work. - **Retire old client versions on a published schedule.** This is what finally makes "we shipped a new model" true, and it costs you the users who cannot or will not update. Notice that only the last of these mentions the model at all. ## Reasoning about the tail Treat the exposure window as a distribution, not a date. Useful questions for the review: what fraction of active sessions run the affected build today, what does that curve look like at thirty and ninety days, what is the floor it flattens to, and what is the oldest version the service still accepts at all. If the answer to the last one is "anything that ever shipped", the extraction is permanent by construction and that — not the extraction — is the finding to escalate. ## What the incident should change on paper Before the extraction, the deployment's documented threat model may well have said black-box: an adversary reaches the model through the app, so they are metered and observed. That was never true once weights shipped, and the extraction merely demonstrated it. So the register entry changes twice over. The *access class* becomes white-box, permanently, for this and every future release that ships weights. And any robustness figure quoted for this system has to be the white-box figure, because that is the operating point. A black-box number here was measuring the effort of unzipping an application, which was never a security property. ## The judgment call inside the response There is a real tension worth naming. Cutting off old client versions quickly shortens the exposure but locks out users on old devices, which in a consumer banking context is a support and fairness problem, not just an engineering one. Leaving them on indefinitely means the extracted artifact is exploitable forever. The honest position is to pick a retirement date, publish it, and accept the cost — and to make the *server-side* additions immediately, since those help the tail without requiring anyone to update. ## The one-sentence version Rotating a model that has already been handed out does not remove the adversary's copy; it only matters to the extent that your server stops honouring what that copy produces, and that is a decision you make in the data centre, on a schedule set by your installed base rather than by your release.

  • How would you decide how quickly to cut off the affected client versions?
    Weigh the exposure curve against who gets locked out. Look at the share of active sessions on the affected build at thirty and ninety days and the floor it flattens to, then set and publish a retirement date. Make the server-side changes immediately, since they protect the tail without requiring anyone to update, and treat the cutoff as the thing that finally ends the exposure.
  • Does it matter whether the extraction was published or found by an internal test?
    It changes urgency, not the technical position. The file was extractable the day it shipped, so the exposure predates the discovery and the remediation is identical. What publication changes is how many people hold a copy and how fast, which affects the schedule you can defend, not the design change you owe.
  • Can you tell whether anyone actually used the extracted model against you?
    Usually not directly, because the adversary's iteration happened offline and never touched your service. You can only look for the last step: submissions that clear a decision while being anomalous in ways the model does not see — device, account history, timing, geography. Absence of such signals is weak evidence, since a competent adversary presents very few attempts.

saying these in an interview costs you the question

  • Treats a shipped model file as a rotatable credential
  • Assumes a new release ends the exposure on release day
  • Ignores the installed-base tail and un-updatable clients
  • Keeps quoting a black-box robustness number after shipping weights
  • Plans remediation entirely in the client and none in the server

context