TGViewer
k8s (in)security k8s (in)security @k8security · 13.2K subscribers
Post #1459 4.8K
Наверняка многие знают, что с docker socket можно достаточно легко взаимодействовать при помощи curl, даже когда в контейнере нет подходящих инструментов или возможности докачать их извне:

$ curl -s --unix-socket /var/run/docker.sock http:/containers/json

Но также легко это делать, если мы имеем дело с containerd socket ?

Для начала мы можем докачать или воспользоваться имеющимся инструментами типа ctr или crictl:

$ sudo ctr --address /var/run/containerd/containerd.sock -n k8s.io containers list
CONTAINER IMAGE RUNTIME
01a91532d97f8f7162c477dd1e402520d313e9c4333827d74a93cde25dddc1cc registry.k8s.io/pause:3.6 io.containerd.runc.v2
05536e2ec91d018cdb4edac21ab613b22f0755721e082c99f81b87516bce60ec registry.k8s.io/pause:3.6 io.containerd.runc.v2
0894b4942001821ad9c36949ae7c15fc2dd9b54bf6e5d531b6e5b03e6f5e313c docker.io/calico/cni:v3.25.0 io.containerd.runc.v2

Если их нет, то можно также отправить запрос с помощью curl, правда это будет несколько сложнее:

$ echo -ne "\x00\x00\x00\x00\x00" | sudo curl -v -s --http2-prior-knowledge --unix-socket /run/containerd/containerd.sock -X POST -H "content-type: application/grpc" -H "te: trailers" -H "grpc-accept-encoding: gzip" http://localhost/containerd.services.version.v1.Version/Version --data-binary @- --output /tmp/versionresponse.bin
* Trying /run/containerd/containerd.sock:0...
* Connected to localhost (/run/containerd/containerd.sock) port 80 (#0)
* Using HTTP2, server supports multiplexing
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x55c22b6bdec0)
> POST /containerd.services.version.v1.Version/Version HTTP/2
> Host: localhost
> user-agent: curl/7.81.0
> accept: */*
> content-type: application/grpc
> te: trailers
> grpc-accept-encoding: gzip
> content-length: 5
>
} [5 bytes data]
* We are completely uploaded and fine
* Connection state changed (MAX_CONCURRENT_STREAMS == 4294967295)!
< HTTP/2 200
< content-type: application/grpc
<
{ [55 bytes data]
< grpc-status: 0
< grpc-message:
* Connection #0 to host localhost left intact


Об этом и не только Stephen Bradshaw рассказал в своём блоге, в одноименных заметках containerd socket exploitation в трёх частях (1, 2, 3).
  • 👍 22
  • 🔥 5
  • ❤ 2
More from @k8security
  1. Oct 9, 2026В 2014 году Google явил миру оркестратор Kubernetes, чтобы управлять множеством контейнеро…
  2. Oct 8, 2026NCC Group рассказали, как с помощью LLM-assisted pipeline нашли две уязвимости в etcd. В р…
  3. Oct 7, 2026Сегодня мы также хотим поделиться с вами нашим большим внутренним праздником) Наше решение…
  4. Oct 7, 2026Сегодня в центре нашего внимания свежий вайтпейпер "Kubernetes Misconfigurations in the Wi…
  5. Oct 6, 2026Исследователи Palo Alto Networks показали интересный сценарий атаки на SPIFFE/SPIRE в Kube…
  6. Oct 5, 2026k8s-aibom - это оператор для сбора AI Bill of Materials в Kubernetes. В AI-проектах уже не…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →