Shopify has developed and introduced an internal security scanner named Overexposed. This tool is designed to locate Kubernetes Ingresses on Google Kubernetes Engine (GKE) and Cloud Run services that are accessible from the internet without requiring authentication.
The initial version of the scanner relied on repository configuration files, which led to false alarms and blind spots. This approach failed because proxy authentication annotations could trigger false positives, admission controllers could rewrite settings inconsistently, and Ingresses created by other tools were missed. Shopify concluded that repository configurations show intent, but the cluster reflects what is actually enforced.
The team rebuilt the scanner using GCP Cloud Asset Inventory and an anonymous HTTP probe. This revision significantly improved accuracy, reducing inconclusive Ingress verdicts by approximately 80% within a few weeks of tuning.
The current Overexposed scanner operates on a schedule, querying Cloud Asset Inventory for Ingresses accepted by GKE, Cloud Run services, and load balancers. It also retrieves access policies without needing cluster credentials. This inventory-based approach also identified Cloud Run services in projects previously outside the scanner's scope.
Each potential candidate service then receives a single anonymous HTTP request. The scanner first sends a HEAD request, falls back to GET, follows up to three redirects, and checks path variations like '/ADMIN'. Results are categorized into six verdicts: exposed, expected, protected, not found, unreachable, and inconclusive. An 'expected' verdict applies to open endpoints that match a reviewed, in-code allowlist entry by exact host and path. Allowlisted endpoints are still probed, and stale entries are flagged.
Shopify emphasizes that HTTP status codes are interpreted contextually. A 404 status behind an Ingress indicates the proxy responded but the path is missing. For Cloud Run, a 404 from Google's front end before application execution is classified as inconclusive. A 403 status is not considered definitive proof of protection. For Cloud Run, the scanner differentiates between ingress settings and IAM, classifying a service as public only if 'allUsers' holds the 'invoker' role or the invoker check is disabled.
✨ This summary was generated by AI from the outlets' reporting listed below. It is not independently verified and may contain errors — check the original sources. How BrevFeed works →
One email each morning: the day's tech stories, clustered across outlets and summarized. No account needed.
One email a day. Unsubscribe in one click, any time.
Spend a few minutes, get the whole day. Every topic's top stories in one hands-free rundown — listen, watch, or read the transcript.
▶ Play today's briefNew every morning, and the back catalogue is archived by date.
Shopify introduced Overexposed, an internal scanner that identifies internet-accessible, unauthenticated Kubernetes Ingresses on GKE and Cloud Run services. The scanner was rebuilt to use GCP Cloud Asset Inventory and anonymous HTTP probes, reducing inconclusive verdicts by approximately 80%. This tool helps Shopify identify and manage publicly exposed services more accurately than its previous configuration-file-based approach.