The silent CVE in the heart of Kubernetes apiserver
gravitational.com
The silent CVE in the heart of Kubernetes apiserver
1–10 of 14 posts
Re: The silent CVE in the heart of Kubernetes apiserver
#2If you're an operator still in the muck or need a quick way to test, check out our vuln PoC: https://github.com/gravitational/cve-2018-1002105
Re: The silent CVE in the heart of Kubernetes apiserver
#3There's no such thing as an HTTP/2 websocket.[0] Websockets are a purely HTTP/1.1 concept, and they're only HTTP/1.1 until the moment that the `Upgrade` happens, at which point the TCP socket gets hijacked.
I'm confused as to why HTTP/2 is mentioned. I guess they just mean a normal websocket?
[0]: https://medium.com/axiomzenteam/websockets-http-2-and-sse-5c...
Re: The silent CVE in the heart of Kubernetes apiserver
#4> K8s also allows upgrading apiserver connections to full, live, end-to-end HTTP/2 websockets. There's no such thing as an HTTP/2 websocket.[0] Websockets are a purely HTTP/1.1 concept, and they're only HTTP/1.1 until the moment that the `Upgrade` happens, at which point the TCP socket gets hijacked. I'm confused as to why HTTP/2 is mentioned. I guess they just mean a normal websocket? [0]: https://medium.com/axiomze…
Re: The silent CVE in the heart of Kubernetes apiserver
#5Re: The silent CVE in the heart of Kubernetes apiserver
#6Also, my heart goes out to the [big company] engineering manager asking in the GitHub thread if 1.7.x clusters are affected.
Re: The silent CVE in the heart of Kubernetes apiserver
#7Has there been any word of how long this has been known about? I recall a certain group of people talking confidently, open but vaguely about a serious k8s security bug at least a few months ago. Given the number of clusters that undoubtedly had to be upgraded for this, it wouldn't surprise me if this was found a while ago. Also, my heart goes out to the [big company] engineering manager asking in the GitHub thread i…
Re: The silent CVE in the heart of Kubernetes apiserver
#8I'm really pleased GKE had already patched and updated my clusters before I heard about this on Monday.
Re: The silent CVE in the heart of Kubernetes apiserver
#9The PoC basically tests that if you create a websocket request that results in non-101 response the socket is closed by the server. That is a side effect of the fix. The way the proxy code works is that on presence of the Upgrade header it first hijacks the HTTP request and dials the target. It then starts a copy loop but reads the first bytes into a http.Response. If the response is not 101 it will exit.
The a side effect is that it just so happens to be that because the connection is hijacked the golang server will not reuse the TCP connection and will close it. But according to the HTTP spec that TCP connection is still valid for reuse so the server does not have to actually close the connection (but it happens to). Where this PoC could fall apart is if you are running kube-apiserver behind a particularly pedantic LB (ALB might apply here). Most LBs will not reuse any TCP connection that had an Upgrade header in it, but if they are smart and read the response they can if it didn't result in a 101. From that perspective a load balancer (or reverse proxy) is not obligated to close the TCP connection to the client.
To fully test the vulnerability you need to find a pod you can exec to and another pod on the same node you are not authorized to exec to. First send a malformed pod exec and get the open socket. Then send another request using the kubelet API to exec to a pod you are not authorized for. Then see if you get a valid response (which I believe is a callback URL for the actually tty stream).
The PoC is still basically valid because it could just give you a false negative that you are vulnerable (not a false positive all is swell).
Re: The silent CVE in the heart of Kubernetes apiserver
#10Has there been any word of how long this has been known about? I recall a certain group of people talking confidently, open but vaguely about a serious k8s security bug at least a few months ago. Given the number of clusters that undoubtedly had to be upgraded for this, it wouldn't surprise me if this was found a while ago. Also, my heart goes out to the [big company] engineering manager asking in the GitHub thread i…
I personally found this issue and highly doubt anybody previously exploited it. This bug was discovered from the perspective of a functional bug and only later realized it had a security impact. So it wasn't like somebody was first hacked, and also a security researcher didn't find it either. Basically this issue is very nuanced and I don't think many would be looking for it (although people will now).
Although plenty of people are saying the sky is failing, this is mostly a privileged escalation issue which means you first need valid access to do something harmful. So it's not a fabulous attack vector because hard multitenant clusters are extremely rare. Searching for anonymous auth on kubelets is a better use of your time.