Informe: OKD CVE-2026-10840 / CVE-2026-10840 / CVE-2026-1784

1. CVE-2026-10840 (OpenShift Pipelines / Tekton) — El fallo está en el tekton-scheduler-rolebinding, que otorga al grupo system:authenticated acceso de escritura a recursos de Kueue y cert-manager. Este defecto vive en cómo el operador productizado de Red Hat configura el RBAC. En OKD normalmente instalarías el operador Tekton/Pipelines de la comunidad, no el openshift-pipelines-operator-rh. Si tu OKD usa el operador upstream con manifiestos distintos, podrías no tener exactamente ese ClusterRoleBinding

Verificacion

oc get clusterrolebinding tekton-scheduler-rolebinding -o yaml
  • Sin resultado

Pipelines (CVE-2026-10840) — descartado ✅

El tekton-scheduler-rolebinding no existe en tu clúster. Ese ClusterRoleBinding es precisamente el origen del fallo crítico (9.6), así que ese vector específico no te aplica. Tu OKD no tiene el RBAC defectuoso del operador productizado de Red Hat.

CVE-2026-10843

2. CVE-2026-10843 (Cloud Credential Operator en modo Mint sobre AWS) — Aquí hay que tener más cuidado. El Cloud Credential Operator es literalmente el mismo repositorio openshift/cloud-credential-operator que usan tanto OpenShift como OKD, y el modo Mint existe igual en OKD: la documentación de OKD 4 confirma que el CCO puede operar en modo Mint, Passthrough o Manual. Si el defecto está en el código core del CCO, un clúster OKD corriendo CCO en modo Mint sobre AWS sí podría estar expuesto al mismo fallo subyacente, aunque el CVE no lo nombre. OKD Documentation

Verificacion

oc get cloudcredentials cluster -o=jsonpath={.spec.credentialsMode}
oc get secret aws-creds -n kube-system -o jsonpath --template '{ .metadata.annotations }'

CCO modo Mint (CVE-2026-10843) — descartado ✅

El secret aws-creds en kube-system no e

xiste (NotFound). Ese secret es donde el CCO guarda las credenciales root de AWS cuando opera en modo Mint o Passthrough. Su ausencia indica que tu clúster no está usando el modo Mint — lo más probable es que esté en modo Manual/STS (con AWS IAM Roles for Service Accounts, donde no se almacenan llaves de larga duración), que es justamente el modo que queda fuera del escenario de este CVE.

CVE-2026-1784

CVE-2026-1784 — este sí es relevante para OKD ⚠️

A diferencia de los anteriores, este no vive en un operador opcional ni en un modo de credenciales que puedas no estar usando. Está en el router/ingress controller, que es un componente core que OKD comparte directamente con OpenShift.

El detalle del fallo: la vulnerabilidad surge del recurso Route de OpenShift, que facilita el acceso a los pods vía HAProxy en un subdominio, y las verificaciones insuficientes sobre spec.path en los documentos Route permiten a un atacante inyectar configuraciones maliciosas, lo que deriva en ejecución remota de código. Tiene una puntuación CVSS de 8.8, clasificada como severidad alta. BitNinjaBitNinja

Por qué importa para OKD: el código afectado está en el repositorio openshift/router, que contiene el router HAProxy de referencia. Y ese repositorio es explícito en que estas imágenes son gestionadas por el cluster-ingress-operator en clústeres OpenShift 4.0+, y el router de OpenShift puede ejecutarse incluso contra un clúster Kubernetes vanilla. En otras palabras: OKD usa el mismo router HAProxy y el mismo recurso Route que OpenShift, construidos desde el mismo código fuente upstream. Esto no es empaquetado exclusivo de Red Hat como los CVE anteriores — es infraestructura compartida que tu OKD casi con seguridad tiene desplegada por defecto. GitHub

Cómo verificarlo en tu clúster

A diferencia de los otros dos, aquí no hay un «no existe el recurso» que te saque del problema, porque el router sí existe. Lo que tenés que mirar es versión y superficie de exposición:

# 1. Versión de OKD (para cruzar con el fix upstream)
oc get clusterversion

# 2. Imagen del router que estás corriendo
oc -n openshift-ingress get deployment router-default \
  -o jsonpath='{.spec.template.spec.containers[0].image}'; echo

