Saltar al contenido
OPS // KITitspentest.sh

PE-CTR

ctr

CLI de bajo nivel para containerd, usado para inspeccionar y gestionar contenedores directamente cuando no hay Docker.

Sitio oficialVolver al catálogo

RESUMEN

ctr (github.com/containerd/containerd, en cmd/ctr) es el CLI de depuración minimalista que se distribuye con containerd, el runtime de contenedores que está por debajo de Docker y que también es el runtime por defecto en la mayoría de nodos Kubernetes. Habla directamente con el socket de containerd (normalmente `/run/containerd/containerd.sock`) sin un daemon de Docker en medio, lo cual importa porque muchos hosts endurecidos o exclusivos de Kubernetes tienen containerd pero ningún binario `docker`.

El propio proyecto advierte que ctr es una herramienta de depuración, no una interfaz de producción, pero es justo eso lo que lo hace útil en un pentest: puede listar y descargar imágenes, inspeccionar tasks/contenedores existentes y, si el socket es alcanzable por un usuario sin privilegios, lanzar un contenedor nuevo con configuración privilegiada y montaje del host para escalar fuera del nodo.

CASOS DE USO

Casos de uso en un engagement

  • 01

    Enumerar contenedores e imágenes en ejecución en un nodo donde Docker no está instalado.

  • 02

    Revisar permisos sobre el socket de containerd como posible vía de escalada a root.

  • 03

    Lanzar un contenedor privilegiado con montaje del host vía ctr para confirmar un hallazgo de escape.

  • 04

    Verificar de forma cruzada qué corre realmente un pod gestionado por Kubernetes a nivel de containerd.

PRIMEROS PASOS

En un host o nodo de Kubernetes que corre containerd pero no tiene daemon de Docker, para enumerar e interactuar con contenedores a más bajo nivel.

  1. Confirma que el escape de contenedores a nivel de containerd está explícitamente en alcance, ya que afecta al host o nodo, no a un solo contenedor.
  2. Comprueba si el socket de containerd es alcanzable y por qué usuarios/grupos locales.
  3. Usa `ctr images ls` y `ctr tasks ls` (por namespace, ej. `-n k8s.io`) para enumerar qué está corriendo.
  4. Si el acceso lo permite, prueba lanzar un contenedor con privilegios elevados para confirmar la vía de escalada.
sudo ctr -n k8s.io tasks ls

ANTES DE USARLA

Qué revisar antes de lanzarla

containerd organiza imágenes/contenedores por namespace (`k8s.io` para los gestionados por Kubernetes) — revisa el namespace correcto o los resultados parecerán vacíos.

Un socket de containerd alcanzable equivale en general a root en el host, igual que un socket de Docker expuesto — pruébalo solo contra un host explícitamente en alcance.

Es una herramienta de depuración según la propia descripción del proyecto; comandos como `ctr run` evitan por completo la orquestación de más alto nivel (Docker, Kubernetes), así que sus cambios no son visibles para esas capas.

SIGUE EXPLORANDO

Ver toda la fase →