Supplier security breach: how to assess your risk and respond
For customers who have been told a vendor or supplier had a security incident and need to know what to do next. This runbook helps you quickly decide whether your own systems, data, logins, or integrations are affected, and gives you concrete checks and fixes to contain risk.
TL;DR — If a supplier reports a security breach, the biggest question is whether they had access to your data, your credentials, or a live connection into your systems. Start by listing exactly what that supplier could reach, then rotate any shared secrets first (API keys, passwords, SFTP keys, OAuth tokens), review recent activity from that integration, and temporarily disable the connection if you cannot confirm it is safe. Reading time: ~6 min
The scenario
It is Tuesday afternoon and an account manager forwards you an email from a supplier: they had a "security incident" and are still investigating. The message is vague. It says they will "share more when available," but your team needs to answer practical questions now: did they have our customer data, can they log into our systems, and do we need to tell anyone? You open your admin dashboards, but the hard part is not a red error on screen — it is figuring out what that supplier could actually touch before an attacker does anything with it.
Symptoms
- You receive an email from a supplier saying they had a "security breach," "security incident," "unauthorized access," or "data exposure."
- Your team asks questions like: "Did they have our production database?" "Do they have an API key?" "Can they still log in?"
- In your app or cloud logs, you may see recent activity from the supplier's integration account, IP addresses, or API token.
- Typical log lines may include messages like:
Successful login for user supplier-integration API key used: sk_live_xxxxx SFTP login accepted for vendor_sync OAuth token refresh succeeded for client_id abc123 - If the supplier was used for email, file transfer, analytics, support, or payments, you may see exports, sync jobs, webhooks, or scheduled tasks still running.
- Your users usually do not see a visible error yet. This is often a risk-assessment incident first, not an outage first.
Likely causes
| Cause | How common | Quick check |
|---|---|---|
| Supplier had a live credential into your systems (API key, password, SSH/SFTP key, OAuth token) | Very common | In your app/provider dashboard, open the integration or user account used by that supplier and check whether credentials are active |
| Supplier stored or processed your data, so their breach may expose copies of it | Very common | Open your contract/integration notes or the supplier setup page and identify what data fields are sent to them |
| Supplier had admin or support access to your environment | Common | In your identity provider dashboard (e.g. Google Workspace/Azure AD/Okta), search for the supplier's user accounts or support accounts |
| Supplier could receive inbound data from you via webhook, email, or file transfer | Common | Check your scheduled exports/webhook destinations in the relevant dashboard |
| The breach notice is precautionary only and there is no access path to your systems or data | Less common than hoped | List the supplier's access and confirm it is "none" across data, credentials, and admin access |
Step-by-step diagnosis
-
Write down what the supplier actually touches
- Use your internal docs, password manager, and app settings pages. Look for names like the supplier's company name, integration name, service account, webhook URL, SFTP host, or API client.
- Check places such as your provider's dashboard for integrations, your password manager shared vault, and your identity provider's user/app list.
- This is your problem if you find any of these: active API keys, a named integration user, an SFTP account, a webhook endpoint, an OAuth app, or a support/admin account.
- Jump to the matching fix section below.
-
Check whether they have active credentials right now
- Dashboard first: in the relevant system, open the integration or user and look for status, last used time, token list, API keys, or SSH keys.
- CLI if you manage secrets in code:
grep -RniE 'supplier|vendor|api[_-]?key|webhook|sftp|oauth' . - This is your problem if you find a secret still active or recently used.
- Jump to Fixes → Supplier had a live credential into your systems.
-
Check whether they hold copies of your data
- Open the integration settings, export jobs, or field mapping page in your app or provider dashboard. If UI names vary, look for "Mappings," "Sync," "Export," "Destinations," or "Data sharing."
- If you send files, check your scheduled jobs or automation tool for CSV, JSON, or XML exports.
- This is your problem if you can see customer records, orders, tickets, invoices, or personal data (personal data = information that identifies a person) being sent to them.
- Jump to Fixes → Supplier stored or processed your data.
-
Check for admin or support access
- In your identity provider's dashboard (e.g. Google Admin, Microsoft Entra, Okta), search Users and Applications for the supplier name or domain.
- Look for roles such as Admin, Support, Helpdesk, Developer, Billing, or Owner.
- This is your problem if any supplier user can still sign in or has elevated permissions.
- Jump to Fixes → Supplier had admin or support access.
-
Check for inbound paths still running
- Review webhook destinations, mail forwarding rules, SFTP jobs, and scheduled exports in the dashboard where they were configured.
- Example app-side check for webhooks in code:
grep -RniE 'webhook|callback|supplier|vendor' . - This is your problem if your systems are still sending data to the supplier or accepting files from them.
- Jump to Fixes → Supplier could receive inbound data from you.
-
Review recent activity before and after the notice
- In your app, cloud, or auth logs, filter by the supplier account, API key name, client ID, or source IP if known.
- Useful command if you have exported logs locally:
grep -iE 'supplier|vendor_sync|client_id|api key used|successful login|sftp' app.log - This is your problem if you see unusual timing, volume spikes, logins outside normal hours, or actions the supplier does not usually perform.
- If suspicious, apply the relevant fix immediately and preserve logs for your incident record.
View as text
[Supplier breach notice]
|
v
[List supplier access]
|
v
[Active creds?] ---- yes ----> [Rotate/revoke now]
|
no
v
[Data shared?] ---- yes ----> [Assess exposure + pause sync]
|
no
v
[Admin access?] ---- yes ----> [Disable account + review logs]
|
no
v
[No path found] ----> [Document and monitor]Fixes
Supplier had a live credential into your systems
⚠️ Rotating or revoking credentials can break live integrations, scheduled jobs, file transfers, and customer-facing features. If the supplier is business-critical, warn stakeholders before you cut access.
- Revoke or disable the credential in the dashboard where it was created.
- API key: open your app/provider dashboard's API or Developers section and click Revoke, Delete, or Disable on the key used by the supplier.
- User account: open Users and click Suspend or Disable sign-in.
- OAuth app: open your identity provider's Applications page and revoke tokens or disable the app.
- Rotate the secret anywhere it is stored.
- If kept in environment variables:
grep -Rni 'OLD_SECRET_NAME' . - Replace it in your hosting control panel or secret manager, then redeploy.
- If kept in environment variables:
- If the supplier still needs access later, create a new least-privilege credential (least privilege = only the minimum permissions needed), not a re-enabled old one.
Verify it worked:
# Example check in your logs after revocation: no new successful use by that key/user
grep -iE 'supplier|vendor_sync|api key used|successful login' app.log
You should stop seeing new successful activity from that credential.
Supplier stored or processed your data
- Pause the sync or export in the dashboard where it is configured.
- Look for Integrations, Exports, Sync jobs, or Automation and switch the job to Off or Paused.
- Record exactly what data was shared: fields, date range, and whether it included personal data, credentials, or payment data.
- Ask the supplier for their incident details in writing: what data was affected, dates, whether data was encrypted (encrypted = unreadable without the key), and whether your tenant/account was confirmed impacted.
- Start your own incident record with the answers and timestamps.
Verify it worked:
The next scheduled sync/export does not run, and no new files/webhooks are sent to the supplier destination.
Supplier had admin or support access
⚠️ Disabling an admin account can interrupt support work or deployment workflows. Check whether anyone internally depends on that account first.
- In your identity provider dashboard, disable the supplier user or remove their role assignments.
- Remove any standing admin roles from cloud accounts, app dashboards, VPNs, and support tools.
- Force sign-out or revoke sessions if your provider offers that action.
- Review audit logs for that account covering at least the last 30 days, or from the earliest possible incident date in the supplier notice.
If you manage Linux access and know the account name, you can also remove SSH keys:
sudo grep -Rni 'supplier' /home/*/.ssh/authorized_keys /root/.ssh/authorized_keys
Then remove the matching key line.
Verify it worked:
The supplier account shows Disabled/Suspended, has no admin roles, and no new sign-ins appear in audit logs.
Supplier could receive inbound data from you via webhook, email, or file transfer
- Disable outbound webhooks, scheduled exports, mail forwards, or SFTP jobs that send data to the supplier.
- If the supplier sends files into your environment, disable or quarantine that inbound path until you trust it again.
- For webhook configs stored in code, remove or comment out the destination and redeploy.
{ "supplierWebhookEnabled": false } - For cron-based exports on a server you manage:
Comment out the matching export job.
crontab -l
Verify it worked:
# No further outbound calls or file transfers to the supplier host should appear
grep -iE 'supplier.example.com|sftp.vendor|webhook' app.log
The breach notice is precautionary only and there is no access path to your systems or data
- Document the result: no credentials, no data sharing, no admin access, no active integration.
- Keep the supplier notice and your checks in your incident tracker or ticket system.
- Add temporary monitoring for unusual auth or export activity for the next 7-14 days.
Verify it worked:
Your incident note clearly lists the checks performed and shows no access path from the supplier to your systems or data.
Prevention
- Keep a supplier access register with one row per vendor: system, data shared, credential type, owner, and last review date.
supplier,system,data_shared,credential_type,owner,last_review Acme Sync,CRM,"name,email,order_id",API key,ops@example.com,2026-10-01 - Use separate credentials per supplier so you can revoke one without breaking others. In your secret manager or hosting dashboard, create names like:
SUPPLIER_ACME_API_KEY SUPPLIER_ACME_SFTP_PASSWORD - Add audit alerts for integration accounts. In your log tool or cloud monitor, alert on new login locations, after-hours use, or export spikes for service accounts.
Alert: user = supplier-* AND event IN (login, export, api_call) outside 06:00-20:00 local time - Review supplier access quarterly. In your identity provider and app dashboards, remove unused accounts, old OAuth apps, and stale API keys.
Use the results as a checklist against your register.
grep -RniE 'supplier|vendor' . - Prefer least-privilege integrations. If a supplier only needs order status, give read-only API access to that scope, not full admin or database access.
{ "scopes": ["orders.read"] } - Put a supplier-breach checklist in your incident process so the first response is repeatable: list access, revoke shared secrets, pause data flows, review logs, and document impact.
1. Identify access 2. Revoke/rotate secrets 3. Pause syncs/exports 4. Review logs 5. Record impact and decisions
This article was written by an AI system and published pending human review. Verify anything you intend to act on.
Have a project in mind?
Get an instant AI price estimate for it, or talk directly to our team.
One email a month on what we learn building with AI