At the end of the previous lesson a crack was left open in the control catalogue: there are controls whose effectiveness does not depend on Nimbus. C-03 requires just-in-time access from a consultancy with its own processes; C-19 replicates backups to the region of a provider whose decisions nobody at Nimbus takes; CI drags in hundreds of dependencies written by strangers. And the detail that sums it all up: the vector of the incident in 02-06 was not a Nimbus failure, but a breach at the consultancy that Nimbus did not even get to hear about until day 20. This lesson is about that part of the perimeter you do not control but do answer for: how a supplier is chosen, what you require of them by contract, how they are supervised, how they are offboarded, and how you manage the risk of the third-party software that forms part of your product.
Contents
- The perimeter you do not control: you outsource execution, never responsibility
- Nimbus's third-party map
- The return of the consultancy: anatomy of the 02-06 vector
- The supplier management life cycle
- Due diligence proportionate to the risk
- What the contract must say
- Shared responsibility in the cloud
- Software supply chain
- Continuous supervision and the incident that is not yours
- The third-party register as an artefact
- The perimeter you do not control: you outsource execution, never responsibility
When a physiotherapy clinic signs up with Nimbus, it is not signing up with "Nimbus and its twelve suppliers": it is signing up with Nimbus. If the transactional e-mail provider leaks the appointment reminder messages, the clinic will call Rubén, not the provider. And if the data exposed reveals which patients attend which treatment, the one who has to explain themselves — and, very probably, notify — will be Nimbus.
Hence the fundamental asymmetry of this lesson:
| Can be outsourced | Cannot be outsourced |
|---|---|
| Execution: who runs the servers, who sends the e-mails, who keeps the backups | Responsibility towards the customer and towards the authority |
| The cost of part of the risk, by contract or by insurance (04-01) | Reputation (A-20) and the customer's trust |
| Specialist technical knowledge | The obligation to know what your suppliers do with your data |
There is a legal translation of this idea. When a third party processes personal data on Nimbus's behalf, EU law distinguishes between the controller — whoever decides why and how the data is processed, which here is the clinic, with Nimbus in turn being controller with respect to its own employees — and the processor, who processes it following instructions. An infrastructure or transactional e-mail provider is usually a processor (or sub-processor) of Nimbus. The practical consequence that matters today is that choosing a processor badly and not supervising them is your own breach, not somebody else's.
Validation note. The classification of each third party as a processor, a sub-processor or an independent controller, and the associated contractual obligations, depend on the specific case and have direct legal consequences. Only the idea is presented here; the development belongs to 06-03. Before signing a data processing agreement, review it with legal advisers or with your compliance lead.
- Nimbus's third-party map
Before you can manage you have to list, and most SMEs discover at this point that they have twice as many suppliers as they thought. The column that provokes the most conversations is the last one.
| Third party | Type | What data it reaches | What systems | Criticality | If it disappeared tomorrow |
|---|---|---|---|---|---|
| Systems consultancy (A-19) | Service | Potentially all of it | Administrative access to the infrastructure | Critical | Nimbus is left with no out-of-hours cover; Lucía takes on everything |
| Cloud provider (A-05) | IaaS/PaaS | All of it (encrypted at rest) | The entire platform | Critical | Total outage; a migration lasting months |
| Payment gateway (A-12) | SaaS | Tokenised payment data | API and webhook integration | High | Cannot take payments; alternatives available in weeks |
| Transactional e-mail (A-11) | SaaS | E-mail, name, appointment time | Outbound API; DKIM for the domain | High | Reminders stop going out; replaceable in days |
| Repository and CI/CD (A-06) | SaaS | Source code, pipeline secrets | Deployment to production | Critical | Cannot deploy; the code is also held locally |
| Ticketing and support tool | SaaS | Contact details and screenshots customers send in | None in production | Medium | Support by e-mail temporarily |
| Video calls and office suite | SaaS | Internal documents, payroll (A-16) | Corporate identity (SSO) | High | Operational disruption; awkward migration |
| Payroll and accounting firm | Service | Employee data | None | Medium | Replaceable; data recoverable |
| Open source dependencies | Product | None directly | They execute inside the API | Critical | They do not disappear, but they get abandoned or compromised |
Three readings of the map. First: the third-party surface is bigger than your own. Nimbus has 22 assets and nine categories of third party, and several of them touch data that reveals health information. Second: the ticketing tool looks harmless until you remember that customers attach screenshots containing real patient data when they open a ticket; that is the supplier everybody classifies wrongly. Third: open source dependencies are the only third party with no contract, no point of contact and no SLA, and yet their code runs with the same privileges as Iván's.
- The return of the consultancy: anatomy of the 02-06 vector
Promised in 03-07 and here it is. Remember the timeline: day −45, the consultancy suffers a breach and credentials for accessing its customers are leaked; it tells nobody. Day 0, 22:14, someone signs in to Nimbus with the consultancy's shared account, with no MFA, and nobody notices because overnight access by the consultancy is routine. Twenty days later, 1.2 TB exfiltrated and the backups destroyed.
Five conditions had to hold at the same time, and none of them was technical:
| Condition | Why it existed | Cost of having avoided it |
|---|---|---|
| Permanent access, not just-in-time | Granted in 2023 "so they can help out overnight" and nobody reviewed it (the exception with no expiry from 04-02) | Nil: it is a configuration decision |
| Account shared between engineers | Convenient for the consultancy; Nimbus thought it normal | Nil: create three named accounts |
| No MFA | It was never required in writing | Nil or minimal |
| No session recording or alert | There was no detective control over A-19 | Low |
| No contractual obligation to notify breaches | The contract only covered availability and price | Nil: it is a clause |
And the cost of not having avoided them, according to the analysis in 02-06: 40 clinics at a standstill, 1.2 TB of data revealing health information in an attacker's hands, backups destroyed, a breach notification of indeterminate scope — because the logs had rotated after 7 days — and lost customers. In other words: five measures of essentially nil cost separated Nimbus from the worst day in its history.
There is an even more uncomfortable detail. The first three conditions are Nimbus's, but the breach happened at the consultancy, and Nimbus did not find out for 45 days. Even if Nimbus had had MFA, it would still not have known its supplier had been compromised. The notification clause is not paperwork: it is the only mechanism by which information reaches you from the perimeter you do not control.
What should have existed, in the order in which it gets implemented:
- Named accounts per engineer with their name and their e-mail address, never a "consultancy" account.
- Mandatory phishing-resistant MFA, with no exception and written into the contract.
- Just-in-time access: it does not exist until it is requested, lasts 8 hours and revokes itself (C-03).
- Session recording retained for 12 months, with an alert on access outside the agreed window (C-09).
- Quarterly review of who at the consultancy still has access and why (C-22).
- A contractual incident notification clause with a 24-48 hour deadline.
- The supplier management life cycle
flowchart TB
S["1. SELECTION AND DUE DILIGENCE\nQuestionnaire proportionate to the risk.\nCertifications, sub-processors, location"]
S --> C["2. CONTRACTING\nSecurity clauses, SLA,\nbreach notification, exit"]
C --> I["3. TECHNICAL ONBOARDING\nMinimal and named access,\nMFA, logging switched on"]
I --> SU["4. CONTINUOUS SUPERVISION\nQuarterly access review,\nbreach alerts, SLA KPIs"]
SU -->|"renewal"| SU
SU --> B["5. EXIT\nRevoke access, retrieve data,\nCERTIFICATE OF DESTRUCTION,\nclose integrations and API keys"]
B --> F["Third-party register updated"]
The two phases most often neglected are 1 and, above all, 5. When a company stops working with a supplier, the commercial relationship ends the day the invoice is cancelled; the technical access does not. The exit has its own checklist:
- Revoke all the supplier's accounts, including service accounts and the API keys you issued them.
- Remove their IP addresses from any allowlist, along with their certificates or SSH keys.
- Retrieve your data in a usable format before closing the account, not afterwards.
- Require a certificate of destruction for your data in their systems and in their backups, with the date on which their own backups expire.
- Disconnect integrations, webhooks and CI
secretsthat point at their service. - Record the offboarding in the third-party register with a date, so the next review does not go looking for them.
It is two hours of work that almost nobody does, and it produces exactly the kind of orphan access that appears in the case studies in 02-06.
- Due diligence proportionate to the risk
The guiding principle: do not ask a supplier of 3 people for the same as one of 3,000. A 200-question questionnaire sent to a local consultancy produces two guaranteed outcomes: they do not answer it, or they answer it dishonestly. Make the effort proportionate to the criticality:
| Level | When | What is asked of them |
|---|---|---|
| Light | No access to data or systems (accounting firm, design tool) | A short declaration, references, a check that they exist |
| Standard | Non-sensitive personal data or limited access (ticketing tool, video calls) | A 15-20 question questionnaire + a review of their privacy policy and their public incident history |
| Enhanced | Administrative access, health data or a critical dependency (consultancy, cloud, gateway) | Full questionnaire + certifications + SOC 2 Type II report or equivalent + specific clauses + annual review |
5.1 Assessment questionnaire (enhanced level)
# Supplier security questionnaire — Nimbus Reservas, S.L. v2
Supplier: ______________ Level: Enhanced Date: ______ Contact: ______
## 1. Governance and certifications
1.1 Do you hold ISO/IEC 27001 certification, ENS accreditation or a SOC 2 report?
Attach the scope and the date. (Careful: the SCOPE matters more than the badge.)
1.2 Who is your head of security and what is their direct contact?
1.3 Have you suffered any security incident in the last 24 months? Describe it.
## 2. Data and sub-processors
2.1 What data of ours do you process and for exactly what purpose?
2.2 In which countries is it stored and processed? Are there transfers outside the
EEA? If so, under what mechanism (adequacy decision, standard clauses)?
2.3 List ALL sub-processors with access to our data and their location.
2.4 How do you notify us of a change of sub-processor, and with how much notice?
2.5 What is your retention and deletion policy at the end of the contract?
## 3. Technical protection
3.1 Do you encrypt data in transit and at rest? State the algorithms and key management.
3.2 How do your employees authenticate? Is MFA mandatory on administrative access?
3.3 How is your staff's access to our data granted, reviewed and revoked?
3.4 What activity log do you keep of access to our data, and for how long?
3.5 How often do you run penetration tests and who carries them out?
## 4. Incidents and continuity
4.1 Within what DEADLINE do you commit to notifying us of an incident affecting us?
4.2 Who would contact us and through which channel outside working hours?
4.3 Do you have a continuity and recovery plan? When did you last test it and what
was the real measured RTO/RPO?
4.4 Do you hold cyber liability insurance? State the cover.
## 5. People and exit
5.1 Do you carry out background checks and security training for your staff?
5.2 How do you revoke access when one of your employees leaves, and within what time?
5.3 On termination of the contract, in what format and within what time do you return
our data, and how long does it take you to issue the certificate of destruction?
Answers assessed by: ______ Outcome: Approved / Approved with conditions / Rejected
Conditions imposed: __________________________ Next review: __________5.2 How to read a SOC 2 Type II report
It is the document most often asked for and least often read. Four keys:
- Type I versus Type II. Type I says the controls were designed as at a date; Type II says they operated over a period (usually 6-12 months). Only the second demonstrates effectiveness, which is exactly the distinction from 04-03.
- The scope is everything. A report may cover only one product or one region. If your data is in the service that falls outside the scope, the report says nothing about you.
- Go straight to the exceptions. The test results section lists the deviations the auditor found. A report with no exceptions at all over 12 months deserves a question, not applause.
- Look at the complementary user entity controls. Almost every report includes a list of things you have to do for the supplier's controls to work. It is the shared responsibility from section 7, written out in full.
- What the contract must say
| Clause | What it must fix | Why, in Nimbus's case |
|---|---|---|
| Security measures | Specific, verifiable obligations (MFA, encryption, logging), not "appropriate measures" | "Appropriate" is not enforceable in practice |
| Incident notification | A deadline in hours, channel, minimum content and contact person | The consultancy's 45 days of silence |
| Subcontracting | Prior authorisation or a right to object; an up-to-date list of sub-processors | Your supplier has suppliers |
| Service level (SLA) | Availability, response times, penalties and how it is measured | An SLA with no measurement method cannot be claimed against |
| Right to audit | Your own audit, a third-party report or an annual questionnaire, depending on size | Proportionality: for a small supplier, a questionnaire |
| Ownership and return of data | The data belongs to Nimbus; format, return deadline and certificate of destruction | The exit phase from section 4 |
| Location and transfers | Countries of processing and international transfer mechanism | Data that reveals health information |
| Liability and indemnity | What the supplier answers for and up to what limit | Liability caps are usually derisory |
| Continuity and exit | Continuity plan and a transition plan to another supplier | Avoiding lock-in through dependency |
Validation note. All these clauses have legal and financial effects, and several of them interact with data protection law (the data processing agreement) and with commercial contract law. Draft or review them with legal advisers; the content of this table is a checklist of topics, not contractual wording.
One practical negotiating tip for a company of Nimbus's size: with the large cloud or SaaS providers you are not going to negotiate anything, so your job is not to draft clauses but to read theirs and decide whether the residual risk is acceptable (04-01). Where you do have real negotiating power is with the small suppliers — the consultancy, the accounting firm — which are precisely the ones that tend to have the poorest contracts. That is where you should spend your energy.
- Shared responsibility in the cloud
The most expensive misunderstanding about the cloud is believing that "the provider handles security". The provider handles the security of the cloud; you handle security in the cloud. Where the line falls depends on the service model:
| Layer | IaaS (machines, network) | PaaS (managed database) | SaaS (video calls, ticketing) |
|---|---|---|---|
| Facilities, hardware, physical network | Provider | Provider | Provider |
| Virtualisation and hypervisor | Provider | Provider | Provider |
| Operating system and patching | Nimbus | Provider | Provider |
| Database engine / runtime | Nimbus | Provider | Provider |
| Service configuration (ports, encryption, network) | Nimbus | Nimbus | Nimbus (available options) |
| Identities, permissions and MFA | Nimbus | Nimbus | Nimbus |
| Data and its classification | Nimbus | Nimbus | Nimbus |
| Backups of your data | Nimbus | Shared | Nimbus (export it yourself) |
Look at the last three rows: they are always Nimbus's, in all three models. And they are exactly the ones that failed in the incidents in 02-06: the misconfigured bucket was a customer configuration failure, not a provider one; the PostgreSQL finding on 0.0.0.0:5432 is customer network configuration; and the credential in the .env is customer identity management. The cloud provider has not failed in any of the problems Nimbus has.
The last row deserves a specific warning for SaaS: the fact that your documents live in a cloud office suite does not mean they are backed up against a deletion of your own or against ransomware that encrypts what is synchronised. The technical detail of secure cloud and container configuration belongs to 05-07; here it is enough to know where the line falls.
- Software supply chain
Dependencies are the third party with no contract. The Nimbus API declares around 40 direct dependencies, which drag in hundreds of transitive ones, and all of them run with the same privileges as Iván's code.
| Threat | How it works | Reference case |
|---|---|---|
| Vulnerable dependency | A well-known library has a critical CVE and nobody updates | Equifax (02-06) |
| Typosquatting | A malicious package with an almost identical name (reqeusts) |
Common on PyPI and npm |
| Dependency confusion | A public package bearing the name of your internal package takes priority when resolved | Publicly known technique since 2021 |
| Maintainer takeover | The publisher's account is compromised and a backdoored version is uploaded | Several cases on npm |
| CI compromise | A GitHub Actions action referenced by a movable tag changes content | SolarWinds (02-06) as the extreme form |
8.1 Pinning dependencies and CI actions
The baseline defence is to pin by hash, not by version or by tag, because a tag can be reassigned and a hash cannot.
# .github/workflows/deploy.yml (extract)
jobs:
build:
runs-on: ubuntu-24.04
permissions:
contents: read # least privilege in CI too
id-token: write # only for the ephemeral signing identity (03-07)
steps:
# BAD: the v4 tag can be reassigned to another commit at any time.
# - uses: actions/checkout@v4
# GOOD: pinned to the commit hash. The comment documents the version.
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Install dependencies with verified hashes
# --require-hashes forces EVERY dependency in the file to carry its
# hash; if any of them does not match, the install fails instead of
# carrying on.
run: pip install --require-hashes -r requirements.lock
- name: Generate the artefact SBOM
run: syft dir:. -o cyclonedx-json > sbom.json
- name: Analyse the SBOM against known vulnerabilities
# Fails the build if a high or critical severity vulnerability appears:
# the control is preventive only if it BLOCKS (04-03).
run: grype sbom:sbom.json --fail-on high8.2 SBOM: what it is and what it is really for
An SBOM (Software Bill of Materials) is the complete list of components an artefact contains, with versions and licences, in a standard format such as CycloneDX or SPDX. Its value is not philosophical, it is operational: the day a critical vulnerability is published in a library, the question is "do we use it?", and without an SBOM the answer takes days.
#!/usr/bin/env bash
# sbom-nimbus.sh - Generate, store and query the SBOM of the Nimbus API
set -euo pipefail
VERSION="$(git rev-parse --short HEAD)"
SBOM="sbom-api-${VERSION}.json"
# 1. Generate the SBOM of the container that is going to be deployed (not of the
# source code: the image also includes packages from the base system).
syft "registry.nimbus.example/api:${VERSION}" -o cyclonedx-json > "${SBOM}"
# 2. Sign the SBOM so its integrity can be verified later (03-07).
cosign sign-blob --yes --output-signature "${SBOM}.sig" "${SBOM}"
# 3. Store it alongside the artefact and keep it while the version is alive.
aws s3 cp "${SBOM}" "s3://nimbus-artefactos/sbom/" --sse aws:kms
aws s3 cp "${SBOM}.sig" "s3://nimbus-artefactos/sbom/" --sse aws:kms
# 4. THE QUERY THAT JUSTIFIES EVERYTHING ABOVE: do we use the affected component?
# Run on the day the alert comes out, across ALL deployed versions.
COMPONENT="${1:-}"
if [[ -n "${COMPONENT}" ]]; then
echo "Searching for '${COMPONENT}' in the stored SBOMs..."
aws s3 ls s3://nimbus-artefactos/sbom/ | awk '{print $4}' | while read -r f; do
aws s3 cp "s3://nimbus-artefactos/sbom/${f}" - 2>/dev/null \
| jq -r --arg c "${COMPONENT}" \
'.components[] | select(.name|test($c;"i")) | "\(.name) \(.version)"' \
| sed "s|^|${f}: |"
done
fiUsage: ./sbom-nimbus.sh generates and stores; ./sbom-nimbus.sh log4j answers in seconds the question that in 2021 had thousands of companies searching for a week.
8.3 Signature verification and update policy
Signing and verifying your own artefacts (cosign with an ephemeral identity, 03-07) attests the origin, not the absence of malice: SolarWinds distributed a perfectly signed backdoor. That is why signing is combined with review and with an explicit update policy:
| Type of update | Deadline at Nimbus | Who decides |
|---|---|---|
| Critical vulnerability under active exploitation | 48 h | Lucía, with no prior approval |
| Critical or high vulnerability | 7 days | Lucía + Iván |
| Minor security update | Automatic fortnightly cycle | Automatic, with tests |
| Major version change | Planned | Iván |
| New dependency | Before adding it: check maintenance, licence, number of maintainers and downloads | Iván, reviewed in the pull request |
The last row is the cheapest and the most forgotten: the best moment to reject a dependency is before you add it. A library with a single maintainer, no releases in two years and 300 weekly downloads is a supply chain risk you avoid with a two-minute conversation in code review.
- Continuous supervision and the incident that is not yours
Due diligence is done once; the risk lasts for the whole contract. Nimbus's minimum viable supervision:
- Quarterly: review of active third-party access (C-22) and of current exceptions.
- Monthly: review of the SLA KPIs and of the out-of-window access alerts.
- Continuous: subscription to the status and security notices of the critical suppliers, and monitoring of public mentions of breaches.
- Annual: re-questionnaire of the enhanced-level suppliers and update of the third-party register.
When the incident is the supplier's, the sequence matters, because the temptation to wait for information is enormous:
flowchart TB
A["1. RECEIPT\nSupplier notice, public news\nor an alert of our own.\nOpen the incident log (04-05)"]
A --> B["2. ASSESS EXPOSURE\nWhat data of ours they held,\nwhat access, since when"]
B --> C["3. CONTAIN WHAT IS OURS\nRevoke their access, rotate API\nkeys we gave them, review\nour own logs"]
C --> D["4. DEMAND INFORMATION\nIn writing and to a deadline:\nscope, dates, data affected"]
D --> E{"Does it affect our\ncustomers data?"}
E -->|"Yes"| F["5a. Assess notification\nand communicate to customers (04-05).\nConsult compliance"]
E -->|"No or undetermined"| G["5b. Document the assessment\nand the reason for the decision"]
F --> H["6. DECIDE ON THE RELATIONSHIP\nContinue with conditions,\nreduce scope or replace"]
G --> H
The two classic mistakes in this flow are waiting for the supplier to confirm before revoking their access — step 3 depends on nobody else and is free — and assuming that if the supplier does not notify, nothing has happened, which is literally what went on for 45 days in 02-06.
Validation note. If a supplier's incident may affect your customers' personal data, notification deadlines and obligations apply that do not depend on the supplier's goodwill. Consult your compliance lead or legal advisers from the very first moment; the detail is covered in 04-05 and 06-03.
- The third-party register as an artefact
# nimbus-third-party-register.yaml - v2 - 2026-03-10 - Owner: Marta (CTO)
- id: T-01
name: "Systems consultancy (A-19)"
service: "Infrastructure support and out-of-hours on-call"
criticality: Critical
due_diligence_level: Enhanced
data_accessed: "Potentially all production data"
access_granted: "Administrative just-in-time, 8 h, named accounts, MFA"
risks: [R-01]
controls: [C-03, C-09, C-22]
contract:
incident_notification_h: 24
right_to_audit: "Annual questionnaire + evidence"
subprocessors_declared: false
return_and_deletion: "15 days + certificate"
contract_review: 2027-01-31
last_assessment: 2026-03-01
next_assessment: 2027-03-01
exit_plan: "Alternative retainer identified; our own runbooks (C-17)"
status: Active
- id: T-05
name: "Ticketing and support tool (SaaS)"
service: "Support tickets from clinics"
criticality: Medium
due_diligence_level: Standard
data_accessed: >
User contact details and SCREENSHOTS that customers attach and that may
contain patient data. Historically an underrated risk.
access_granted: "None to production. Corporate SSO"
risks: [R-04]
controls: ["Notice on the form: do not attach patient data",
"Attachment retention: 90 days"]
contract:
incident_notification_h: 72
subprocessors_declared: true
data_location: "EU"
contract_review: 2026-11-30
last_assessment: 2026-02-15
next_assessment: 2027-02-15
exit_plan: "Automatic monthly export of tickets"
status: Active
- id: T-09
name: "Web analytics provider (offboarded)"
criticality: Low
status: "Offboarded 2026-01-20"
exit:
access_revoked: 2026-01-20
api_keys_rotated: 2026-01-20
data_retrieved: 2026-01-18
certificate_of_destruction: "Pending" # <- open task, not closed without thisNotice T-09: an offboarding is not complete until the certificate of destruction arrives, and leaving that field visible as "Pending" is what stops the exit being signed off too early.
Common Mistakes and Tips
- Having no third-party inventory. You cannot review what you have not listed, and there are always more than you think. Tip: start from Sara's list of recurring expenses; that is where all the SaaS nobody declared is hiding.
- Trusting the badge and not reading the scope. "We have ISO 27001" says nothing if the scope does not include the service you are buying. Tip: always ask for the certificate with its scope statement and the date.
- Contracts that only talk about price and availability. That is the consultancy's contract in 02-06. Tip: the incident notification clause with a deadline in hours is the one that delivers the most value per line written.
- Due diligence only at signing. The supplier changes, you change and their sub-processors change. Tip: set the annual review in the register and treat it as a control with an owner.
- Forgetting the exit. Orphan access and your data in the systems of a company you no longer speak to. Tip: an offboarding is not closed without a certificate of destruction.
- Asking a small supplier for the same as a large one. You get a made-up answer and a false sense of control. Tip: make the questionnaire proportionate to the risk and spend your negotiating energy where you can actually negotiate.
- Assuming that the cloud includes backups. Neither the SaaS office suite nor the bucket is backed up against a deletion of your own. Tip: go through the shared responsibility table service by service.
- Pinning dependencies by tag. A movable tag is equivalent to running whatever the maintainer decides tomorrow. Tip: pin by hash and use
--require-hashes.
Exercises
Exercise 1 — Classify the due diligence level
For each of these four Nimbus third parties, decide the due diligence level (light, standard or enhanced), state the three most important questions in the questionnaire for that specific case and the contractual clause that cannot be missing:
- A SaaS electronic signature tool that Sara wants to use for employment contracts.
- A machine translation service that Rubén wants to integrate into support, sending it the text of the tickets.
- The cleaning company for the Valencia office.
- A new observability provider to which the API logs would be sent in real time.
Exercise 2 — Audit a supplier relationship
This is the real register entry for one of Nimbus's third parties. Identify every problem and put the corrections in order:
- id: T-07
name: "External development agency (mobile app)"
criticality: High
due_diligence_level: "(not assessed)"
access_granted: "'agency' account in the repository with admin permissions;
read access to the PRE-PRODUCTION database"
data_accessed: "Pre-production data (A-22, classification 'to be reviewed')"
contract:
incident_notification_h: null
subprocessors_declared: false
return_and_deletion: null
last_assessment: null
status: "Active since 2024-05; project finished in 2025-11"Exercise 3 — Respond to a supplier's breach
On a Monday morning, Marta reads in a trade publication that Nimbus's transactional e-mail provider (A-11) has suffered an intrusion: the attackers accessed the sending metadata of some of its customers over three weeks. The provider has not told Nimbus anything yet.
- What Nimbus data could be affected, and why is it sensitive even though it is "only" metadata?
- List the actions for the first four hours, in order, indicating which of them do not depend on the provider.
- What would you demand from the provider in writing, and to what deadline?
- What should change in the contract and in the third-party register after the incident?
Solutions
Exercise 1
| Third party | Level | Three key questions | Essential clause |
|---|---|---|---|
| 1. Electronic signature | Enhanced. It processes employee data (A-16): DNI (the Spanish national ID number), address, salary | Where are the signed documents stored and for how long? Which sub-processors are involved? What legal validity and what evidence retention mechanism does it offer? | Return and certified destruction on termination, with retention of the signature evidence |
| 2. Machine translation | Enhanced, even though it looks minor: the tickets contain patient data and the text leaves Nimbus's infrastructure | Do you use our data to train your models? Where is it processed and retained? Can logging of the submitted content be switched off? | An express prohibition on using the data for training and no retention of the content |
| 3. Cleaning company | Light, with a physical nuance | Is your staff identified and background-checked? Do they have access outside working hours and unsupervised? How do you notify a change of staff? | Confidentiality and notification of changes of staff with access |
| 4. Observability | Enhanced. It is the most dangerous of the four | What retention do the logs have and which of your staff can query them? Do you encrypt at rest and with which keys? How do you notify incidents and within what deadline? | Incident notification within 24 h + data location in the EU |
The point of the exercise is number 4. Sending the API logs to a third party in real time means that third party receives a continuous copy of what happens in production, and if the team has not sanitised the content of its logs, that can carry patient identifiers, e-mail addresses, tokens or fragments of clinical data. An observability provider is, in practice, a supplier with access to production data, and it has to be assessed as such. And number 2 teaches the opposite trap: a "small", cheap service can be the one that takes the most sensitive data out of your perimeter.
Exercise 2
Problems, from most to least serious:
- The project finished in November 2025 and the agency still has administrator access to the repository. It is phase 5 of the life cycle never executed: privileged orphan access four months old. It is exactly the pattern of the 02-06 vector.
- A shared account ("agency") instead of named accounts: you cannot tell who did what, or whether that person still works there.
- Administrator permissions on the repository when the work required, at most, write access to a branch. Least privilege breached.
- No incident notification clause and no return or deletion: if the agency suffers a breach, Nimbus will not find out, and its code is still on the agency's machines.
- Never assessed (
last_assessment: null) despite being classified as High criticality. - Access to pre-production with a "to be reviewed" classification: nobody knows whether the agency has been reading real patient data for 18 months, and that doubt is itself a notifiable finding if it is confirmed.
Order of correction: (a) today, revoke the agency account, rotate any key or token that was handed over, and review the repository and pre-production database logs to establish whether there was activity after November. (b) This week, determine whether A-22 contains real data — finally closing the "to be reviewed" box in the 01-04 inventory — and, if it does, assess the scope with the compliance lead. (c) This month, complete the formal exit: request in writing the deletion of the code and the data with a certificate, and record the offboarding in the register. (d) Before the next project, build in the prior assessment, named accounts, minimal permissions and the notification and exit clauses.
Exercise 3
(1) The sending metadata of a transactional e-mail provider includes recipient, sender, subject, date and delivery status. In Nimbus's case that is: the patient's e-mail address, the timestamp and, very probably, a subject line such as "Reminder of your Thursday appointment at Fisioterapia Levante". Even with no clinical data inside the message, the combination of recipient and clinic reveals that this person is a patient of a specific healthcare centre, which is precisely the kind of data the impact scale in 04-01 scores at 5. "Only metadata" is, in this context, a dangerous euphemism. On top of that, the API key Nimbus handed them may be affected.
(2) The first four hours, in order. The first four do not depend on the provider: (a) open the incident log and record the time and the source of the news (04-05); (b) rotate the API key Nimbus holds with that provider, which is an action of your own, immediate and free; (c) review your own logs of that key's use in case there were sends not originated by Nimbus; (d) determine exactly what information is sent to that provider — which fields, with what subject lines, with what retention — so you can bound the exposure without waiting for anyone; (e) contact the provider in writing demanding confirmation of whether Nimbus is among those affected; (f) inform Marta and activate the response team; (g) prepare, without sending it yet, a draft communication to customers.
(3) In writing and to a 24-hour deadline: whether Nimbus is among the affected customers; the exact time window of the access; which categories of data were compromised and whether they include content as well as metadata; whether there is evidence of exfiltration or only of access; what measures they have taken; and whether they have notified the supervisory authority. And one additional request almost nobody makes: the list of Nimbus's sends falling within that window, which is what would allow precise notification instead of assuming the worst case, which was exactly Nimbus's problem in 02-06.
(4) In the contract: an explicit notification deadline in hours (if there was none, or it was 72 h, bring it down to 24), an obligation to provide the detail of the affected sends, and an updated declaration of sub-processors. In the third-party register: raise the criticality if it was underrated, bring the next assessment forward, and add the incident to the supplier's history — a fact that will weigh at the next renewal. And in the 04-01 risk register: this incident is a reassessment trigger, and a specific risk should appear covering the exposure of appointment metadata through third parties, with its own treatment. One technical improvement that scores well here: reduce the data sent to the provider to an opaque identifier and a generic subject line, applying minimisation.
Conclusion
You have learned to manage the part of the perimeter you do not control. You start from the fundamental asymmetry: execution, cost and technical knowledge can be outsourced, but responsibility never can, neither towards the customer nor towards the authority, and nor can A-20's reputation — with the legal distinction between controller and processor sketched here and developed in 06-03. You have Nimbus's third-party map with its nine categories, and its three readings: the third-party surface is bigger than your own, the ticketing tool is the supplier everybody classifies wrongly because customers attach screenshots with patient data, and open source dependencies are the only third party with no contract, no point of contact and no SLA whose code runs with full privileges.
You have gone back to the consultancy in the 02-06 incident and taken its vector apart: five simultaneous conditions — permanent access, a shared account, no MFA, no logging or alerting, no notification clause — none of them technical and all of them of essentially nil cost. With the most uncomfortable detail of all: even if Nimbus had had MFA, it would still have gone 45 days without knowing its supplier was compromised, because the notification clause is the only mechanism by which information reaches you from the perimeter you do not control.
You know the supplier life cycle and in particular its phase 5, the exit, which almost nobody executes: revoke all accounts and API keys, remove IP addresses and certificates, retrieve the data before closing the account, require a certificate of destruction and record the offboarding. You know how to carry out proportionate due diligence with three levels and a full questionnaire for the enhanced level, and you know how to read a SOC 2 report: Type II and not Type I, scope above badge, go straight to the exceptions and do not ignore the complementary user entity controls. You have the list of contractual clauses with its legal validation note and the realistic negotiating advice: with the big players you do not negotiate, so read and decide; with the small ones you do, and they are the ones with the worst contracts.
You have the shared responsibility model, with the decisive observation that configuration, identities and data are always yours in IaaS, PaaS and SaaS — and that, consequently, the cloud provider has not failed in any of the problems Nimbus has. And you can handle the software supply chain: direct and transitive dependencies, typosquatting, dependency confusion, maintainer takeover and CI compromise; pinning actions and dependencies by hash rather than by movable tags; the signed SBOM, whose value is answering "do we use that component?" in seconds; artefact signing that attests origin and not the absence of malice, with SolarWinds as the reminder; and an update policy with deadlines, whose cheapest line is the last one: the best moment to reject a dependency is before you add it. The lesson closes with continuous supervision, the response flow when the incident is the supplier's — where revoking access and rotating keys depends on nobody and comes first — and the third-party register, in which an offboarding is not closed until the certificate of destruction arrives.
And notice what has happened twice in this lesson. Analysing the consultancy's breach and responding to the e-mail provider's, you have needed something you do not yet have: an incident log, a team with roles, a decision on who is told and within what deadline, and a sequence agreed in advance. In 02-06, at 09:00 on day 20, Marta called the team together and nobody knew what to do first. That gap is not filled by the best risk register or the best control catalogue.
In the next lesson, Incident Response Plan (04-05), you will write the plan before the incident, because at three in the morning nobody improvises well: the NIST SP 800-61 phases, Nimbus's response team with deputies and out-of-band contacts, the severity matrix, preserving evidence before touching anything, the real trade-offs of containment, the customer communication templates, the incident log, one runbook written out in full and the blameless post-mortem applied to the incident in 02-06.
Fundamentals of Information Security Course
Module 1: Introduction to Information Security
- Basic Concepts of Information Security
- Types of Threats and Vulnerabilities
- Principles of Information Security
- Assets, Attack Surface and Threat Actors
Module 2: Cybersecurity
- Definition and Scope of Cybersecurity
- Types of Cyber Attacks
- Social Engineering and Phishing
- Protection Measures in Cybersecurity
- Identity, Authentication and Access Control
- Cybersecurity Incident Case Studies
Module 3: Cryptography
- Introduction to Cryptography
- Symmetric Cryptography
- Asymmetric Cryptography
- Hash Functions, HMAC and Password Storage
- Cryptographic Protocols
- Key Management, Certificates and PKI
- Applications of Cryptography
Module 4: Risk Management and Protection Measures
- Risk Assessment
- Security Policies
- Security Controls
- Third-Party and Supply Chain Risk
- Incident Response Plan
- Disaster Recovery and Business Continuity
Module 5: Security Tools and Techniques
- Vulnerability Analysis Tools
- Monitoring and Detection Techniques
- Penetration Testing
- Network Security
- Application Security
- System Hardening and Endpoint Security
- Cloud and Container Security
Module 6: Best Practices and Regulations
- Best Practices in Information Security
- Security Regulations and Standards
- Personal Data Protection and GDPR in Practice
- Compliance and Auditing
- Training and Awareness
- Ethics, Legal Aspects and Responsible Disclosure
