Best Practices

Tabletop Exercise: Software Supply Chain Incident

A facilitator's guide to running a supply chain incident tabletop that produces decisions, not theater, with concrete injects and evidence-driven debrief.

Shadab Khan
Security Engineer
6 min read

A tabletop exercise either teaches your organization something or wastes a half-day of expensive calendars. There is no middle ground. The difference is rarely the scenario and almost always the facilitation. A good facilitator forces decisions. A bad one narrates a story while everyone nods along.

This article is a facilitator's guide for a supply chain tabletop. It assumes you already know that tabletops are useful. The work here is making sure the next one you run produces a list of decisions, owners, and dates, not a feel-good summary deck that nobody opens again.

The scenario

The scenario should be specific enough that participants cannot defer questions with "we would figure that out later." Vague scenarios produce vague responses, and vague responses produce nothing.

Use this one. Your security team receives a report from a researcher that a popular utility library you depend on, in version range X.Y to X.Z, contains a backdoor that exfiltrates environment variables on first import after a system reboot. The library is in your direct dependencies for at least one customer-facing service. The researcher has not yet published the disclosure. They have given you forty-eight hours.

The scenario is concrete because it forces the participants to commit to an action. They cannot punt on whether the library is in their environment. They have to decide, in the room, how they would find out.

The roles

Assign every participant a role with a written charter. Roles drift if they are only verbal. The minimum set is incident commander, communications lead, engineering lead for the affected service, security operations lead, legal counsel, and customer communications lead. If your real organization has different titles, use those, but assign them.

The role assignments are deliberately not the participants' actual jobs. The vice president of engineering does not get to be incident commander. The communications lead is not the actual head of marketing. The point is to test the role definitions, not the individual relationships. If the only person who can run the incident is the one who happens to be senior in the room, you do not have a process. You have a hero.

The injects

Injects are the events the facilitator drops into the scenario at fixed times. Good injects raise the difficulty, expose dependencies, and force decisions. They are written in advance, not improvised, because improvised injects are how facilitators end up steering the exercise toward their preferred conclusion.

For this scenario, use four injects, one every twenty minutes.

First inject: at the thirty-minute mark, the security team's initial scan completes. The library is present in eight services across three products. Two of the services are in production, four are in staging, and two are in development. The participants must decide how to communicate this internally and whether to alert leadership.

Second inject: at the fifty-minute mark, a customer support ticket arrives reporting unexpected outbound traffic from a self-hosted instance of one of your products. The traffic pattern matches the researcher's description. The participants must decide how to respond to the customer without confirming details of an unpublished advisory.

Third inject: at the seventy-minute mark, the researcher contacts you again, saying they have detected a public exploit in the wild. They are accelerating their disclosure timeline to twenty-four hours. The participants must decide whether to issue a public statement, an advisory to customers, or both, and on what timeline.

Fourth inject: at the ninety-minute mark, an engineer in the affected team reports that the upgrade path is not clean. The patched version of the library introduces a breaking change that will require code modifications in three of the eight services. The participants must decide whether to upgrade everywhere immediately, deploy a temporary mitigation, or stage the rollout.

Each inject lands a decision in the participants' lap. The facilitator does not let them defer.

The artifacts

The exercise should reference real artifacts so the decisions are constrained by reality. Pre-stage them. The component graph showing the affected library across your services should be a real query result, not a hypothetical. The deployment timeline showing which version of the library is in production should be real. The asset inventory showing which customer instances are running the affected version should be real.

Pull these from your platform before the exercise starts. Use safeguard_get_dependency_graph filtered to the affected coordinates to produce the component map, safeguard_list_assets to produce the runtime inventory, and safeguard_get_remediation_plan to produce a candidate upgrade path that the engineering lead can react to. When the participants ask "do we know which services are affected," the answer is a screen, not a guess.

The debrief

The debrief is more important than the exercise. Run it the same day, while the decisions are fresh, but after a thirty-minute break. The break matters. It separates the participants' adrenaline from their analysis.

The debrief produces three artifacts. A list of decisions made, with the rationale and any dissents recorded. A list of decisions that should have been made but were not, with an owner for the next time. And a list of process gaps that the exercise exposed, also with owners.

The third list is the most valuable output. Process gaps are why you ran the exercise. Common ones for supply chain scenarios include: nobody owns the question of whether to issue customer advisories, the legal review for a public disclosure has no defined service-level objective, and the engineering lead does not have the authority to unilaterally upgrade a shared library.

Each gap becomes a ticket. Each ticket has a date. The next tabletop, six months later, references this list and tests whether the gaps have closed. If they have not, you are not learning, and the exercises are theater.

Cadence and audience

Run a supply chain tabletop twice a year. The first one should include the operational team and one layer of management. The second one should include leadership, including the executive sponsor. The two audiences expose different gaps. The operational tabletop reveals process gaps. The leadership tabletop reveals authority and communication gaps.

Do not run a single combined tabletop with everyone in the room. The presence of the executive flattens the discussion, the operators defer, and the gaps that should be discovered stay hidden. Two separate exercises produce more learning than one.

What success looks like

A successful tabletop produces three to five process changes. A wildly successful one produces a list of process changes and a calibrated estimate of how long each will take to implement. An unsuccessful one produces a slide deck with a green checkmark on a slide called "incident response readiness."

The mark of maturity in a security program is not that tabletops go smoothly. It is that they go badly the first time, slightly better the second time, and noticeably better the third time, with the improvement traceable to specific changes you can name. Run the exercise. Measure the changes. Iterate.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.