# 3. Pods del ingress
oc -n openshift-ingress get pods

Y lo más importante desde el punto de vista de riesgo real — quién puede crear o modificar objetos Route, ya que el ataque requiere inyectar vía spec.path:

  • Resultados
cgi@okd-provisioner-nodo01:~$ oc get clusterversion
NAME      VERSION                 AVAILABLE   PROGRESSING   SINCE   STATUS
version   4.21.0-okd-scos.ec.13   True        False         188d    Cluster version is 4.21.0-okd-scos.ec.13
cgi@okd-provisioner-nodo01:~$ oc -n openshift-ingress get deployment router-default \
  -o jsonpath='{.spec.template.spec.containers[0].image}'; echo
quay.io/okd/scos-content@sha256:15f7c73f9dc18306517efbe262185db61897fe61677d8e3d20b9944217d6c915
cgi@okd-provisioner-nodo01:~$ oc -n openshift-ingress get pods
NAME                              READY   STATUS    RESTARTS   AGE
router-default-57f846f57c-5l2p5   1/1     Running   0          32d
router-default-57f846f57c-b2bcf   1/1     Running   0          68d
router-default-57f846f57c-lb9bl   1/1     Running   0          56d
cgi@okd-provisioner-nodo01:~$ oc adm policy who-can create routes --all-namespaces
resourceaccessreviewresponse.authorization.openshift.io/<unknown> 

Namespace: <all>
Verb:      create
Resource:  routes.route.openshift.io

Users:  system:admin
        system:serviceaccount:kubevirt-hyperconverged:cdi-operator
        system:serviceaccount:kubevirt-hyperconverged:hyperconverged-cluster-operator
        system:serviceaccount:kubevirt-hyperconverged:kubevirt-operator
        system:serviceaccount:openshift-apiserver-operator:openshift-apiserver-operator
        system:serviceaccount:openshift-apiserver:openshift-apiserver-sa
        system:serviceaccount:openshift-authentication-operator:authentication-operator
        system:serviceaccount:openshift-authentication:oauth-openshift
        system:serviceaccount:openshift-cluster-storage-operator:cluster-storage-operator
        system:serviceaccount:openshift-cluster-version:default
        system:serviceaccount:openshift-config-operator:openshift-config-operator
        system:serviceaccount:openshift-controller-manager-operator:openshift-controller-manager-operator
        system:serviceaccount:openshift-etcd-operator:etcd-operator
        system:serviceaccount:openshift-etcd:installer-sa
        system:serviceaccount:openshift-image-registry:cluster-image-registry-operator
        system:serviceaccount:openshift-infra:ingress-to-route-controller
        system:serviceaccount:openshift-infra:template-instance-controller
        system:serviceaccount:openshift-infra:template-instance-finalizer-controller
        system:serviceaccount:openshift-ingress-operator:ingress-operator
        system:serviceaccount:openshift-kube-apiserver-operator:kube-apiserver-operator
        system:serviceaccount:openshift-kube-apiserver:installer-sa
        system:serviceaccount:openshift-kube-apiserver:localhost-recovery-client
        system:serviceaccount:openshift-kube-controller-manager-operator:kube-controller-manager-operator
        system:serviceaccount:openshift-kube-controller-manager:installer-sa
        system:serviceaccount:openshift-kube-controller-manager:localhost-recovery-client
        system:serviceaccount:openshift-kube-scheduler-operator:openshift-kube-scheduler-operator
        system:serviceaccount:openshift-kube-scheduler:installer-sa
        system:serviceaccount:openshift-kube-scheduler:localhost-recovery-client
        system:serviceaccount:openshift-kube-storage-version-migrator-operator:kube-storage-version-migrator-operator
        system:serviceaccount:openshift-kube-storage-version-migrator:kube-storage-version-migrator-sa
        system:serviceaccount:openshift-machine-config-operator:machine-config-operator
        system:serviceaccount:openshift-network-operator:cluster-network-operator
        system:serviceaccount:openshift-oauth-apiserver:oauth-apiserver-sa
        system:serviceaccount:openshift-operator-lifecycle-manager:olm-operator-serviceaccount
        system:serviceaccount:openshift-operators:argocd-operator-controller-manager
        system:serviceaccount:openshift-service-ca-operator:service-ca-operator
        system:serviceaccount:prueba-vale:argocd-argocd-application-controller
Groups: system:cluster-admins
        system:masters

cgi@okd-provisioner-nodo01:~$ oc get clusterrolebindings -o json | \
  grep -i route
                "name": "openshift-ingress-router",
                "name": "openshift-ingress-router"
                    "name": "router",
                "name": "router-monitoring",
                "name": "router-monitoring"
                "name": "system:controller:route-controller",
                "name": "system:controller:route-controller"
                    "name": "route-controller",
                "name": "system:openshift:openshift-controller-manager:ingress-to-route-controller",
                "name": "system:openshift:openshift-controller-manager:ingress-to-route-controller"
                    "name": "ingress-to-route-controller",
                "name": "system:openshift:openshift-route-controller-manager",
                "name": "system:openshift:openshift-route-controller-manager"
                    "name": "route-controller-manager-sa",
                    "namespace": "openshift-route-controller-manager"
                "name": "system:openshift:tokenreview-openshift-route-controller-manager",
                "name": "system:openshift:tokenreview-openshift-route-controller-manager"
                    "name": "route-controller-manager-sa",
                    "namespace": "openshift-route-controller-manager"

Análisis de versión: muy probablemente vulnerable

Tu clúster corre 4.21.0-okd-scos.ec.13. El ec.13 indica un engineering candidate (build de desarrollo / pre-release), y lo más importante: el clusterversion muestra SINCE 188d — llevás 188 días en esa misma versión. Además, los pods del router tienen entre 32 y 68 días sin reiniciarse, lo que confirma que no han recibido una imagen nueva recientemente.

El problema: el fix de CVE-2026-1784 es de hace pocos días. En el ecosistema OpenShift apareció en z-streams muy recientes — por ejemplo, OpenShift Container Platform 4.19.33 incluye una actualización de seguridad que aborda CVE-2026-1784 junto con otros CVE, y se recomienda a los usuarios de 4.19 actualizar a esta versión, y ese aviso es de hace apenas unos días. Un build de OKD de hace ~188 días (aproximadamente diciembre 2025) casi con certeza precede al parche. OffSeq Threat Radar

Conclusión sobre versión: tu router HAProxy está corriendo código anterior al fix. Este vector está, con alta probabilidad, presente en tu clúster.

Análisis de superficie de ataque: acá está la buena noticia

Quién puede crear Routes a nivel de clúster está acotado a componentes de sistema confiables: system:admin, los grupos system:cluster-admins y system:masters, y un montón de serviceaccount de operadores (kubevirt, apiserver, authentication, etc.). No aparece system:authenticated ni un rol genérico que dé a cualquier usuario autenticado la capacidad de crear Routes en todo el clúster. Eso reduce mucho el riesgo práctico.

Pero hay dos matices que sí debés revisar:

  1. ArgoCD / GitOps. Veo dos service accounts de Argo con permiso de crear Routes:
  • system:serviceaccount:openshift-operators:argocd-operator-controller-manager
  • system:serviceaccount:prueba-vale:argocd-argocd-application-controller

Esto es un vector real: si por esos ArgoCD pasan manifiestos desde repositorios Git que no controlás del todo, un Route con un spec.path malicioso podría llegar al router. El riesgo depende de quién puede hacer commit a los repos que Argo sincroniza. El namespace prueba-vale («prueba») sugiere que ahí hay actividad de testing — vale la pena auditar qué despliega ese Argo.

  1. Permisos a nivel de proyecto (no visibles aquí). El comando who-can –all-namespaces muestra principalmente bindings a nivel de clúster. En OpenShift/OKD, los roles admin y edit de proyecto incluyen crear Routes, pero esos permisos namespace-scoped no siempre aparecen en esta consulta. Si das proyectos con edit/admin a usuarios poco confiables, ellos podrían crear Routes en sus propios namespaces y no los verías en esta lista. Para confirmarlo:
# Revisá RoleBindings namespace-scoped que otorguen edit/admin a usuarios reales
oc get rolebindings --all-namespaces -o json | \
  grep -iE '"name": "(admin|edit)"' -A5

# Y mirá si hay usuarios/grupos no-sistema con esos roles
oc get rolebindings --all-namespaces \
  -o custom-columns=NS:.metadata.namespace,NAME:.metadata.name,ROLE:.roleRef.name | \
  grep -iE 'admin|edit'
  • Resultados
cgi@okd-provisioner-nodo01:~$ oc get rolebindings --all-namespaces -o json | \
  grep -iE '"name": "(admin|edit)"' -A5
                "name": "admin",
                "namespace": "allam",
                "resourceVersion": "10592571",
                "uid": "68cda6f2-e5da-4330-a5a5-86d765248790"
            },
            "roleRef": {
--
                "name": "admin"
            },
            "subjects": [
                {
                    "apiGroup": "rbac.authorization.k8s.io",
                    "kind": "User",
--
                "name": "admin",
                "namespace": "allam2",
                "resourceVersion": "10595191",
                "uid": "b3553937-e5be-457f-9ce1-9a931ba241ff"
            },
            "roleRef": {
--
                "name": "admin"
            },
            "subjects": [
                {
                    "apiGroup": "rbac.authorization.k8s.io",
                    "kind": "User",
--
                "name": "admin",
                "namespace": "cluster-maintenance",
                "resourceVersion": "109616193",
                "uid": "e2758bdc-559a-42c5-8156-e31ff5148a99"
            },
            "roleRef": {
--
                "name": "admin"
            },
            "subjects": [
                {
                    "apiGroup": "rbac.authorization.k8s.io",
                    "kind": "User",
--
                "name": "edit",
                "namespace": "cluster-maintenance",
                "resourceVersion": "109697790",
                "uid": "7bc98324-edc1-4253-808c-1c46d20adea9"
            },
            "roleRef": {
--
                "name": "edit"
            },
            "subjects": [
                {
                    "kind": "ServiceAccount",
                    "name": "image-pruner",
--
                "name": "admin",
                "namespace": "correo",
                "resourceVersion": "97625335",
                "uid": "8f5ceb2c-4c4a-49fa-aa50-c2217423c29d"
            },
            "roleRef": {
--
                "name": "admin"
            },
            "subjects": [
                {
                    "apiGroup": "rbac.authorization.k8s.io",
                    "kind": "User",
--
                "name": "admin",
                "namespace": "desarrollo-vm",
                "resourceVersion": "6356644",
                "uid": "ed686463-e291-46a7-819b-98bd57eb3506"
            },
            "roleRef": {
--
                "name": "admin"
            },
            "subjects": [
                {
                    "apiGroup": "rbac.authorization.k8s.io",
                    "kind": "User",
--
                "name": "admin",
                "namespace": "desarrollo",
                "resourceVersion": "27969476",
                "uid": "e5a447de-2eba-4f2d-8300-d9e183cfc027"
            },
            "roleRef": {
--
                "name": "admin"
            },
            "subjects": [
                {
                    "apiGroup": "rbac.authorization.k8s.io",
                    "kind": "User",
--
                "name": "admin",
                "namespace": "develop",
                "resourceVersion": "95905051",
                "uid": "c225254f-ce12-4f16-80db-611980883c92"
            },
            "roleRef": {
--
                "name": "admin"
            },
            "subjects": [
                {
                    "apiGroup": "rbac.authorization.k8s.io",
                    "kind": "User",
--
                "name": "admin",
                "namespace": "ever",
                "resourceVersion": "10597830",
                "uid": "42c3c31e-269b-477d-8b10-e8129aebe6c7"
            },
            "roleRef": {
--
                "name": "admin"
            },
            "subjects": [
                {
                    "apiGroup": "rbac.authorization.k8s.io",
                    "kind": "User",
--
                "name": "admin"
            },
            "subjects": [
                {
                    "kind": "ServiceAccount",
                    "name": "argocd-application-controller",
--
                "name": "admin",
                "namespace": "explorador-alfresco",
                "resourceVersion": "5661498",
                "uid": "4ac5ee46-e34f-4d41-b102-6187995a4d72"
            },
            "roleRef": {
--
                "name": "admin"
            },
            "subjects": [
                {
                    "apiGroup": "rbac.authorization.k8s.io",
                    "kind": "User",
--
                "name": "admin",
                "namespace": "infra",
                "resourceVersion": "20767514",
                "uid": "6a67422f-6400-4adf-a473-250e1059c0bc"
            },
            "roleRef": {
--
                "name": "admin"
            },
            "subjects": [
                {
                    "apiGroup": "rbac.authorization.k8s.io",
                    "kind": "User",
--
                "name": "admin"
            },
            "subjects": [
                {
                    "kind": "ServiceAccount",
                    "name": "cluster-cloud-controller-manager",
--
                "name": "edit"
            },
            "subjects": [
                {
                    "kind": "ServiceAccount",
                    "name": "cluster-samples-operator",
--
                "name": "admin",
                "namespace": "production",
                "resourceVersion": "121265267",
                "uid": "d8d4bf2d-885c-496c-bfa3-400f9d300c69"
            },
            "roleRef": {
--
                "name": "admin"
            },
            "subjects": [
                {
                    "apiGroup": "rbac.authorization.k8s.io",
                    "kind": "User",
--
                "name": "admin",
                "namespace": "proyecto-base",
                "resourceVersion": "11212278",
                "uid": "46ec4e3e-558f-4e9a-881b-72eac28ab239"
            },
            "roleRef": {
--
                "name": "admin"
            },
            "subjects": [
                {
                    "apiGroup": "rbac.authorization.k8s.io",
                    "kind": "User",
--
                "name": "admin",
                "namespace": "prueba-vale",
                "resourceVersion": "11313381",
                "uid": "b8c58207-8790-4253-bf30-4ff760336981"
            },
            "roleRef": {
--
                "name": "admin"
            },
            "subjects": [
                {
                    "apiGroup": "rbac.authorization.k8s.io",
                    "kind": "User",
--
                "name": "admin",
                "namespace": "staging",
                "resourceVersion": "96052752",
                "uid": "e8bc331a-fbba-4adb-a921-c3d19df9b065"
            },
            "roleRef": {
--
                "name": "admin"
            },
            "subjects": [
                {
                    "apiGroup": "rbac.authorization.k8s.io",
                    "kind": "User",
--
                "name": "admin",
                "namespace": "test-2",
                "resourceVersion": "29752859",
                "uid": "2faac485-ce2f-412a-b0ec-cbfc5e56d18b"
            },
            "roleRef": {
--
                "name": "admin"
            },
            "subjects": [
                {
                    "apiGroup": "rbac.authorization.k8s.io",
                    "kind": "User",
--
                "name": "admin",
                "namespace": "una-microservice-infra",
                "resourceVersion": "27010464",
                "uid": "84ec0c45-9c0e-443e-ad89-59e1f23bd79b"
            },
            "roleRef": {
--
                "name": "admin"
            },
            "subjects": [
                {
                    "apiGroup": "rbac.authorization.k8s.io",
                    "kind": "User",
cgi@okd-provisioner-nodo01:~$ oc get rolebindings --all-namespaces \
  -o custom-columns=NS:.metadata.namespace,NAME:.metadata.name,ROLE:.roleRef.name | \
  grep -iE 'admin|edit'
allam                                              admin                                                                admin
allam2                                             admin                                                                admin
cluster-maintenance                                admin                                                                admin
cluster-maintenance                                edit                                                                 edit
correo                                             admin                                                                admin
desarrollo-vm                                      admin                                                                admin
desarrollo                                         admin                                                                admin
develop                                            admin                                                                admin
ever                                               admin                                                                admin
ever                                               admin-0                                                              admin
explorador-alfresco                                admin                                                                admin
infra                                              admin                                                                admin
openshift-cloud-controller-manager                 cluster-cloud-controller-manager                                     admin
openshift-console-user-settings                    console-user-settings-admin                                          console-user-settings-admin
openshift-console-user-settings                    user-settings-kubeadmin-rolebinding                                  user-settings-kubeadmin-role
openshift-monitoring                               alertmanager-prometheusk8s                                           monitoring-alertmanager-edit
openshift-monitoring                               insights-operator-alertmanager                                       monitoring-alertmanager-edit
openshift                                          cluster-samples-operator-openshift-edit                              edit
production                                         admin                                                                admin
proyecto-base                                      admin                                                                admin
prueba-vale                                        admin                                                                admin
staging                                            admin                                                                admin
test-2                                             admin                                                                admin
una-microservice-infra                             admin                                                                admin

  • Verificamos
oc get routes --all-namespaces -o json | \
     jq -r '.items[] | [.metadata.namespace, .metadata.name, .spec.path] | @tsv'
  • Resultado
allam	admin	User/kube:admin
allam2	admin	User/allam@una.ac.cr
cluster-maintenance	admin	User/kube:admin
cluster-maintenance	edit	ServiceAccount/image-pruner
correo	admin	User/system:admin
desarrollo-vm	admin	User/kube:admin
desarrollo	admin	User/kube:admin
develop	admin	User/kube:admin
ever	admin	User/ever.vega.suazo@una.ac.cr
ever	admin	ServiceAccount/argocd-application-controller
explorador-alfresco	admin	User/kube:admin
infra	admin	User/kube:admin
openshift-cloud-controller-manager	admin	ServiceAccount/cluster-cloud-controller-manager
openshift	edit	ServiceAccount/cluster-samples-operator
production	admin	User/kube:admin
proyecto-base	admin	User/valeria.herrera.rodriguez@una.ac.cr
prueba-vale	admin	User/kube:admin
staging	admin	User/kube:admin
test-2	admin	User/kube:admin
una-microservice-infra	admin	User/kube:admin

Veredicto sobre el riesgo práctico

Son tres usuarios humanos (cuentas @una.ac.cr, claramente personas reales de tu organización) que, por tener admin en sus proyectos, pueden crear Routes y por tanto alcanzar el vector de CVE-2026-1784. Esto baja bastante respecto a mi alarma anterior — no son 16 usuarios arbitrarios, son 3 cuentas nominales identificables dentro de tu propia institución.

Cómo dimensionar el riesgo de forma realista:

  • No es un vector anónimo ni externo. Requiere una de esas tres credenciales válidas. Son personas de tu organización, no atacantes cualquiera de internet.
  • Pero sí es escalada de privilegios. Un project-admin es un rol intencionalmente limitado: no debería poder ejecutar código en los nodos de infraestructura. Este CVE rompe esa frontera — convierte «admin de mi proyecto» en «RCE en el router». El modelo de confianza importa: ¿confiás en esas tres personas a nivel de poder ejecutar código en tu plano de infraestructura? Si una de esas cuentas se compromete (phishing, credencial filtrada), el atacante hereda el vector.
  • El ArgoCD de ever es el punto que yo vigilaría con más atención, porque amplía la superficie de «una persona» a «cualquiera que pueda hacer merge en el repo Git que ese Argo sincroniza». Conviene confirmar qué repositorio alimenta ese argocd-application-controller y quién tiene acceso de escritura.

Confirmacion final

oc auth can-i create routes --as=ever.vega.suazo@una.ac.cr -n ever
oc auth can-i create routes --as=allam@una.ac.cr -n allam2
oc auth can-i create routes --as=valeria.herrera.rodriguez@una.ac.cr -n proyecto-base
  • Resultado
cgi@okd-provisioner-nodo01:~$ oc auth can-i create routes --as=ever.vega.suazo@una.ac.cr -n ever
yes
cgi@okd-provisioner-nodo01:~$ oc auth can-i create routes --as=allam@una.ac.cr -n allam2
yes
cgi@okd-provisioner-nodo01:~$ oc auth can-i create routes --as=valeria.herrera.rodriguez@una.ac.cr -n proyecto-base
yes

Recomendación final

  1. Parchá el router actualizando OKD cuando puedas — es el cierre de raíz del vector.
  2. Auditá el ArgoCD de ever — confirmá repo de origen y permisos de escritura.
  3. Revisá si esas tres personas necesitan admin o si edit sin gestión de Routes les alcanza (aunque ojo: edit también suele permitir Routes en OpenShift, así que verificá el rol exacto si querés restringir).
  4. Auditá Routes existentes en esos tres namespaces buscando spec.path anómalos.

Estado final, ya sin pendientes de verificación

El vector queda confirmado empíricamente:

  • ever.vega.suazo@una.ac.cr puede crear Routes en ever
  • allam@una.ac.cr puede crear Routes en allam2
  • valeria.herrera.rodriguez@una.ac.cr puede crear Routes en proyecto-base
  • Más el argocd-application-controller en ever (GitOps), que sigue pendiente de auditar en cuanto a repo de origen.