This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Security Bulletins

Kiali releases every three weeks and so generally resolves CVEs in new releases only. Golang vulnerabilities are typically resolved in a timely way, as the Go version for release builds increments fairly often. Occasionally, critical CVEs may be resolved in patch releases for supported versions. Additionally, not every CVE reported against a Kiali dependency is actually a vulnerability. For reported CVEs that are proven not to affect Kiali, see the table below:

CVE Description Notes
CVE-2024-33599 nscd: Stack-based buffer overflow in netgroup cache If the Name Service Cache Daemon's (nscd) fixed size cache is exhausted by client requests then a subsequent client request for netgroup data may result in a stack-based buffer overflow Kiali is not affected. As per the CVE description (see https://www.cve.org/CVERecord?id=CVE-2024-33599), this vulnerability is only present in the nscd binary. The Kiali Server image does not have this binary; run this command to confirm: podman run --user root -it --rm --entrypoint '' quay.io/kiali/kiali:v2.2.0 ls -R / | grep nscd
CVE-2024-2961 The iconv() function in the GNU C Library versions 2.39 and older may overflow the output buffer passed to it by up to 4 bytes when converting strings to the ISO-2022-CN-EXT character set Kiali is not affected. ISO-2022-CN-EXT has been removed. To confirm, run the validation command `podman run -it --rm --entrypoint '' quay.io/kiali/kiali:v2.2.0 iconv -l | grep -E 'CN-?EXT'`. See https://access.redhat.com/security/cve/CVE-2024-2961
CVE-2023-37920 A flaw was found in the python-certifi package. This issue occurs when the e-Tugra root certificate in Certifi is removed, resulting in an unspecified error that has an unknown impact and attack vector. Kiali is not affected. This was fixed in RHEL9 base images with RHBA-2024:5691. Per the CVE page, these certs are included and marked as 'don't trust', but will not be removed until Mozilla removes them. Browsers are most at risk, which already understand and parse 'don't trust after'. Furthermore, note that Microsoft has not removed the certificate from their code-signing CA list that are merged with Mozilla's CA list, so the certificate is still there marked as trusted for code signing. See: https://access.redhat.com/security/cve/cve-2023-37920 and https://access.redhat.com/errata/RHBA-2024:5691
CVE-2022-27191 golang.org/x/crypto/ssh allows an attacker to crash a server in certain circumstances involving AddHostKey Kiali does not use the AddHostKey API; furthermore, neither Kiali nor its dependencies import this component. Thus Kiali is not susceptible to this vulnerability.
CVE-2022-1996 github.com/emicklei/go-restful Despite the package dependency Kiali is not susceptible to this vulnerability
CVE-2019-1010022 GNU Libc current is affected by: Mitigation bypass. This is a disputed CVE. According to upstream, it is not a security issue. For details, please see https://sourceware.org/bugzilla/show_bug.cgi?id=22850 and https://security-tracker.debian.org/tracker/CVE-2019-1010022

For Kiali-specific vulnerabilities there will be releases made as needed. At release time a security bulletin will be release as well. For prior bulletins see below:

1 - KIALI-SECURITY-004 - Missing namespace authorization checks in Kiali Server API endpoints

Description

Several Kiali Server API endpoints returned data about namespaces the caller had no RBAC access to (CWE-862, missing authorization). The impact is confidentiality only: no secrets or traffic content were exposed and nothing could be modified. The issues were reported to the Kiali security team by a member of the community and were verified on Kiali Server 2.34.0.

Kiali users are exposed to these findings depending on the endpoint:

  • Cluster health cache — GET /api/clusters/health?namespaces= served cached health data for any namespace. The internal health cache is populated by a background monitor running with Kiali’s ServiceAccount, and the handler only RBAC-filtered the response when the namespaces parameter was empty. This exposes application, service and workload names, replica counts, health statuses and traffic rates. Affected releases: v2.22.0 and later (the health cache is enabled by default since v2.22.0).
  • ztunnel logs — GET /api/namespaces/{namespace}/pods/{pod}/logs?logType=ztunnel streamed ztunnel access-log lines for any namespace. The ztunnel log path fetches logs with Kiali’s ServiceAccount rather than the caller’s credentials, so the API server never enforced RBAC. Additionally, the log filter regexes were not anchored, so a pod name in the URL acted as a prefix that could match workloads other than the one requested. This exposes pod, workload and namespace names, SPIFFE identities, IP addresses and byte counts. Requires an ambient mesh. Affected releases: v2.11.0 and later.
  • ztunnel config dump — GET /api/namespaces/{namespace}/pods/{pod}/config_dump_ztunnel returned the full mesh-wide configuration dump — every workload, service and policy in the mesh with pod IPs, service accounts and node information. The ztunnel pod was located by name across the cluster, so the namespace in the URL was irrelevant and no authorization check was performed. Requires an ambient mesh. Affected releases: all 2.x releases.
  • Cluster-wide Istio config validations — GET /api/istio/config?validate=true correctly filtered the returned Istio config objects to the caller’s accessible namespaces, but the validation entries attached to the response were not filtered. Any authenticated user received validation entries (object kind, name, namespace, misconfiguration messages and references to related objects) for Istio objects in every namespace of the cluster. The namespace-scoped variant (GET /api/namespaces/{namespace}/istio?validate=true) is not affected.

In addition, the openshift authentication strategy accepted any token for which user-info lookup succeeded, without checking that the user can view any namespace — unlike the openid strategy, which rejects such users. This widened the audience of the findings above to any valid OpenShift token, including ServiceAccounts that cannot see any namespace.

Mitigation

