2025-11-26

Year-End Security Debt Review: A Practical Checklist

Year-end is when calendars thin, change freezes loom, and security debt becomes visible—if you look. A practical security debt review is not a full audit theater. It is a focused inventory of assets, identities, certificates, remote access, and unfinished remediations that are most likely to become January incidents.

This checklist is designed for security and platform leads who have two to four focused days before the holiday slowdown. Use it to produce a short, dated backlog with owners—not a hundred-page report nobody reads.

Set scope and success criteria first

Pick the environments that matter: production clouds, corporate identity, VPN or ZTNA, email, and the top revenue applications. Define success as: (1) a written inventory of critical assets and owners, (2) expired or near-expiry certificates and secrets flagged, (3) admin and remote-access accounts reconciled, (4) top ten security tickets ranked with owners and dates, and (5) a January drill or patch window booked.

Time-box discovery. Perfect CMDB hygiene is a multi-quarter program; year-end debt review is triage.

Inventory assets that can actually hurt you

Start from exposure, not from spreadsheets. Pull:

  • Public cloud resources with public IPs, load balancers, and storage buckets.
  • Internet-facing applications from DNS zones and certificate transparency where useful.
  • Kubernetes ingresses and API server exposure.
  • SaaS admin consoles (identity, email, code hosts, finance).
  • Shadow IT reported by expense or SSO login anomalies.

For each critical asset, record owner, data sensitivity, last vulnerability scan or penetration test, and backup tier. Missing owners are debt: orphans become unpatched orphans.

Certificates and secrets: the quiet outage factory

Expired certificates cause outages; forgotten certificates cause emergencies during incidents. Export inventories from load balancers, ingress controllers, ACME accounts, and appliance UIs. Flag anything expiring within ninety days. Confirm auto-renewal is healthy—not merely configured—by checking recent renewal events.

Rotate through secrets managers and CI variables: orphaned cloud keys, old webhook secrets, service account keys in repos, and shared passwords in password vaults without owners. Disable what you cannot attribute. Document break-glass accounts separately with dual control.

Admin accounts and privileged access

Reconcile privileged roles across Active Directory / Entra ID, cloud IAM, Kubernetes cluster-admin bindings, database superusers, and SaaS admin roles. Questions to answer in writing:

  • Which humans have standing global admin or owner rights?
  • Which service principals have keys older than ninety days?
  • Which shared mailboxes or groups grant admin to applications?
  • Are former employees or contractors still in privileged groups?
  • Is MFA enforced and phishing-resistant for admins?

Remove standing privilege where just-in-time access exists. Where it does not, schedule the project and reduce the number of permanent admins immediately.

Unused VPN and remote access users

Remote access debt is a perennial incident precursor. Export VPN, VDI, and ZTNA user lists. Compare against HRIS active employees and contractor end dates. Disable accounts with no login in ninety days after confirming they are not seasonal break-glass paths. Review device posture exceptions that have lived “temporary” for a year.

Check split-tunnel policies and full-tunnel coverage for admin networks. Confirm that remote admin to backup, identity, and OT/ICS jump hosts requires stronger controls than general staff VPN.

Patch and vulnerability debt

Do not try to close every CVE before New Year’s. Rank by internet exposure, exploitability, and asset criticality. Fix or mitigate anything that is internet-facing with known exploitation guidance. For the rest, assign owners and January dates. Record accepted risk with expiry—not eternal waivers.

Include appliance firmware, hypervisor hosts, container base images, and “non-Windows” stragglers that miss the monthly patch cycle. Printers, cameras, and building controllers with default credentials belong on the same list when they sit on routable networks.

Logging, alerting, and detection gaps

Verify that critical sources still flow: identity sign-in logs, EDR, firewall, cloud audit, email security, and backup consoles. Look for silent agents, full disks on collectors, and license expiry on SaaS security tools. Test one alert end-to-end—from event to page—so you know on-call routing still works after organizational changes.

Review detections that were disabled “temporarily” during incidents. Re-enable or replace them. Detection debt is security debt.

Third parties and integrations

List OAuth apps, API keys issued to vendors, and marketplace integrations with broad mail or drive scopes. Revoke unused apps. Confirm contracts for critical vendors include breach notification and security contact paths you can actually reach in December.

The year-end checklist (printable)

  • Critical asset list with owners updated.
  • Certificates expiring in 90 days inventoried; renewals verified.
  • Privileged accounts reconciled to humans and services; leavers removed.
  • VPN/ZTNA unused accounts disabled; posture exceptions reviewed.
  • Top internet-facing vulns mitigated or scheduled.
  • Backup immutability and last restore drill date recorded.
  • EDR/identity/cloud audit logging validated with a test alert.
  • OAuth and vendor keys pruned.
  • Incident contacts, runbooks, and war-room bridges confirmed current.
  • January hardening tickets filed with owners and due dates.

How to communicate results without panic

Send leadership a one-page summary: what you checked, top five risks, what you fixed this week, what is scheduled for January, and what requires budget. Avoid dumping raw scanner output. Pair each risk with a business impact sentence (“customer login outage,” “ransomware recovery failure,” “regulatory notification”).

Share the detailed backlog with engineering managers before the holiday freeze so nobody is surprised by emergency changes—or by the lack of them.

Backup and recovery debt belongs on the same list

Security debt reviews that ignore recovery are incomplete. Confirm immutable or offline copies exist for Tier 0 and Tier 1 systems, note the date of the last successful restore drill, and verify that backup console admins use MFA. If the last restore test is older than six months, schedule one in January before major feature freezes end. Ransomware readiness is part of year-end hygiene, not a separate program you will “get to later.”

Check that disaster-recovery runbooks still list reachable people and current bridge numbers. Organizations change in November; documents often do not.

Email and identity paths attackers actually use

Review inbound email security policies, VIP impersonation protections, and auto-forwarding rules that ship mail externally. Disable legacy authentication where it remains. Confirm that password reset and MFA enrollment helpdesk flows have strong verification—holiday social engineering against helpdesks is a seasonal classic. Inventory app passwords and legacy tokens still allowed for mail clients.

For identity providers, review conditional access or equivalent policies for gaps: unnamed locations, persistent browser sessions on shared devices, and exclusions granted to executives without expiry. Executive exclusions are high-value targets; treat them as temporary with review dates.

Cloud cost and security leftovers

Idle public resources are both cost and risk. Find unattached public IPs, forgotten load balancers, old staging clusters with production-like data, and snapshot sprawl. Tear down or isolate what nobody owns. Review IAM access analyzer findings or equivalent for unused roles with admin privileges. Year-end cleanup that finance already wants for cost reasons is an easy alliance for security.

Tabletop in ninety minutes

If you have one spare hour, run a short tabletop: ransomware on a file share, lost laptop with VPN credentials, or expired certificate on the customer portal during a marketing campaign. Capture who would be called, which systems are in scope, and where the documentation fails. File tickets immediately. A lightweight exercise beats postponing a full-day workshop that never gets scheduled.

Working with auditors and insurers

Keep artifacts: dated inventories, screenshots of MFA enforcement, ticket IDs for remediations, and restore drill notes. Insurers and external auditors increasingly ask for evidence rather than policy statements. Your year-end review packet can become next year’s questionnaire answers with minimal rework if you store it in a known location with clear dates.

Prioritization matrix for the final week

When time runs out, prioritize in this order: (1) disable unused privileged and remote access, (2) fix or mitigate actively exploited internet-facing issues, (3) renew certificates inside thirty days, (4) restore detection pipelines that are dark, (5) document everything else for January. Resist the urge to rewrite the entire security program in December. Momentum into Q1 matters more than incomplete heroics.

Assign a single DRI for the review so findings do not scatter across inboxes. The DRI does not fix everything; they ensure each item has an owner and a date.

Detailed walkthrough: certificates in ninety minutes

Export certificates from your primary load balancers and ingress controllers to a spreadsheet with hostname, not-after date, issuer, and owning team. Sort by expiry. For each certificate inside thirty days, confirm the renewal path: ACME automation, vendor portal, or manual CSR. Trigger a staging renewal if auto-renew has not succeeded in the last sixty days. Add synthetic checks that alert thirty days before expiry on public hostnames—do not rely on humans reading spreadsheets in February.

Do not forget client certificates used for mTLS between services, code-signing certificates, and Wi-Fi/EAP certificates. They fail more quietly than public HTTPS and strand whole fleets when ignored.

Detailed walkthrough: admin account scrub

Produce four lists in one sitting: cloud owner/admin users, directory Domain Admins / Global Administrators equivalents, Kubernetes cluster-admin bindings, and SaaS super-admins for email and code hosting. Join against HR termination dates and contractor end dates from the last twelve months. Disable orphans the same day when policy allows; otherwise open tickets with twenty-four hour SLAs. Require phishing-resistant MFA on every remaining account before the holiday break if any still use weaker factors.

Service accounts deserve equal attention. Keys created for a one-off migration and left in CI forever are a common breach path. Rotate or replace with workload identity where platforms support it.

Make the January backlog stick

Convert findings into tickets with acceptance criteria, not vague “harden VPN” epics. Example: “Disable 37 VPN accounts with no login since August; export before/after counts; update joiners-movers-leavers runbook.” Attach evidence links. Book a thirty-minute February review to close or re-date anything still open. Without that follow-up, year-end reviews become annual theater.

Finally, capture a dated “security debt snapshot” PDF or markdown file in a shared drive that includes the checklist results, top ten tickets, and the January follow-up meeting invite. Future you—and future auditors—will thank present you for the artifact more than for heroic Slack threads that scrolled away.

Closing

Year-end security debt review is hygiene with a deadline. Inventory what you expose, who can administer it, which certificates and remote accounts linger, and which detections are dark. Fix what you can in days; schedule the rest with owners. January is kinder to teams that did this work in November than to teams that discover expired certificates and ghost VPN users during the first incident of the year.