Service meshes like Istio promise stronger zero-trust security by automating mutual TLS (mTLS) between workloads. By offloading certificate management to a sidecar proxy (typically Envoy), mTLS becomes transparent to application developers. But this convenience hides a critical flaw, rogue processes on the same node or inside the same pod can impersonate trusted workloads.
As we discussed in our blog post - Rethinking Workload Identity at the Kernel Level, sidecars and proxies simplify network security but introduce ambiguity around who is actually speaking on the wire. It’s time to rethink how workload identity is established and enforced.
At Riptides, we believe that true zero trust starts not at the edge, but inside the kernel — where identity can be cryptographically anchored to the process itself. If a proxy can’t distinguish between two processes behind the same socket, it’s not enforcing zero trust — it’s just forwarding packets.
In Istio (and similar meshes like Linkerd), secure communication between services is achieved through automatic mTLS, implemented via:
istiod) issuing X.509 certificates to Envoy via SDS (Secret Discovery Service).spiffe://cluster.local/ns/default/sa/myserviceaccountThis architecture makes strong cryptographic identity “invisible” to the application, and that’s where the problem begins.
The system implicitly trusts any connection that:
arrives over mTLS and presents a valid SPIFFE identity.
While this is technically sound at the network layer, it is not sufficient at the workload level.
Envoy authenticates other Envoys and not the actual application inside the pod. The application:
Here’s how a process-level impersonation attack can happen, even in a pod with a single application container:
Step 1: Initial Compromise
An attacker exploits a vulnerability in the application or breaks out of a container into the pod namespace.
Step 2: Reconnaissance
They find Envoy listening on 127.0.0.1:15001 (outbound) and 127.0.0.1:15006 (inbound) — standard Istio ports.
Step 3: Forged Requests
Using curl, netcat, or a custom application, the attacker sends arbitrary HTTP requests to Envoy’s outbound listener.
Step 4: mTLS Proxying
Envoy forwards the request over mTLS using the pod’s legitimate certificate. The receiving Envoy verifies the SPIFFE ID and allows the request.
Step 5: Impersonation Complete
The target service sees a valid, authenticated SPIFFE identity — and has no way to tell it wasn’t the real application.
This is not a theoretical issue — it’s a byproduct of conflating network identity with process identity.

Outbound cluster:
clusters:
- name: outbound|8080||target-service.default.svc.cluster.local
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificate_sds_secret_configs:
- name: default
Inbound listener:
listeners:
- address:
socket_address:
address: 127.0.0.1
port_value: 15006
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
The critical detail: any process in the pod can access localhost:15001 or 15006. There is no enforcement at the socket or process boundary. Envoy assumes it’s proxying on behalf of the legitimate workload, but it has no way to prove that.
Even when containers run in separate namespaces, Kubernetes pods often share:
This means:
Closing this gap requires cryptographic identity tied to the actual process, not just the pod or the network path.
To close this gap, what we propose:
This results in:
Sidecar-based mTLS brings convenience, but also risk. It allows any co-located process to speak as the workload, with no cryptographic attestation at the process level. In a true zero-trust architecture, you must authenticate the process, not a proxy in front of it.
To build secure-by-default systems:
Non-human identity is too foundational and too sensitive to be bolted on as an afterthought. It deserves a native, first-class treatment.
By operating directly in the Linux kernel, Riptides removes layers of complexity and guesswork, grounding identity in the one place all workloads truly run. No proxies, no sidecars, no credential sprawl just cryptographic trust, bound to the process itself. In an era of lateral movement and advanced threats, network identity isn’t enough. Process identity is the new perimeter.
The future of identity isn’t just more secure. It’s leaner, simpler, and built in from the start. And with Riptides, it’s already here.