If you can update:

  • Update to Kiali Server v2.34.1 or later. In addition to fixing the findings above, this release makes namespace accessibility checks consistent across all namespace-scoped API endpoints (including tracing endpoints, which previously queried the tracing backend without a namespace check), and the openshift authentication strategy now rejects tokens that cannot view any namespace.

If you cannot update:

  • Disable the internal health cache by setting kiali_internal.health_cache.enabled: false in the Kiali CR to close the cluster health exposure.
  • Use the namespace-scoped Istio config validations endpoint (GET /api/namespaces/{namespace}/istio?validate=true) instead of the cluster-wide one.
  • There is no configuration-level mitigation for the ztunnel log and ztunnel config dump endpoints. If you run an ambient mesh, restrict access to the Kiali Server API (for example, via network policy) so that only trusted users and workloads can reach it.

2 - KIALI-SECURITY-003 - Installation into ad-hoc namespaces

Description

A vulnerability was found in the Kiali Operator allowing installation of a specified image into any namespace.

Kiali users are exposed to this vulnerability if all the following conditions are met:

  • Kiali operator is used for installation.
  • Kiali CR was edited to install an image into an unapproved namespace.

This vulnerability is filed as CVE-2021-3495

Mitigation

If you can update:

  • Update to Kiali Operator v1.33.0 or later.

If you can not update:

  • Ensure only trusted individuals can create or edit a Kiali CRs (resources of kind “kiali”).

3 - KIALI-SECURITY-002 - Authentication bypass when using the OpenID login strategy

Description

A vulnerability was found in Kiali allowing an attacker to bypass the authentication mechanism. The vulnerability lets an attacker build forged credentials and use them to gain unauthorized access to Kiali.

Kiali users are exposed to this vulnerability if all the following conditions are met:

  • Kiali is setup with the openid authentication strategy.
  • As a result of configurations in both Kiali and your OpenID server, Kiali uses the implicit flow of the OpenID specification to negotiate authentication.
  • Kiali is setup with RBAC turned off.

This vulnerability is filed as CVE-2021-20278

Mitigation

If you can update:

  • Update to Kiali v1.31.0 or later.
  • If you need an earlier version, only Kiali 1.26.3 and 1.29.2 are fixed.

If you are locked with an older version of Kiali, you have three options:

  • Configure Kiali to use the authorization code flow of the OpenID specification; or
  • Configure Kiali to use the implicit flow of the OpenID specification and enable RBAC; or
  • Configure Kiali to use any of the other available authentication mechanisms.

4 - KIALI-SECURITY-001 - Authentication bypass using forged credentials

Description

A vulnerability was found in Kiali allowing an attacker to bypass the authentication mechanism. Currently, Kiali has four authentication mechanisms: login, token, openshift and ldap. All are vulnerable.

The vulnerability lets an attacker build forged credentials and use them to gain unauthorized access to Kiali.

Additionally, it was found that Kiali credentials were not being validated properly. Depending on the authentication mechanism configured in Kiali, this could facilitate unauthorized access into Kiali with forged and/or invalid credentials.

These vulnerabilities are filed as CVE-2020-1762 and CVE-2020-1764

Detection

Use the following bash script to check if you are vulnerable:

KIALI_VERSION=$(kubectl get pods -n istio-system -l app=kiali -o yaml | sed -n 's/^.*image: .*:v\(.*\)$/\1/p' | sort -u)
kubectl get deploy kiali -n istio-system -o yaml | grep -q LOGIN_TOKEN_SIGNING_KEY
TEST_KEY_ENV=$?
kubectl get cm kiali -n istio-system -o yaml | grep signing_key | grep -vq kiali
TEST_KEY_CFG=$?
VERSION_ENTRIES=(${KIALI_VERSION//./ })
echo "Your Kiali version found: ${KIALI_VERSION}"
[ ${VERSION_ENTRIES[0]} -lt "1" ] || ([ ${VERSION_ENTRIES[0]} -eq "1" ] && (\
  [ ${VERSION_ENTRIES[1]} -lt "15" ] || ([ ${VERSION_ENTRIES[1]} -eq "15" ] && ( \
  [ ${VERSION_ENTRIES[2]} -le "0" ])))) && echo "Your Kiali version is vulnerable"
[ $TEST_KEY_ENV -eq 1 ] && [ $TEST_KEY_CFG -eq 1 ] && echo "Your Kiali configuration looks vulnerable"

The script output will be similar to this:

Your Kiali version found: 1.14.0
Your Kiali version is vulnerable
Your Kiali configuration looks vulnerable

Mitigation

  • Update to Kiali 1.15.1 or later.

Alternatively, if you cannot update to version 1.15.1, mitigation is possible by setting a secure signing key when deploying Kiali. If you installed via Kiali operator, you could use the following bash script:

SIGN_KEY=$(chars=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890; for i in {1..20}; do echo -n "${chars:RANDOM%${#chars}:1}"; done; echo)
kubectl get kiali -n $(kubectl get kiali --all-namespaces --no-headers -o custom-columns=NS:.metadata.namespace) -o yaml | sed "s/spec:/spec:\n    login_token:\n      signing_key: $SIGN_KEY/" | kubectl apply -f -

If you installed via Istio helm charts or istioctl command, you could use the following bash script:

KIALI_INSTALL_NAMESPACE=istio-system
SIGN_KEY=$(chars=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890; for i in {1..20}; do echo -n "${chars:RANDOM%${#chars}:1}"; done; echo)
kubectl get cm kiali -n $KIALI_INSTALL_NAMESPACE -o yaml | sed "s/server:/login_token:\\n      signing_key: $SIGN_KEY\\n    server:/" | kubectl apply -f -
kubectl delete pod -l app=kiali -n $KIALI_INSTALL_NAMESPACE