Meet ThreatPad!

Feels like we are starting an awesome discussion.

Let’s move this to it’s own topic.

:glowing_star: Most awesome risk assessment style? - General - Threat Modeling Connect Forum

And have this thread* stay with ThreatPad.

*) Always strange to write the -d “thread”. :rofl:

1 Like

Want to see ThreatPad in action??

⇒ Read how TMC DACH German chapter used it to threat model online dating like Tinder. :us: :uk: English and :de: German texts available.

Online Dating Security + :germany: TMC DACH Threat Modeling Feierabend - Events - Threat Modeling Connect Forum

Highlights / TL;DR

Inspired by this post by @AppSecSeanner, a ThreatPad “day at the beach” exercise conveys core threat modeling concepts (and ThreatPad) in 3-5 minutes.

We can see how ThreatPad is super slim and leaves enough space to have system model and methods next to threats and mitigations in a screen share.

1 Like

History?

I’ve experimented with showing the history / pattern how the threat model evolved:

It is cool. And it is creepy. ⇒ :cross_mark: I won’t merge.

If you have any comments, let me know.

Demo: how I threat modeled Online Dating for meetup preparation

Legend: :cloud_with_lightning_and_rain: created new threat, :umbrella: created new mitigation, :left_arrow_curving_right: moved to another threat, :hourglass_done:time passed (5min+)

:cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :hourglass_done: 23m :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :hourglass_done: 20m :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :umbrella: :cloud_with_lightning_and_rain: :left_arrow_curving_right: :umbrella: :hourglass_done: 7m :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :hourglass_done: 5m :cloud_with_lightning_and_rain: :hourglass_done: 9m :cloud_with_lightning_and_rain: :hourglass_done: 10d :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :hourglass_done: 3d :cloud_with_lightning_and_rain: :hourglass_done: 8d :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :hourglass_done: 18h :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :hourglass_done: 37d :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :umbrella: :hourglass_done: 17h :cloud_with_lightning_and_rain: :hourglass_done: 5d :cloud_with_lightning_and_rain: :umbrella: :umbrella: :umbrella: :umbrella: :umbrella: :umbrella: :cloud_with_lightning_and_rain: :cloud_with_lightning_and_rain: :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :umbrella: :umbrella: :umbrella: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :umbrella: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :cloud_with_lightning_and_rain: :hourglass_done: 1d :cloud_with_lightning_and_rain: :hourglass_done: 5d :left_arrow_curving_right: :umbrella: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :umbrella: :cloud_with_lightning_and_rain: :hourglass_done: 10m :cloud_with_lightning_and_rain: :hourglass_done: 6m :cloud_with_lightning_and_rain: :hourglass_done: 22d :cloud_with_lightning_and_rain: :hourglass_done: 19h :cloud_with_lightning_and_rain: :hourglass_done: 4d :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :umbrella: :cloud_with_lightning_and_rain: :hourglass_done: 2d :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :hourglass_done: 36m :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :umbrella: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :umbrella: :umbrella: :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :left_arrow_curving_right: :umbrella: :hourglass_done: 7m :left_arrow_curving_right: :umbrella: :umbrella: :umbrella: :hourglass_done: 8m :umbrella: :left_arrow_curving_right: :umbrella:

Should I add Effective / Expensive feature?

I’m experimenting with effective / expensive widgets when editing mitigations:

Effective has ? :man_shrugging:t3: / low :shield: / medium :shield::shield: / high :shield::shield::shield:. (What’s better emojis? I started with :flexed_biceps: but it requires skin colors…)
Expensive has ? :man_shrugging:t3: / low :money_bag: / medium :money_bag::money_bag: / high :money_bag::money_bag::money_bag:. (Also not the perfect emoji, because not all expense is money…)

Pro: Educates that feasibility and costs matter.

Pro: Educates that not all protection is 100%.

Pro: Educates that some mitigations have good ROI.

Contra: With the words of Github, “Anything added dilutes everything else.”

:red_question_mark: Should I merge the feature?

Context

  • Threatpad already has a style for threats and mitigation which can be :white_check_mark: done / :star: favorite / normal style / :wastebasket: rejected. This educates about propose-then-choose flow and that only done mitigation really counts. It’s only visible when editing.
  • Threatpad already has “How likely?” / “How bad?” which can be ? :man_shrugging:t3: / low :sleeping_face: / medium :neutral_face::neutral_face: / high :scream::scream::scream:. This educates about qualitative risk assessment. It is already shown in the threat view.
  • All the select features are designed so that they don’t annoy you when you don’t use them.
1 Like

Facilitators view

Wanted to share real quick how Global Threat Model Together Day 2025: What we modeled, what we learned - Events & Highlights - Threat Modeling Connect Forum shows how facilitators used ThreatPad for multiple sessions:

ThreatPad is slim because of it’s mobile-first design.

Also, it can be embedded in an iframe.

We made a facilitators bird’s eye view that observed the sessions as new threats and mitigations kept coming in. :smiling_face_with_sunglasses:

The feature is not official. It’s just what everyone can do by creating multiple spaces and embedding.

If you want to do the same, you may want to add the URL parameters ?bottom&refresh=10. bottomscrolls to the bottom in the overview when new things arrive. refresh=10refreshes every 10 seconds. With the normal long-polling style, most browsers only handle 7 parallel requests.

Yet another success

The whole Global Threat Model Together Day 2025: What we modeled, what we learned - Events & Highlights - Threat Modeling Connect Forum was a huge success with ThreatPad being a part of it.

Here’s the setup and screen that facilitators shared. It has ThreatPad on the left, where threats and mitigations were gathered. It has enough space for system diagram, method cheat sheet and instructions on the right.

This is similar to what we did in Online Dating Security + :germany: TMC DACH Threat Modeling Feierabend - Events & Highlights - Threat Modeling Connect Forum:

I like that, what determines the level of expense? So what is the threshold for low,med,high etc :smiling_face_with_sunglasses: