| WARNING: This product is not officially supported by Dynatrace. |
|---|
VulnCare is an open-source, purposefully misconfigured multi-service Kubernetes healthcare cluster for security research. It is the evaluation benchmark for the KuTIE paper (Does Runtime Topology Context Improve LLM-Generated Kubernetes Security Patches?) and a community testbed for evaluating automated and LLM-based remediation.
Security notice: VulnCare deploys intentionally vulnerable workloads and ships synthetic credentials as part of its findings. Never expose this cluster to untrusted networks and never run it in production.
| Component | Description |
|---|---|
chart/vulncare/ |
Helm chart that installs the full benchmark cluster |
cluster/ |
Source manifests, service code, kind cluster config, Kyverno policies |
misconfigurations/ |
The injectable findings and the dependency-class taxonomy |
inject.sh |
Inject and reset misconfigurations on a running cluster |
cluster/exploits/ |
Five exploit chains validated against the live cluster |
The evaluation framework, scorer, and experiment results are in the companion KuTIE repository.
Build the service images into a kind cluster, then install with Helm:
# 1. create the kind cluster + CNI/mesh prerequisites
kind create cluster --config cluster/setup/vulncare-cluster.yaml
bash cluster/setup/install-cilium.sh
# 2. build and load the service images
bash cluster/setup/build-images.sh
bash cluster/setup/build-images-extended.sh
bash cluster/setup/build-images-multinamespace.sh
# 3. install the benchmark cluster
helm install vulncare ./chart/vulncare
# 4. inject the misconfigurations and verify
bash inject.sh
bash cluster/setup/verify-topology.shhelm template ./chart/vulncare renders the cluster offline. Set --set kyverno.enabled=false
if Kyverno is not installed in the target cluster.
36 deployments across 4 namespaces:
| Namespace | Services |
|---|---|
vulncare |
api-gateway, auth-service, patient-service, appointment-service, prescription-service, lab-service, notification-service, billing-service, payment-processor, bank-gateway, legacy-settlement-api, pharmacy-gateway, ops-console, audit-logger-dep, metrics-collector-dep, load-generator |
vulncare-clinical |
identity-provider, mfa-service, consent-service, fhir-gateway, session-cache, patient-db |
vulncare-financial |
claims-processor, eligibility-checker, edi-gateway, edi-clearinghouse, legacy-claims-archive |
vulncare-imaging |
pacs-gateway, dicom-processor, imaging-store, ai-inference, radiology-report |
Workloads communicate over 51 Istio-observed call edges. A 3-node kind cluster with Cilium CNI, the Istio mesh, and the Trivy Operator for KSPM scanning.
31 evaluated findings across 7 dependency classes, each classified by topology dependence against cluster ground truth:
- TD (topology-dependent): a correct, working patch requires a value discoverable only from
cluster state (a caller/callee identity, an RBAC-bound
Secretname and key, an image digest, a seccomp profile, or aStorageClass). - TI (topology-independent): the correct patch is fully determined by the finding text.
| Class | TD | TI |
|---|---|---|
| CAP | 2 | 2 |
| CRED | 5 | 0 |
| NET | 5 | 0 |
| POLICY | 2 | 1 |
| RBAC | 4 | 2 |
| SEC | 5 | 0 |
| STORAGE | 2 | 1 |
| Total | 25 | 6 |
Five findings carry a -TI- infix in their identifier yet are topology-dependent by ground truth
(their correct fix needs a cluster-only value); the identifiers are retained for traceability. See
docs/misconfigurations.md for per-finding detail and docs/exploit-chains.md for the five
validated exploit chains.
- kind v0.20+, kubectl, Docker
- Helm 3 (chart install; Cilium and Istio)
If you use VulnCare, please cite the KuTIE paper it was built to evaluate:
@inproceedings{shaikh2026kutie,
title = {Does Runtime Topology Context Improve LLM-Generated Kubernetes Security Patches?},
author = {Shaikh, Farooq},
booktitle = {Proceedings of the Workshop on Large Language Models for Security (LLM4Sec 2026), co-located with the European Symposium on Research in Computer Security (ESORICS 2026)},
year = {2026},
publisher = {Springer},
series = {Lecture Notes in Computer Science},
}Copyright 2026 Dynatrace LLC. Licensed under Apache License 2.0.