Your threat model flagged an unauthenticated firmware-push path; a pentest did not exploit it. Is the finding closed?
answer
- the two instruments measure different things
- a failed attempt is weak evidence
- scope, environment, time, skill
- only a change or a decision closes it
- aim the test at the model's assumptions
basics
~10 sNo. A pentest tests one build, from the positions a tester could reach, in a limited window, so failing to exploit something is not evidence the design constrains an attacker.
solid answer
~50 sA pentest and a threat model produce different kinds of evidence, and one cannot discharge the other. The test says: this tester, in this window, from these starting positions, against this build, did not get through. The model says: the design permits an unauthenticated actor on the plant network to push firmware to the robot fleet, and nothing in the architecture stops it. A null result does not contradict that: the tester may never have been placed on the plant network, may have had no real fleet controller to push to, or may simply have run out of days. What closes the finding is a change to the design so the threat no longer applies, evidence that a control now stands in the path and works, or an explicit, recorded decision by someone with authority to live with it. "Nobody managed it during the test" is none of those.
go deeper
Remember that a penetration test looks at one deployed build for a limited time, while a threat model reasons about the design itself. Not finding an exploit is not the same as there being nothing to find.
Explain concretely why a null test result is weak evidence: scope, environment, time budget and tester position all cap what an engagement can reach. Be able to name what does close a design finding.
Show you can hold the line in the room when a clean report is offered as closure, and describe how you sequence the two — model first, then point the test at the assumptions the model depends on.
Own the policy question: what evidence your organisation accepts as closing a design-level finding, and how you prevent testing budgets from being spent laundering uncomfortable architecture decisions.
### Two instruments, two kinds of evidence Threat modeling and penetration testing are often spoken of as interchangeable security activities, and the confusion surfaces the moment they disagree. They do not measure the same thing. A **threat model** is a design-time argument. It says: given this architecture, an actor in this position can do this to this asset, because nothing in the design prevents it. Its claims are about structure, and they hold for every build produced from that structure. A **penetration test** is an empirical result about a specific target. It says: within an agreed scope, over an agreed window, one or more testers with particular skills and particular starting positions attempted to compromise this deployed build and achieved these things. Its claims are about one instance, at one moment. The asymmetry matters. A successful exploit is strong evidence — it proves the path exists. A failed attempt is weak evidence, because the space of reasons for failure is enormous and mostly has nothing to do with the design being sound. ### Why the null result carries so little weight Consider the warehouse robot fleet controller. The model states that the firmware-push endpoint accepts an image without authenticating the pusher, so anyone who reaches the plant network can change what the robots do — an availability and physical-safety problem, not a data-theft one. Now the test comes back clean. Ask what the clean result actually rules out: - **Scope.** Was the tester ever placed on the plant network, or did they work from the corporate network with a firewall in between? Testers usually get the position the contract gave them, not the position the threat assumes. - **Environment.** Was there a real fleet controller with real robots to push to, or a staging instance with the push path disabled because nobody wanted to brick a lab unit? - **Time.** Testing is measured in days. Attackers are not. - **Skill and focus.** A generalist test covering an entire application will not spend its budget on one embedded protocol. - **Timing.** The build tested may differ from the design being modelled, in either direction. None of these are criticisms of testing. They are the ordinary properties of a time-boxed, scope-limited engagement, and they are exactly why absence of a successful exploit cannot be read as evidence of design soundness. ### What actually closes a design-level finding Three things legitimately end it: 1. **The design changes** so the threat no longer applies — the push path now requires an authenticated, authorised operator, or the controller only accepts images bearing a signature it verifies against a key it holds. 2. **A control is shown to stand in the path and work.** Note the second half: asserting that a control exists is not the same as showing it operates. This is one of the places a test genuinely helps. 3. **Someone with the authority accepts it**, in writing, with the reasoning recorded. That is a decision, not a null result, and it survives review because a person's name is on it. What does not close it: a clean report, a tester's opinion, or the passage of time. ### Where a test does help a model The productive relationship runs the other way round. A model is full of assumptions — "the controller is only reachable from the plant VLAN", "the loader rejects unsigned images", "that admin interface is not exposed". Those assumptions are precisely what a test is good at checking, and turning them into explicit test targets is a much better use of the engagement than asking a tester to re-derive the threat list from scratch. Model first, then aim the test at the assumptions the model leans on hardest. The reverse also carries signal: a tester finding something the model never mentioned tells you the model's scope or its picture of the system was wrong, which is worth more than the individual finding. ### The organisational failure mode Watch for the sequence where a design finding is uncomfortable, a test is scheduled, the test comes back clean, and the finding quietly disappears. It is rarely dishonest — it feels like evidence-based decision-making. It is not, and the tell is that the design has not changed. If the architecture still permits the thing, the threat is still there; all that has changed is that one attempt failed. Say so plainly, in those terms, and re-anchor the conversation on which of the three legitimate closures the team wants to pick.
- So what should a pentest be aimed at once you have a threat model?At the model's assumptions. Every model leans on statements like 'the controller is only reachable from the plant VLAN' or 'the loader rejects unsigned images'. Those are empirically checkable and are exactly what a test does well. Handing a tester the assumption list gets far more value than asking them to rediscover the threats, and it turns their findings into direct corrections to the model.
- A tester reports something your model never mentioned. What do you do with that?Treat it as a signal about the model, not just as a bug. Ask whether the component was inside the scope you drew, whether the diagram was missing a flow, or whether the whole class of threat was one your enumeration skipped. Fixing the individual issue is routine; the valuable move is correcting whatever structural blind spot let the model miss it.
- Can a pentest ever justify closing a threat-model finding?Indirectly, yes — when the finding was that a control might not work, and the test demonstrates it does. That is a positive result about a specific claim, not a null one. What never justifies closure is a tester failing to exploit a path the design still permits, because the design is unchanged and the test only sampled one attempt.
A fire drill nobody failed is not proof the building has enough exits. The drill tests one attempt on one day; the exits are a property of the floor plan.
saying these in an interview costs you the question
- Treats no successful exploit as proof of no risk
- Assumes a pentest covers everything a model covers
- Closes design findings on a clean test report
- Says the model was wrong because the tester found nothing
- Schedules a test specifically to retire an uncomfortable finding
- Confuses a control existing with a control working