Slide 17
Slide 17 text
2022/11/15 17
if spec.SecurityContext.HostNetwork {
allErrs = append(allErrs, field.Forbidden(fldPath.Child("hostNetwork"), "when `pod.Spec.HostUsers` is false"))
}
if spec.SecurityContext.HostPID {
allErrs = append(allErrs, field.Forbidden(fldPath.Child("HostPID"), "when `pod.Spec.HostUsers` is false"))
}
if spec.SecurityContext.HostIPC {
allErrs = append(allErrs, field.Forbidden(fldPath.Child("HostIPC"), "when `pod.Spec.HostUsers` is false"))
}
validation.goのvalidateHostUsers関数にて、以下のようにhost*フィールドとhostPathが禁⽌されており、乗っ取りに必要な権限がすべて剥奪され
ている。ちなみprivilegedはUserNamespace内での権限となるため、特に規制はかかっていない。
for i, vol := range spec.Volumes {
switch {
case vol.EmptyDir != nil:
case vol.Secret != nil:
case vol.DownwardAPI != nil:
case vol.ConfigMap != nil:
case vol.Projected != nil:
default:
allErrs = append(allErrs, field.Forbidden(fldPath.Child("volumes").Index(i),
"volume type not supported when `pod.Spec.HostUsers` is false"))
}
}
https://github.com/kubernetes/kubernetes/blob/641197dc9562d8affd428d05046a8921b3a367e0/pkg/apis/core/validation/validation.go#L3138-L3147
https://github.com/kubernetes/kubernetes/blob/641197dc9562d8affd428d05046a8921b3a367e0/pkg/apis/core/validation/validation.go#L3121-L3131
4. 何が嬉しいの? ~その1