External Secrets Operator w wersjach od 0.20.2 do 1.2.0 zawiera podatność umożliwiającą pobieranie sekretów Kubernetes z dowolnych przestrzeni nazw (cross-namespace) z pominięciem mechanizmów bezpieczeństwa. Jest to szczególnie groźne w środowiskach wielodostępnych, gdzie separacja namespace'ów stanowi kluczową granicę bezpieczeństwa.
▸ Pokaż oryginał (EN)
External Secrets Operator reads information from a third-party service and automatically injects the values as Kubernetes Secrets. Starting in version 0.20.2 and prior to version 1.2.0, the `getSecretKey` template function, while introduced for senhasegura Devops Secrets Management (DSM) provider, has the ability to fetch secrets cross-namespaces with the roleBinding of the external-secrets controller, bypassing our security mechanisms. This function was completely removed in version 1.2.0, as everything done with that templating function can be done in a different way while respecting External Secrets Operator's safeguards As a workaround, use a policy engine such as Kubernetes, Kyverno, Kubewarden, or OPA to prevent the usage of `getSecretKey` in any ExternalSecret resource.
Funkcja szablonowa `getSecretKey`, pierwotnie wprowadzona z myślą o dostawcy senhasegura Devops Secrets Management (DSM), korzysta z uprawnień (roleBinding) kontrolera external-secrets. Dzięki temu lokalny użytkownik posiadający prawo do tworzenia lub modyfikowania zasobów ExternalSecret może użyć tej funkcji do pobierania sekretów z przestrzeni nazw innych niż jego własna. Mechanizm omija wbudowane zabezpieczenia operatora, które normalnie ograniczają dostęp do sekretów wyłącznie w obrębie tej samej przestrzeni nazw. W wersji 1.2.0 funkcja `getSecretKey` została całkowicie usunięta.
Atakujący z lokalnym dostępem uprzywilejowanym (PR:L) do klastra Kubernetes może odczytać, a pośrednio narazić na ujawnienie lub modyfikację, poufne sekrety (np. hasła, tokeny, klucze API) należące do innych zespołów lub aplikacji działających w odrębnych przestrzeniach nazw, co może prowadzić do kompromitacji całego klastra.
Należy zaktualizować External Secrets Operator do wersji 1.2.0 lub nowszej, w której funkcja `getSecretKey` została całkowicie usunięta. Jako obejście (workaround) dla wersji wcześniejszych zaleca się wdrożenie silnika polityk (np. Kyverno, Kubewarden, OPA lub natywnych polityk Kubernetes) blokującego użycie funkcji `getSecretKey` w zasobach ExternalSecret.
External Secrets Operator w wersjach od 0.20.2 (włącznie) do 1.2.0 (wyłącznie)
Podatność sklasyfikowana jako CWE-863 (Incorrect Authorization). Poprawka dostępna w commicie 17d3e22b8d3fbe339faf8515a95ec06ec92b1feb. Problem zgłoszony pierwotnie w issue #5690 repozytorium projektu na GitHub.
CVSS:4.0/AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:XExternal Secrets Operator
APPExternal-Secrets0.20.2 – 1.2.0 (bez)
Powiązane podatności
Nieprawidłowe uprawnienia w External Secrets Operator umożliwiają privilege escalation
External Secrets Operator reads information from a third-party service and automatically injects the values as...
External Secrets Operator is a Kubernetes operator that integrates external secret management systems. The ext...