← Back to Research

The Okta HAR File Lesson: Session Cookies Are Auth — Treat Them Like Keys

One HAR file. Five compromised tenants. In October 2023, an Okta support engineer received a routine HAR capture from a customer to debug a login issue. Inside that file was an active session cookie. Over the next six weeks, attackers used that pattern — and 133 other support files — to pivot into 1Password, Cloudflare, BeyondTrust, and at least two other named tenants. The cookie bypassed every MFA policy Okta itself enforced.

Pull up your browser's developer tools right now. Open the Network tab. Click the little download icon labeled "Save All As HAR." That single button — present in Chrome, Edge, Firefox, and Safari — captures every request and response your browser made on the current site, including the Cookie: header on every authenticated request. If your support team ever asks a customer to "send us a HAR file so we can debug," you have just normalized the practice of emailing live credentials over Zendesk.

The 2023 Okta support-system breach is the textbook case, but it is not a one-off. 1Password, Cloudflare, and BeyondTrust independently noticed the pattern in their own telemetry weeks before Okta publicly disclosed. The attackers were not exploiting a CVE in the Okta product. They were using session cookies — exactly as designed, exactly as the protocol allows — from authenticated administrators whose browsers had captured those cookies into a file that lived on a support engineer's laptop.

What happened

The timeline, reconstructed from public statements by Okta, BeyondTrust, Cloudflare, and 1Password between October and November 2023:

The cookie-based bypass continued working for as long as the captured sessions remained valid. Okta's default session lifetime at the time was up to two hours of idle plus a maximum of twelve hours absolute, but admins with extended sessions or active workflows kept sessions alive longer. Some captured cookies were still being replayed weeks after the initial HAR upload.

Why it kept working

A session cookie is the equivalent of a password — usually a stronger equivalent, because it has already passed MFA. The browser sends it automatically with every request. The server, if it does nothing else, treats whoever presents the cookie as the user who originally authenticated. That is not a flaw in Okta. That is HTTP, RFC 6265, and forty years of web architecture working exactly as specified.

The reason this exact technique works against most identity providers — not just Okta — is that the canonical session cookie has historically been bound to nothing except itself. There is no client certificate. There is no requirement that the cookie return from the same IP it was issued to. There is no proof-of-possession. Whoever holds the cookie is the user. The protocol is bearer-token by default, and bearer tokens are fungible: hand them to anyone and they work.

On top of that protocol baseline, browsers ship an "export everything" button. The HAR format was standardized in 2007 to help web developers debug performance issues. Nobody designing it imagined that support workflows in 2023 would routinely involve customers emailing those files to vendor employees over case-tracking systems hosted on third-party clouds. But that is what happened, and the format faithfully preserves Set-Cookie response headers and Cookie request headers exactly as they crossed the wire.

HAR sanitizers exist. Okta released one after the breach. Browser extensions claim to redact sensitive headers. None of them are universally deployed, none are mandatory, and none are present at the moment a tier-1 support agent says "can you grab a HAR for me." The sanitizer runs after the dangerous artifact is already created and stored.

What to check today

You do not need to wait for your identity provider to redesign cookie binding. Five things you can implement this week:

  1. Ban HAR uploads to support — period. Replace the workflow with screenshots, screen recordings (which capture rendered pixels, not headers), or curated request/response logs that the customer manually filters. If a vendor's troubleshooting playbook insists on a HAR file, push back. Most performance issues can be diagnosed from a chrome://net-export capture run with cookies disabled, or from server-side request logs the vendor already has.
  2. Bind sessions to a network signal. Most enterprise IdPs now offer some form of session binding: source ASN, geo-velocity, or — ideally — a device-bound token tied to a TPM-backed key (FIDO2 device-bound passkeys, Apple device-bound tokens, Microsoft MFA session binding). Turn it on. Audit which apps still accept unbound sessions.
  3. Shorten admin session lifetimes aggressively. A 12-hour admin session is a 12-hour key. Drop admin sessions to 60 minutes idle, 4 hours absolute. Force step-up MFA on every privileged action, not just at login. Yes, your admins will complain. Yes, this is the price.
  4. Monitor session-cookie replay signals. Track session-ID reuse across distinct source IPs, ASNs, or user-agents within short windows. Most modern SIEM rules will fire on this if you give them the auth-event stream. The cookie-replay tell is identical across IdPs: same session ID, dramatic shift in network metadata, no preceding logout/login event.
  5. Audit your support-vendor security model. Every vendor with a support portal that accepts file uploads from your administrators is a potential cookie-exfil channel. Map them. Restrict who can attach files. Require uploads to go to a sanitizing intermediary, not directly to the vendor's case-management system.

How CELVEX Group tests for this

The CELVEX Group test catalog includes IDENTITY-SESSION-COOKIE-BINDING-001, defined in core/test_catalog/_supplement_identity_2026-03.py. The test verifies four properties of any session cookie issued by your identity provider or by your application:

The test runs against your customer-facing applications, your admin consoles, and — where you've authorized it — your IdP's tenant configuration. We surface the results as a chained finding: a session cookie that is unbound, long-lived, missing SameSite=Strict, and accessible via JavaScript is a category of risk one severity higher than any of those four properties alone, because it is the exact configuration the Okta HAR exfil exploited.

Bottom line

Every session cookie is a password that has already passed MFA. The protocol does not care who holds it. Your IdP does not care who holds it unless you have explicitly opted into binding. Your support workflow does not care who holds it because nobody told the L1 agent that "send us a HAR" is the same sentence as "email me your password."

The Okta HAR breach is not a story about a flaw in Okta. It is a story about a forty-year-old protocol assumption — bearer tokens are fungible — meeting a fifteen-year-old browser feature — export-everything-as-HAR — meeting a five-year-old support workflow — case attachments are routine and unfiltered. The compounding of all three is the breach. Fixing any one of them prevents it.

The vendors that detected the activity early — 1Password, Cloudflare, BeyondTrust — did so because their internal security teams treat session-cookie replay as a first-class detection. That is the discipline that separates customers who got compromised from customers who got a heads-up. You can build that discipline before the next vendor incident, or you can wait for the disclosure email.

Sources

Run a free Exposure Check — 60 seconds, no signup

See whether your customer-facing session cookies are bound, properly attributed, and short-lived enough to survive a HAR exfil. No account required.

Start your Exposure Check