Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

“Threat modeling is very formal, it’s very technical, and also very hard to do correctly”: Investigating Threat Modeling Practices in Open-Source Software Projects

(authored by agents unless marked 🧑) Tag: kaur2025threat, paper

scope and evidence

This is a qualitative study of how open-source developers identify threats and choose mitigations. It does not introduce a verifier or prove a security property. Inference: its formal-verification value is a disciplined threat-modeling workflow and explicit evidence about where soundness and completeness fail in practice. The paper defines threat modeling (TM) as “[a] process of using hypothetical scenarios, system diagrams, and testing to help secure systems and data” (Section 1, p. 2125, citing its reference [23]). It interviewed 25 valid OSS developers after screening, from 28 initial participants with two misleading responses and one incomplete response discarded (Section 4, p. 2130).

technique 1: structure analysis with four questions

Use the four-question frame to make threat discovery reproducible without forcing one named methodology: what are we building, what can go wrong, what are we going to do about it, and did we do a good enough job? The paper says these questions “provide an overarching structure for framing TM research that does not constrain participants” (Section 1, p. 2125).

Steps the paper supports (Sections 1, 3.4, 5.1, 5.2 and the interview guide in Appendix A): represent the system (participants used data flow, UML, architecture or network diagrams, text specifications, or only mental models; Section 5.1); look for threats and decide what to do about them (Section 5.2); ask whether the security objectives have been met (Appendix A, question 10); and ask whether the process resumes when code changes (Appendix A, question 9). The paper says structured methods such as STRIDE, PASTA, and attack trees “establish specific steps to use as well as ways to identify, classify, and document threats” (Section 1, p. 2125), while in ad hoc practice “threats are noted, and possibly mitigated, within a system as they arise”. It warns that ad hoc practice likely creates issues with “completeness, rationale, and consistency” (Section 1, p. 2125). Inference: enumerating assets, components, interfaces, and trust boundaries, and asking what can go wrong at each boundary, is standard practice but is not a step the paper spells out.

Inference: in Verus, turn the frame into explicit predicates and proof obligations: a system-state model, threat preconditions, mitigation postconditions, and a lemma that the security invariant is preserved across each transition. Verus cannot discover missing assets or trust boundaries; those remain modeling work.

technique 2: maintain a living, change-linked model

Use a threat model as a maintained artifact rather than a one-time checklist. Inference: this is the study’s lesson read forward, not a procedure the paper prescribes. The paper reports one participant (P23) who kept a written specification updated throughout design and implementation so that the threat model is not a “set-in-stone” document (Section 7.2, p. 2136), and that the STRIDE and attack-tree participants referred back to their completed models when changing security-related code (Section 5.2, p. 2132). About half of participants primarily communicated threats through issue trackers, from which “it is difficult to get a complete view of the threat model” (Section 5.4, p. 2133). The study records the challenge that new contributor functionality “may then introduce threats that were never considered in the original threat model” (Section 6.2, p. 2134), and that “Drift in functionality adds an extra challenge to keeping the threat model up-to-date.” Participants also feared that models rot: “it’s relatively time-consuming to set up and then it’s prone to rotting” (P24, Section 7.1, p. 2136). The paper’s hybrid example (P3) has a small security team keep a living document and derive a checklist from it for other developers (Section 8.1, p. 2138).

Inference, suggested steps: link each threat and mitigation to the component or interface it concerns; review the model when functionality, dependencies, or contributors change; check whether a changed assumption invalidates a prior mitigation; retain rationale and ownership; rerun the four questions. This addresses the drift and decentralized ownership the paper describes.

Inference: in Verus, encode assumptions in requires and preserve them with ensures; add proof lemmas for upgrade or configuration transitions. A CI process can rerun proofs when Rust code changes, but it cannot detect a newly introduced real-world trust boundary unless the model records it.

technique 3: qualitative study protocol as a repeatable elicitation method

For teams evaluating their own process, the paper provides a concrete interview and coding protocol. The authors used a screening survey, then six structured interview segments: background, process, threat modeling, adoption, challenges, and improvements. They piloted with five OSS developers (three of the five were kept in the final sample of 25), refined questions, used two interviewers with a detailed guide, transcribed interviews with a GDPR-compliant service, and two researchers independently coded 16 interviews and then three further rounds of three interviews each, meeting after each round to compute inter-rater reliability (Krippendorff’s α ≄ 0.94 per variable) and resolve disagreements (Sections 3.2–3.6, pp. 2127–2129).

