Why Your VPN Is Actually Your Biggest Security Risk?
VPNs are security theater. Learn how lateral movement and MFA fatigue turn your "protection" into a liability—and why identity is key.
Let me tell you about the breach that made me rethink everything 2023.Financial services client. Their VPN got popped through a contractor's laptop—compromised credentials from a LinkedIn data dump three years prior. Once inside, the attacker moved laterally for six days. Six. Days. They hit the production database because guess what? If you're "on the network," you're trusted.
That's when I stopped pretending VPNs were security architecture. They're not. They're a liability dressed up as protection.
Application Security stops being a checkbox exercise when you realize the network perimeter is a fiction. Identity is the only perimeter that matters now. Everything else is theater.
Here's what I've learned the hard way.
VPNs Are Security Theater (And We All Pretend Otherwise)
Every CISO I know has the same nightmare. Someone gets past the VPN. Then what?
Lateral Movement Isn't a Vulnerability—It's a Feature
You know what happens after a VPN compromise? Everything becomes accessible.
I watched an attacker go from HR system to payment processor in three hours. Why? Because both services trusted "internal network traffic." No additional auth. No verification. Just "you're on the right VLAN, come on in."
The old model was simple. Outside bad. Inside is good. That worked when "inside" meant a physical building with badge access. Now "inside" means a VPN endpoint that trusts passwords harvested from a breach you didn't even know happened.
The Credentials Problem Nobody Fixes
Here's the thing about VPN credentials. They're everywhere. Breach databases. Dark web markets. Phishing kits.
MFA? Sure, it helps. Until someone spam-clicks "approve" on push notifications at 11pm because they're tired and want to sleep. I've seen that attack work. Multiple times. It's called MFA fatigue and it's embarrassingly effective.
We keep bolting more security onto a fundamentally broken model. Stop securing the front door when attackers are walking through windows.
Zero Trust Means Identity First (Not Network First)
Real Zero Trust at the application layer means this: every single request gets verified. I don't care if you came from the "trusted network." Prove who you are. Every. Single. Time.
Identity-Aware Proxies Actually Work
IAPs sit between users and applications. They demand proof of identity before forwarding anything. Not just username/password. Full context: Is the device compliant? Is the user's risk score normal? Are they accessing from a suspicious location?
Google built BeyondCorp this way. Sounds fancy. It's really just "don't trust the network, trust the identity token."
The difference from VPNs? Granular control. Your finance person gets access to Salesforce. They don't get access to the Kubernetes API. Simple. Network location doesn't grant blanket access to everything.
Traditional ZTNA vendors—Zscaler, Cloudflare, whatever—basically sell this same concept with better marketing decks.
Service Mesh for Microservices (If You're Into That)
Running microservices? Cool. Zero Trust means service-to-service auth too.
Service mesh tools like Istio or Linkerd enforce mTLS between every service call. Service A presents a certificate to Service B. Service B verifies it. No certificate? No connection. Network doesn't matter.
I've seen shops where microservices authenticate with API keys in YAML files. Those keys don't rotate. They live in Git history forever. That's not security. That's hope.
Machine Identity Is Where Everyone Falls Apart
You've got SSO for humans figured out. Great. What about your services?
mTLS Isn't Optional Anymore
Mutual TLS means both sides prove identity with certificates. Not just the server. The client too. Could be a microservice. Could be your build pipeline. Could be a mobile app.
No more shared secrets. No more API_KEY=supersecret123 in environment variables that leak in error messages.
I audited an environment last year where services had hardcoded tokens from 2019. Still working. Never rotated. Found in logs, Slack messages, screenshot tools. mTLS forces you to solve identity correctly because certificates expire and you need infrastructure to manage them.
Can't half-ass it.
SPIFFE/SPIRE: Boring But EssentialThe Standard Nobody Talks About (But Everyone Needs)
SPIFFE is a spec for workload identity. SPIRE implements it. Together they issue short-lived certificates to services based on attestation—cryptographic proof that the service is what it claims to be.
Without this, you're inventing your own identity system. I've seen those. They're all bad. Certificates don't rotate. Revocation doesn't work. Secrets sprawl everywhere.
SPIRE handles bootstrapping (how does a new service get its first credential?) and rotation (how do you renew without breaking production?). Works with Kubernetes, VMs, cloud platforms.
I've deployed this twice now. It's not exciting. Nobody writes conferences about it. But it's the difference between "we say we do mTLS" and "our mTLS actually functions under load."
Your Security Model Changes Completely
When identity becomes the perimeter, you're not managing firewalls anymore. You're managing policies and identities.
Policy Lives in Code Now
No more firewall rules that take two weeks to get approved. Authorization policies live with the application. Open Policy Agent. Custom auth services. Whatever.
Access decisions happen at the service based on identity claims and context. Not IP addresses. Not network segments.
This is objectively better for Application Security because developers see the policies. They're testable. They're in the same repo. They're not hidden in some network engineer's Terraform that deploys rules nobody understands six months later.
Supply Chain Security Becomes Real
Zero Trust extends to your build pipeline. If every artifact has a cryptographic signature (Sigstore, Cosign, whatever) and you verify the identity of the pipeline that built it, supply chain attacks get harder.
Every component proves its identity. Unsigned artifacts don't deploy. Pretty simple.
I still see teams running kubectl apply -f with zero signature verification. That's not a Software Supply Chain. That's crossing your fingers.
Logs Actually Help During Incidents
When every request carries identity, your observability stops being garbage. You know which service called which endpoint with what identity. Authorization failures have context. Security incidents have audit trails.
Without identity, you're grepping for IP addresses. Good luck with that when everything's NAT'd through three layers of proxies.
How to Actually Do This (Because You Can't Burn It All Down)?
You can't rip out your VPN next week. I get it. Here's the path I've taken twice.
Start Small with External Apps
Pick one external-facing app. Put an Identity Perimeter proxy in front of it. Cloudflare Access, Pomerium, oauth2-proxy—doesn't matter. Require auth. Maybe check device compliance if your tools support it.
Learn something that won't wake you up at 3am if it breaks.
Test mTLS in Staging First
Deploy SPIRE or a service mesh in staging. Pick one cluster. Get mTLS working between two services. Watch it break. Fix it. Learn how certificate rotation causes outages.
Do NOT go to production until you've broken and fixed mTLS in staging. I'm serious.
Kill the VPN Service by Service
This is more political than technical. Track what still needs VPN. Migrate each service to identity-based access. Eventually VPN is only for that one legacy Oracle database nobody wants to touch.
Then you kill it. I threw a small party when we decommissioned our last VPN concentrator. Worth it.
What to Use in 2026
You don't build this from scratch. That's insane.
Identity Proxies: Cloudflare Access, Tailscale, Pomerium, Teleport, Google IAP.
Service Mesh: Istio, Linkerd, Cilium.
Machine Identity: SPIRE, Cert-Manager, Venafi, Vault (if you actually configure it right).
Policy: Open Policy Agent, Styra, or roll your own auth service.
Use what fits your stack. Don't deploy a service mesh if you're not on Kubernetes. Don't run SPIRE if you can't commit to operating a PKI. Be honest about your operational maturity.
What You Actually Get
Attackers can't pivot from one compromised laptop to your entire infrastructure. Lateral movement gets hard.
Access is granular. Services get minimum necessary privileges. Users get what they need for their job. Nothing more.
Incidents are investigable. Every request has an identity attached. You can actually figure out what happened.
And honestly? You stop waking up at 2am in a cold sweat wondering if someone's walking around your network right now.
The reality: VPNs assume everyone on the network deserves trust. Zero Trust at the app layer assumes the network is hostile and demands proof at every step.
If you're building Application Security for anything that looks like production in 2026, identity has to be your perimeter. The network already failed. You just might not know it yet.
Stop pretending the castle walls work. Start demanding cryptographic proof.