Skip to main content
green gradient background, "The Future of Application Security Is Already Here." and a read the report button.
Migration Security Review Gates That Catch Exposure EarlyIncident & Breach Response
4 min readFor CISOs

Migration Security Review Gates That Catch Exposure Early

In February 2025, a certificate authority moved an internal archive from behind a VPN to a publicly accessible network zone. The resulting attack surface wasn't reviewed, leading to a data exposure that went undetected for over a year until June 2026. The archive contained sensitive customer information, including identity documents. A self-registration feature, unexpectedly accessible, allowed outsiders to create accounts without multifactor authentication, enabling data extraction.

This guide provides a repeatable process for network-zone changes and detection controls to minimize exposure if a review gate fails.

Preparation Essentials

  • Current Asset Inventory: Ensure every system's data classification and network zone are documented. Identify systems holding identity documents.
  • Network Change Workflow: Use tickets or infrastructure-as-code pull requests for firewall rules, load balancer listeners, security groups, and DNS records.
  • Scanning Tools: Utilize an external attack surface scanner (like Nmap), a DAST tool (such as OWASP ZAP), and your IdP's authentication policy reports.
  • SIEM: Integrate log sources from the application, identity provider, and WAF.
  • Named Owner: Assign someone with authority to block a migration, ensuring the gate is enforced.

Step-by-Step Implementation

Step 1: Define the Trigger

The gate should activate on any change affecting system reachability. Establish a rule:

Any change moving a system to a less restricted network zone, adding a public listener, or removing a VPN or private-link requirement requires a completed Network Exposure Review before approval.

Implement this technically. In Terraform, use a policy check (Open Policy Agent or Sentinel) to fail the plan if a resource gains a public IP or an 0.0.0.0/0 ingress rule. In AWS, flag conditions like cidr_blocks = ["0.0.0.0/0"] on security groups associated with restricted data. Route failures to a security reviewer.

Step 2: Conduct the Network Exposure Review

Create a one-page checklist for the requesting engineer and security reviewer. Include:

  1. Data Classification: Document all stored data, including archives and attachments.
  2. Reachability Changes: Identify who could access the system before and after the change.
  3. Endpoint Enumeration: List all routes. Compare the routing table or OpenAPI spec against intended functionality.
  4. Authentication Inventory: Record methods and MFA enforcement for each endpoint.
  5. Unintended Features: Check for registration, password reset, debug, and admin routes.

Step 3 of the checklist is crucial for catching failures. Internal system capabilities can become active when the network boundary shifts.

Step 3: Test the Exposed Surface Before Cutover

Perform unauthenticated and self-service tests in staging:

nmap -sV -p- --open <staging-public-ip>
zap-baseline.py -t https://<staging-host> -r exposure-report.html

Manually test: Can you register an account? Access any API without credentials? If any answer is yes and unintended, halt the migration.

Step 4: Enforce MFA by Policy

Move MFA enforcement to the identity layer:

  • Set policies requiring MFA for all identities accessing the system, with no exceptions for self-registered accounts.
  • Disable self-registration unless justified by business needs.
  • Default new accounts to zero entitlements, following the Principle of Least Privilege.

This aligns with ISO/IEC 27002 and NIST SP 800-53 (IA and AC control families).

Step 5: Add Compensating Perimeter Controls

Place the system behind a web application firewall. Block account-creation paths from external sources at the WAF. Retain VPN or private-link requirements unless the review justifies their removal.

Step 6: Build Detection for Failures

Assume the gate might miss something. Add these SIEM alerts:

  • Blocked Access Attempts: Aggregate by source.
  • Unexpected Account Creation: On systems where it's not expected.
  • Bulk Read or Download Volume: From low-privilege or new accounts.
  • First-Seen External Source IPs: Against internal-classified systems.

Test alerts with synthetic events.

Step 7: Fix Triage Logic

When an unauthorized account appears, verify what it can read. Treat "no application assignment" as a hypothesis, not a conclusion.

Validation: How to Verify It Works

  • Gate Test: Submit a change adding a public listener to a restricted system. Confirm the pipeline blocks it and routes to the reviewer.
  • MFA Test: Create test accounts through all paths. Confirm each is challenged for MFA.
  • Detection Test: Generate a blocked request, a new account, and a bulk read. Confirm alerts fire and reach on-call within your target response time.
  • External Scan: Conduct unauthenticated scans monthly against all restricted systems and compare with previous baselines.

Maintenance and Ongoing Tasks

  • Quarterly: Re-scan the external attack surface and reconcile it with the asset inventory. Address unexplained public reachability promptly.
  • Per Change: Retain completed Network Exposure Reviews as audit evidence for SOC 2 Type II and ISO/IEC 27001 compliance.
  • Biannually: Review MFA policy exemptions. Ensure each has an owner and expiry.
  • Post-Incident: Update the checklist with any missed conditions. For example, add "dormant features exposed by the new zone" as a review line.
  • Customer Exposure Planning: If identity documents are involved, plan how to notify affected individuals. Include protective steps for carrier and bank accounts.

Boundary changes are security events. Treat them accordingly, enforce MFA at the identity layer, and ensure your monitoring can catch what reviews might miss.

Promotional banner for the Penetration Report Template Kit

You Might Also Like