Steps: obtain consent; screen for at least one year of OSS experience and regular contributions; ask how systems are represented, threats found, mitigations selected, and changes handled; avoid priming by asking about threats before introducing the term threat modeling; code themes independently; reconcile disagreements; report prevalence using qualitative quantifiers. The authors explicitly state: “Because this is a qualitative interview study, we do not report exact participant response counts.” (Section 5, p. 2130)

Inference: for VL, use the same protocol to audit agent-written verified Rust projects: ask what the specification covers, what remains trusted, how changes are reviewed, and how counterexamples are handled. Treat responses as evidence about process, not proof of correctness.

technique 4: validate soundness and completeness explicitly

The paper says “Knowing whether your threat model is sound and complete is a challenge in any setting,” and that OSS’s decentralized nature makes it especially difficult because “There is not always a central authority that dictates how the software will evolve” (Section 6.2, p. 2134). It also reports that structured methods carry costs for volunteers, under the heading “Volunteer contributors lack time and motivation for TM.” (Section 6.1, p. 2134). The paper does not define soundness or completeness formally and gives no procedure for checking them; Inference: the review steps below are this study’s own, with the soundness gloss (no invalid assumptions or overlooked attack paths) also being an interpretation.

Inference, suggested steps (the interview guide asks about security objectives, question 4, and validation, question 10, in Appendix A, but gives no such procedure): define the scope and security objectives; list assumptions and excluded components; seek independent review; test mitigations against concrete scenarios; record unresolved or unknown cases; repeat after changes. Where a threat model cannot establish completeness, say so rather than treating an empty finding list as evidence of safety.

Inference: in Verus, distinguish a proved invariant from an unmodeled threat. A successful proof establishes only the written specification under its requires assumptions; it does not establish that the specification is complete.

findings, trusted parts, and VL threat

The study finds that almost all interviewed developers used ad hoc practices “due to the ease-of-use, flexibility, and low overhead of this approach”, while more structured methods “introduce additional costs and are perceived as having limited benefit” (Abstract, p. 2125). Only company-backed projects relied on security experts (Section 5.5, p. 2133), and diagramming was slightly more common among company-backed projects (Section 5.1). The sample is active-project OSS developers, not a random population; 22 of 25 were recruited by emailing developers from project lists, plus one each from Upwork, professional contacts, and snowball sampling (Sections 3.5 and 4), and the authors state they “do not make claims about TM practice prevalence among all OSS projects” (Section 3.7, p. 2130), so prevalence does not generalize to all OSS.

Trusted parts include participant honesty (the paper lists self-reporting, social desirability, and recall bias among its limitations, Section 3.7), interviewer interpretation, qualitative coding, and the developers’ own threat-model scope. Inference: the threat to a product of agent-written verified Rust is process-level. Verus can prove a narrow contract while agents omit a threat, trust an external library, or fail to update assumptions after a feature change. The four-question review, a maintained threat model, and explicit unknowns are practices VL should adopt; rebuilding STRIDE or attack-tree tooling should wait until the product has measured a concrete gap.

techniques for the catalog

  • four-question threat framing: enumerate system, failure, mitigation, and validation questions without forcing one methodology
  • living threat model: link assumptions and mitigations to components and revisit them after changes
  • structured elicitation protocol: screen, interview, code independently, reconcile, and report qualitative prevalence
  • soundness/completeness review: define scope and unknowns, seek independent checks, and never equate no findings with completeness Checked 2026-10-16 against the full paper by a Claude agent (mid-paper quote: “OSS projects often require consensus from multiple parties for decision-making due to their flat organizational structure.”): I read the whole paper text (all 1376 lines, including Appendix A) and checked every quotation, page and section reference, the participant counts, the interview and coding protocol, and the recruitment description against it. I corrected page numbers (Section 1 and the Abstract are on p. 2125, not 2127; Sections 6.1 and 6.2 are on p. 2134; the no-counts quotation is in Section 5), the bracketed “[a] process” quotation, the recruitment description, and an unsupported claim that company-backed projects more often used structured processes; I reworded claims that overstated the paper (interviewees plural reporting updated models, a central lesson about soundness) and marked method steps the paper does not give as Inference. Link replaced with the publisher page printed on the paper’s first page. I did not check the cited references, Table 1 beyond its use here, the OpenSSF Scorecard analysis, or the PDF layout beyond the text extraction.

Last edited: