{"id":25062,"date":"2026-06-15T16:59:12","date_gmt":"2026-06-15T22:59:12","guid":{"rendered":"https:\/\/sada.services\/?p=25062"},"modified":"2026-06-15T16:59:12","modified_gmt":"2026-06-15T22:59:12","slug":"informe-okd-cve-2026-10840-cve-2026-10840-cve-2026-1784","status":"publish","type":"post","link":"https:\/\/sada.services\/?p=25062","title":{"rendered":"Informe: OKD CVE-2026-10840 \/ CVE-2026-10840 \/ CVE-2026-1784"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>1. CVE-2026-10840 (OpenShift Pipelines \/ Tekton)<\/strong> \u2014 El fallo est\u00e1 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\u00f3mo el <em>operador productizado de Red Hat<\/em> configura el RBAC. En OKD normalmente instalar\u00edas el operador Tekton\/Pipelines de la comunidad, no el openshift-pipelines-operator-rh. Si tu OKD usa el operador upstream con manifiestos distintos, podr\u00edas no tener exactamente ese ClusterRoleBinding<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Verificacion<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>oc get clusterrolebinding tekton-scheduler-rolebinding -o yaml<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sin resultado<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Pipelines (CVE-2026-10840) \u2014 descartado \u2705<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El tekton-scheduler-rolebinding <strong>no existe<\/strong> en tu cl\u00faster. Ese ClusterRoleBinding es precisamente el origen del fallo cr\u00edtico (9.6), as\u00ed que ese vector espec\u00edfico <strong>no te aplica<\/strong>. Tu OKD no tiene el RBAC defectuoso del operador productizado de Red Hat.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CVE-2026-10843<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. CVE-2026-10843 (Cloud Credential Operator en modo Mint sobre AWS)<\/strong> \u2014 Aqu\u00ed hay que tener <strong>m\u00e1s cuidado<\/strong>. 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\u00f3n de OKD 4 confirma que el CCO puede operar en modo Mint, Passthrough o Manual. Si el defecto est\u00e1 en el c\u00f3digo core del CCO, un cl\u00faster OKD corriendo CCO en modo Mint sobre AWS <strong>s\u00ed podr\u00eda estar expuesto al mismo fallo subyacente<\/strong>, aunque el CVE no lo nombre. <a href=\"https:\/\/docs.okd.io\/latest\/authentication\/managing_cloud_provider_credentials\/about-cloud-credential-operator.html\">OKD Documentation<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Verificacion<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>oc get cloudcredentials cluster -o=jsonpath={.spec.credentialsMode}\noc get secret aws-creds -n kube-system -o jsonpath --template '{ .metadata.annotations }'<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">CCO modo Mint (CVE-2026-10843) \u2014 descartado \u2705<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El secret aws-creds en kube-system <strong>no e<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>xiste<\/strong> (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\u00faster <strong>no est\u00e1 usando el modo Mint<\/strong> \u2014 lo m\u00e1s probable es que est\u00e9 en modo <strong>Manual\/STS<\/strong> (con AWS IAM Roles for Service Accounts, donde no se almacenan llaves de larga duraci\u00f3n), que es justamente el modo que queda fuera del escenario de este CVE.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CVE-2026-1784<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">CVE-2026-1784 \u2014 este s\u00ed es relevante para OKD \u26a0\ufe0f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A diferencia de los anteriores, este <strong>no<\/strong> vive en un operador opcional ni en un modo de credenciales que puedas no estar usando. Est\u00e1 en el <strong>router\/ingress controller<\/strong>, que es un componente core que OKD comparte directamente con OpenShift.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El detalle del fallo: la vulnerabilidad surge del recurso Route de OpenShift, que facilita el acceso a los pods v\u00eda 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\u00f3n remota de c\u00f3digo. Tiene una puntuaci\u00f3n CVSS de 8.8, clasificada como severidad alta. <a href=\"https:\/\/bitninja.com\/blog\/critical-cve-2026-1784-protect-your-servers-now\/\">BitNinjaBitNinja<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por qu\u00e9 importa para OKD: el c\u00f3digo afectado est\u00e1 en el repositorio openshift\/router, que contiene el router HAProxy de referencia. Y ese repositorio es expl\u00edcito en que estas im\u00e1genes son gestionadas por el cluster-ingress-operator en cl\u00fasteres OpenShift 4.0+, y el router de OpenShift puede ejecutarse incluso contra un cl\u00faster Kubernetes vanilla. En otras palabras: <strong>OKD usa el mismo router HAProxy y el mismo recurso Route que OpenShift, construidos desde el mismo c\u00f3digo fuente upstream.<\/strong> Esto no es empaquetado exclusivo de Red Hat como los CVE anteriores \u2014 es infraestructura compartida que tu OKD casi con seguridad tiene desplegada por defecto. <a href=\"https:\/\/github.com\/openshift\/router\">GitHub<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00f3mo verificarlo en tu cl\u00faster<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A diferencia de los otros dos, aqu\u00ed no hay un \u00abno existe el recurso\u00bb que te saque del problema, porque el router s\u00ed existe. Lo que ten\u00e9s que mirar es <strong>versi\u00f3n<\/strong> y <strong>superficie de exposici\u00f3n<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># 1. Versi\u00f3n de OKD (para cruzar con el fix upstream)\noc get clusterversion\n\n# 2. Imagen del router que est\u00e1s corriendo\noc -n openshift-ingress get deployment router-default \\\n  -o jsonpath='{.spec.template.spec.containers&#91;0].image}'; echo\n\n# 3. Pods del ingress\noc -n openshift-ingress get pods<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Y lo m\u00e1s importante desde el punto de vista de riesgo real \u2014 <strong>qui\u00e9n puede crear o modificar objetos Route<\/strong>, ya que el ataque requiere inyectar v\u00eda spec.path:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Resultados<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>cgi@okd-provisioner-nodo01:~$ oc get clusterversion\nNAME      VERSION                 AVAILABLE   PROGRESSING   SINCE   STATUS\nversion   4.21.0-okd-scos.ec.13   True        False         188d    Cluster version is 4.21.0-okd-scos.ec.13\ncgi@okd-provisioner-nodo01:~$ oc -n openshift-ingress get deployment router-default \\\n  -o jsonpath='{.spec.template.spec.containers&#91;0].image}'; echo\nquay.io\/okd\/scos-content@sha256:15f7c73f9dc18306517efbe262185db61897fe61677d8e3d20b9944217d6c915\ncgi@okd-provisioner-nodo01:~$ oc -n openshift-ingress get pods\nNAME                              READY   STATUS    RESTARTS   AGE\nrouter-default-57f846f57c-5l2p5   1\/1     Running   0          32d\nrouter-default-57f846f57c-b2bcf   1\/1     Running   0          68d\nrouter-default-57f846f57c-lb9bl   1\/1     Running   0          56d\ncgi@okd-provisioner-nodo01:~$ oc adm policy who-can create routes --all-namespaces\nresourceaccessreviewresponse.authorization.openshift.io\/&lt;unknown&gt; \n\nNamespace: &lt;all&gt;\nVerb:      create\nResource:  routes.route.openshift.io\n\nUsers:  system:admin\n        system:serviceaccount:kubevirt-hyperconverged:cdi-operator\n        system:serviceaccount:kubevirt-hyperconverged:hyperconverged-cluster-operator\n        system:serviceaccount:kubevirt-hyperconverged:kubevirt-operator\n        system:serviceaccount:openshift-apiserver-operator:openshift-apiserver-operator\n        system:serviceaccount:openshift-apiserver:openshift-apiserver-sa\n        system:serviceaccount:openshift-authentication-operator:authentication-operator\n        system:serviceaccount:openshift-authentication:oauth-openshift\n        system:serviceaccount:openshift-cluster-storage-operator:cluster-storage-operator\n        system:serviceaccount:openshift-cluster-version:default\n        system:serviceaccount:openshift-config-operator:openshift-config-operator\n        system:serviceaccount:openshift-controller-manager-operator:openshift-controller-manager-operator\n        system:serviceaccount:openshift-etcd-operator:etcd-operator\n        system:serviceaccount:openshift-etcd:installer-sa\n        system:serviceaccount:openshift-image-registry:cluster-image-registry-operator\n        system:serviceaccount:openshift-infra:ingress-to-route-controller\n        system:serviceaccount:openshift-infra:template-instance-controller\n        system:serviceaccount:openshift-infra:template-instance-finalizer-controller\n        system:serviceaccount:openshift-ingress-operator:ingress-operator\n        system:serviceaccount:openshift-kube-apiserver-operator:kube-apiserver-operator\n        system:serviceaccount:openshift-kube-apiserver:installer-sa\n        system:serviceaccount:openshift-kube-apiserver:localhost-recovery-client\n        system:serviceaccount:openshift-kube-controller-manager-operator:kube-controller-manager-operator\n        system:serviceaccount:openshift-kube-controller-manager:installer-sa\n        system:serviceaccount:openshift-kube-controller-manager:localhost-recovery-client\n        system:serviceaccount:openshift-kube-scheduler-operator:openshift-kube-scheduler-operator\n        system:serviceaccount:openshift-kube-scheduler:installer-sa\n        system:serviceaccount:openshift-kube-scheduler:localhost-recovery-client\n        system:serviceaccount:openshift-kube-storage-version-migrator-operator:kube-storage-version-migrator-operator\n        system:serviceaccount:openshift-kube-storage-version-migrator:kube-storage-version-migrator-sa\n        system:serviceaccount:openshift-machine-config-operator:machine-config-operator\n        system:serviceaccount:openshift-network-operator:cluster-network-operator\n        system:serviceaccount:openshift-oauth-apiserver:oauth-apiserver-sa\n        system:serviceaccount:openshift-operator-lifecycle-manager:olm-operator-serviceaccount\n        system:serviceaccount:openshift-operators:argocd-operator-controller-manager\n        system:serviceaccount:openshift-service-ca-operator:service-ca-operator\n        system:serviceaccount:prueba-vale:argocd-argocd-application-controller\nGroups: system:cluster-admins\n        system:masters\n\ncgi@okd-provisioner-nodo01:~$ oc get clusterrolebindings -o json | \\\n  grep -i route\n                \"name\": \"openshift-ingress-router\",\n                \"name\": \"openshift-ingress-router\"\n                    \"name\": \"router\",\n                \"name\": \"router-monitoring\",\n                \"name\": \"router-monitoring\"\n                \"name\": \"system:controller:route-controller\",\n                \"name\": \"system:controller:route-controller\"\n                    \"name\": \"route-controller\",\n                \"name\": \"system:openshift:openshift-controller-manager:ingress-to-route-controller\",\n                \"name\": \"system:openshift:openshift-controller-manager:ingress-to-route-controller\"\n                    \"name\": \"ingress-to-route-controller\",\n                \"name\": \"system:openshift:openshift-route-controller-manager\",\n                \"name\": \"system:openshift:openshift-route-controller-manager\"\n                    \"name\": \"route-controller-manager-sa\",\n                    \"namespace\": \"openshift-route-controller-manager\"\n                \"name\": \"system:openshift:tokenreview-openshift-route-controller-manager\",\n                \"name\": \"system:openshift:tokenreview-openshift-route-controller-manager\"\n                    \"name\": \"route-controller-manager-sa\",\n                    \"namespace\": \"openshift-route-controller-manager\"\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">An\u00e1lisis de versi\u00f3n: muy probablemente vulnerable<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tu cl\u00faster corre 4.21.0-okd-scos.ec.13. El ec.13 indica un <strong>engineering candidate<\/strong> (build de desarrollo \/ pre-release), y lo m\u00e1s importante: el clusterversion muestra SINCE 188d \u2014 llev\u00e1s <strong>188 d\u00edas en esa misma versi\u00f3n<\/strong>. Adem\u00e1s, los pods del router tienen entre 32 y 68 d\u00edas sin reiniciarse, lo que confirma que <strong>no han recibido una imagen nueva recientemente<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El problema: el fix de CVE-2026-1784 es de hace pocos d\u00edas. En el ecosistema OpenShift apareci\u00f3 en z-streams muy recientes \u2014 por ejemplo, OpenShift Container Platform 4.19.33 incluye una actualizaci\u00f3n de seguridad que aborda CVE-2026-1784 junto con otros CVE, y se recomienda a los usuarios de 4.19 actualizar a esta versi\u00f3n, y ese aviso es de hace apenas unos d\u00edas. Un build de OKD de hace ~188 d\u00edas (aproximadamente diciembre 2025) <strong>casi con certeza precede al parche<\/strong>. <a href=\"https:\/\/radar.offseq.com\/threat\/red-hat-security-advisory-openshift-container-plat-c916a0d8\">OffSeq Threat Radar<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Conclusi\u00f3n sobre versi\u00f3n: tu router HAProxy est\u00e1 corriendo c\u00f3digo <strong>anterior al fix<\/strong>. Este vector est\u00e1, con alta probabilidad, presente en tu cl\u00faster.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">An\u00e1lisis de superficie de ataque: ac\u00e1 est\u00e1 la buena noticia<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Qui\u00e9n puede crear Routes a nivel de cl\u00faster est\u00e1 <strong>acotado a componentes de sistema confiables<\/strong>: system:admin, los grupos system:cluster-admins y system:masters, y un mont\u00f3n de serviceaccount de operadores (kubevirt, apiserver, authentication, etc.). <strong>No aparece <\/strong>system:authenticated ni un rol gen\u00e9rico que d\u00e9 a cualquier usuario autenticado la capacidad de crear Routes en todo el cl\u00faster. Eso reduce mucho el riesgo pr\u00e1ctico.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pero hay dos matices que <strong>s\u00ed deb\u00e9s revisar<\/strong>:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>ArgoCD \/ GitOps.<\/strong> Veo dos service accounts de Argo con permiso de crear Routes:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>system:serviceaccount:openshift-operators:argocd-operator-controller-manager<\/li>\n\n\n\n<li>system:serviceaccount:prueba-vale:argocd-argocd-application-controller<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Esto es un vector real: si por esos ArgoCD pasan manifiestos desde repositorios Git que no control\u00e1s del todo, un Route con un spec.path malicioso podr\u00eda llegar al router. El riesgo depende de qui\u00e9n puede hacer commit a los repos que Argo sincroniza. El namespace prueba-vale (\u00abprueba\u00bb) sugiere que ah\u00ed hay actividad de testing \u2014 vale la pena auditar qu\u00e9 despliega ese Argo.<\/p>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Permisos a nivel de proyecto (no visibles aqu\u00ed).<\/strong> El comando who-can &#8211;all-namespaces muestra principalmente bindings a nivel de cl\u00faster. En OpenShift\/OKD, los roles admin y edit de proyecto <strong>incluyen crear Routes<\/strong>, pero esos permisos namespace-scoped no siempre aparecen en esta consulta. Si das proyectos con edit\/admin a usuarios poco confiables, ellos podr\u00edan crear Routes en sus propios namespaces y no los ver\u00edas en esta lista. Para confirmarlo:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code># Revis\u00e1 RoleBindings namespace-scoped que otorguen edit\/admin a usuarios reales\noc get rolebindings --all-namespaces -o json | \\\n  grep -iE '\"name\": \"(admin|edit)\"' -A5\n\n# Y mir\u00e1 si hay usuarios\/grupos no-sistema con esos roles\noc get rolebindings --all-namespaces \\\n  -o custom-columns=NS:.metadata.namespace,NAME:.metadata.name,ROLE:.roleRef.name | \\\n  grep -iE 'admin|edit'<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Resultados<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>cgi@okd-provisioner-nodo01:~$ oc get rolebindings --all-namespaces -o json | \\\n  grep -iE '\"name\": \"(admin|edit)\"' -A5\n                \"name\": \"admin\",\n                \"namespace\": \"allam\",\n                \"resourceVersion\": \"10592571\",\n                \"uid\": \"68cda6f2-e5da-4330-a5a5-86d765248790\"\n            },\n            \"roleRef\": {\n--\n                \"name\": \"admin\"\n            },\n            \"subjects\": &#91;\n                {\n                    \"apiGroup\": \"rbac.authorization.k8s.io\",\n                    \"kind\": \"User\",\n--\n                \"name\": \"admin\",\n                \"namespace\": \"allam2\",\n                \"resourceVersion\": \"10595191\",\n                \"uid\": \"b3553937-e5be-457f-9ce1-9a931ba241ff\"\n            },\n            \"roleRef\": {\n--\n                \"name\": \"admin\"\n            },\n            \"subjects\": &#91;\n                {\n                    \"apiGroup\": \"rbac.authorization.k8s.io\",\n                    \"kind\": \"User\",\n--\n                \"name\": \"admin\",\n                \"namespace\": \"cluster-maintenance\",\n                \"resourceVersion\": \"109616193\",\n                \"uid\": \"e2758bdc-559a-42c5-8156-e31ff5148a99\"\n            },\n            \"roleRef\": {\n--\n                \"name\": \"admin\"\n            },\n            \"subjects\": &#91;\n                {\n                    \"apiGroup\": \"rbac.authorization.k8s.io\",\n                    \"kind\": \"User\",\n--\n                \"name\": \"edit\",\n                \"namespace\": \"cluster-maintenance\",\n                \"resourceVersion\": \"109697790\",\n                \"uid\": \"7bc98324-edc1-4253-808c-1c46d20adea9\"\n            },\n            \"roleRef\": {\n--\n                \"name\": \"edit\"\n            },\n            \"subjects\": &#91;\n                {\n                    \"kind\": \"ServiceAccount\",\n                    \"name\": \"image-pruner\",\n--\n                \"name\": \"admin\",\n                \"namespace\": \"correo\",\n                \"resourceVersion\": \"97625335\",\n                \"uid\": \"8f5ceb2c-4c4a-49fa-aa50-c2217423c29d\"\n            },\n            \"roleRef\": {\n--\n                \"name\": \"admin\"\n            },\n            \"subjects\": &#91;\n                {\n                    \"apiGroup\": \"rbac.authorization.k8s.io\",\n                    \"kind\": \"User\",\n--\n                \"name\": \"admin\",\n                \"namespace\": \"desarrollo-vm\",\n                \"resourceVersion\": \"6356644\",\n                \"uid\": \"ed686463-e291-46a7-819b-98bd57eb3506\"\n            },\n            \"roleRef\": {\n--\n                \"name\": \"admin\"\n            },\n            \"subjects\": &#91;\n                {\n                    \"apiGroup\": \"rbac.authorization.k8s.io\",\n                    \"kind\": \"User\",\n--\n                \"name\": \"admin\",\n                \"namespace\": \"desarrollo\",\n                \"resourceVersion\": \"27969476\",\n                \"uid\": \"e5a447de-2eba-4f2d-8300-d9e183cfc027\"\n            },\n            \"roleRef\": {\n--\n                \"name\": \"admin\"\n            },\n            \"subjects\": &#91;\n                {\n                    \"apiGroup\": \"rbac.authorization.k8s.io\",\n                    \"kind\": \"User\",\n--\n                \"name\": \"admin\",\n                \"namespace\": \"develop\",\n                \"resourceVersion\": \"95905051\",\n                \"uid\": \"c225254f-ce12-4f16-80db-611980883c92\"\n            },\n            \"roleRef\": {\n--\n                \"name\": \"admin\"\n            },\n            \"subjects\": &#91;\n                {\n                    \"apiGroup\": \"rbac.authorization.k8s.io\",\n                    \"kind\": \"User\",\n--\n                \"name\": \"admin\",\n                \"namespace\": \"ever\",\n                \"resourceVersion\": \"10597830\",\n                \"uid\": \"42c3c31e-269b-477d-8b10-e8129aebe6c7\"\n            },\n            \"roleRef\": {\n--\n                \"name\": \"admin\"\n            },\n            \"subjects\": &#91;\n                {\n                    \"apiGroup\": \"rbac.authorization.k8s.io\",\n                    \"kind\": \"User\",\n--\n                \"name\": \"admin\"\n            },\n            \"subjects\": &#91;\n                {\n                    \"kind\": \"ServiceAccount\",\n                    \"name\": \"argocd-application-controller\",\n--\n                \"name\": \"admin\",\n                \"namespace\": \"explorador-alfresco\",\n                \"resourceVersion\": \"5661498\",\n                \"uid\": \"4ac5ee46-e34f-4d41-b102-6187995a4d72\"\n            },\n            \"roleRef\": {\n--\n                \"name\": \"admin\"\n            },\n            \"subjects\": &#91;\n                {\n                    \"apiGroup\": \"rbac.authorization.k8s.io\",\n                    \"kind\": \"User\",\n--\n                \"name\": \"admin\",\n                \"namespace\": \"infra\",\n                \"resourceVersion\": \"20767514\",\n                \"uid\": \"6a67422f-6400-4adf-a473-250e1059c0bc\"\n            },\n            \"roleRef\": {\n--\n                \"name\": \"admin\"\n            },\n            \"subjects\": &#91;\n                {\n                    \"apiGroup\": \"rbac.authorization.k8s.io\",\n                    \"kind\": \"User\",\n--\n                \"name\": \"admin\"\n            },\n            \"subjects\": &#91;\n                {\n                    \"kind\": \"ServiceAccount\",\n                    \"name\": \"cluster-cloud-controller-manager\",\n--\n                \"name\": \"edit\"\n            },\n            \"subjects\": &#91;\n                {\n                    \"kind\": \"ServiceAccount\",\n                    \"name\": \"cluster-samples-operator\",\n--\n                \"name\": \"admin\",\n                \"namespace\": \"production\",\n                \"resourceVersion\": \"121265267\",\n                \"uid\": \"d8d4bf2d-885c-496c-bfa3-400f9d300c69\"\n            },\n            \"roleRef\": {\n--\n                \"name\": \"admin\"\n            },\n            \"subjects\": &#91;\n                {\n                    \"apiGroup\": \"rbac.authorization.k8s.io\",\n                    \"kind\": \"User\",\n--\n                \"name\": \"admin\",\n                \"namespace\": \"proyecto-base\",\n                \"resourceVersion\": \"11212278\",\n                \"uid\": \"46ec4e3e-558f-4e9a-881b-72eac28ab239\"\n            },\n            \"roleRef\": {\n--\n                \"name\": \"admin\"\n            },\n            \"subjects\": &#91;\n                {\n                    \"apiGroup\": \"rbac.authorization.k8s.io\",\n                    \"kind\": \"User\",\n--\n                \"name\": \"admin\",\n                \"namespace\": \"prueba-vale\",\n                \"resourceVersion\": \"11313381\",\n                \"uid\": \"b8c58207-8790-4253-bf30-4ff760336981\"\n            },\n            \"roleRef\": {\n--\n                \"name\": \"admin\"\n            },\n            \"subjects\": &#91;\n                {\n                    \"apiGroup\": \"rbac.authorization.k8s.io\",\n                    \"kind\": \"User\",\n--\n                \"name\": \"admin\",\n                \"namespace\": \"staging\",\n                \"resourceVersion\": \"96052752\",\n                \"uid\": \"e8bc331a-fbba-4adb-a921-c3d19df9b065\"\n            },\n            \"roleRef\": {\n--\n                \"name\": \"admin\"\n            },\n            \"subjects\": &#91;\n                {\n                    \"apiGroup\": \"rbac.authorization.k8s.io\",\n                    \"kind\": \"User\",\n--\n                \"name\": \"admin\",\n                \"namespace\": \"test-2\",\n                \"resourceVersion\": \"29752859\",\n                \"uid\": \"2faac485-ce2f-412a-b0ec-cbfc5e56d18b\"\n            },\n            \"roleRef\": {\n--\n                \"name\": \"admin\"\n            },\n            \"subjects\": &#91;\n                {\n                    \"apiGroup\": \"rbac.authorization.k8s.io\",\n                    \"kind\": \"User\",\n--\n                \"name\": \"admin\",\n                \"namespace\": \"una-microservice-infra\",\n                \"resourceVersion\": \"27010464\",\n                \"uid\": \"84ec0c45-9c0e-443e-ad89-59e1f23bd79b\"\n            },\n            \"roleRef\": {\n--\n                \"name\": \"admin\"\n            },\n            \"subjects\": &#91;\n                {\n                    \"apiGroup\": \"rbac.authorization.k8s.io\",\n                    \"kind\": \"User\",\ncgi@okd-provisioner-nodo01:~$ oc get rolebindings --all-namespaces \\\n  -o custom-columns=NS:.metadata.namespace,NAME:.metadata.name,ROLE:.roleRef.name | \\\n  grep -iE 'admin|edit'\nallam                                              admin                                                                admin\nallam2                                             admin                                                                admin\ncluster-maintenance                                admin                                                                admin\ncluster-maintenance                                edit                                                                 edit\ncorreo                                             admin                                                                admin\ndesarrollo-vm                                      admin                                                                admin\ndesarrollo                                         admin                                                                admin\ndevelop                                            admin                                                                admin\never                                               admin                                                                admin\never                                               admin-0                                                              admin\nexplorador-alfresco                                admin                                                                admin\ninfra                                              admin                                                                admin\nopenshift-cloud-controller-manager                 cluster-cloud-controller-manager                                     admin\nopenshift-console-user-settings                    console-user-settings-admin                                          console-user-settings-admin\nopenshift-console-user-settings                    user-settings-kubeadmin-rolebinding                                  user-settings-kubeadmin-role\nopenshift-monitoring                               alertmanager-prometheusk8s                                           monitoring-alertmanager-edit\nopenshift-monitoring                               insights-operator-alertmanager                                       monitoring-alertmanager-edit\nopenshift                                          cluster-samples-operator-openshift-edit                              edit\nproduction                                         admin                                                                admin\nproyecto-base                                      admin                                                                admin\nprueba-vale                                        admin                                                                admin\nstaging                                            admin                                                                admin\ntest-2                                             admin                                                                admin\nuna-microservice-infra                             admin                                                                admin\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Verificamos<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>oc get routes --all-namespaces -o json | \\\n     jq -r '.items&#91;] | &#91;.metadata.namespace, .metadata.name, .spec.path] | @tsv'<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Resultado<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>allam\tadmin\tUser\/kube:admin\nallam2\tadmin\tUser\/allam@una.ac.cr\ncluster-maintenance\tadmin\tUser\/kube:admin\ncluster-maintenance\tedit\tServiceAccount\/image-pruner\ncorreo\tadmin\tUser\/system:admin\ndesarrollo-vm\tadmin\tUser\/kube:admin\ndesarrollo\tadmin\tUser\/kube:admin\ndevelop\tadmin\tUser\/kube:admin\never\tadmin\tUser\/ever.vega.suazo@una.ac.cr\never\tadmin\tServiceAccount\/argocd-application-controller\nexplorador-alfresco\tadmin\tUser\/kube:admin\ninfra\tadmin\tUser\/kube:admin\nopenshift-cloud-controller-manager\tadmin\tServiceAccount\/cluster-cloud-controller-manager\nopenshift\tedit\tServiceAccount\/cluster-samples-operator\nproduction\tadmin\tUser\/kube:admin\nproyecto-base\tadmin\tUser\/valeria.herrera.rodriguez@una.ac.cr\nprueba-vale\tadmin\tUser\/kube:admin\nstaging\tadmin\tUser\/kube:admin\ntest-2\tadmin\tUser\/kube:admin\nuna-microservice-infra\tadmin\tUser\/kube:admin\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Veredicto sobre el riesgo pr\u00e1ctico<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Son <strong>tres usuarios humanos<\/strong> (cuentas @una.ac.cr, claramente personas reales de tu organizaci\u00f3n) que, por tener admin en sus proyectos, <strong>pueden crear Routes<\/strong> y por tanto <strong>alcanzar el vector de CVE-2026-1784<\/strong>. Esto baja bastante respecto a mi alarma anterior \u2014 no son 16 usuarios arbitrarios, son 3 cuentas nominales identificables dentro de tu propia instituci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C\u00f3mo dimensionar el riesgo de forma realista:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>No es un vector an\u00f3nimo ni externo.<\/strong> Requiere una de esas tres credenciales v\u00e1lidas. Son personas de tu organizaci\u00f3n, no atacantes cualquiera de internet.<\/li>\n\n\n\n<li><strong>Pero s\u00ed es escalada de privilegios.<\/strong> Un project-admin es un rol intencionalmente limitado: no deber\u00eda poder ejecutar c\u00f3digo en los nodos de infraestructura. Este CVE rompe esa frontera \u2014 convierte \u00abadmin de mi proyecto\u00bb en \u00abRCE en el router\u00bb. El modelo de confianza importa: \u00bfconfi\u00e1s en esas tres personas a nivel de poder ejecutar c\u00f3digo en tu plano de infraestructura? Si una de esas cuentas se compromete (phishing, credencial filtrada), el atacante hereda el vector.<\/li>\n\n\n\n<li><strong>El ArgoCD de <\/strong>ever es el punto que yo vigilar\u00eda con m\u00e1s atenci\u00f3n, porque ampl\u00eda la superficie de \u00abuna persona\u00bb a \u00abcualquiera que pueda hacer merge en el repo Git que ese Argo sincroniza\u00bb. Conviene confirmar qu\u00e9 repositorio alimenta ese argocd-application-controller y qui\u00e9n tiene acceso de escritura.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Confirmacion final<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>oc auth can-i create routes --as=ever.vega.suazo@una.ac.cr -n ever\noc auth can-i create routes --as=allam@una.ac.cr -n allam2\noc auth can-i create routes --as=valeria.herrera.rodriguez@una.ac.cr -n proyecto-base<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Resultado<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>cgi@okd-provisioner-nodo01:~$ oc auth can-i create routes --as=ever.vega.suazo@una.ac.cr -n ever\nyes\ncgi@okd-provisioner-nodo01:~$ oc auth can-i create routes --as=allam@una.ac.cr -n allam2\nyes\ncgi@okd-provisioner-nodo01:~$ oc auth can-i create routes --as=valeria.herrera.rodriguez@una.ac.cr -n proyecto-base\nyes\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Recomendaci\u00f3n final<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Parch\u00e1 el router<\/strong> actualizando OKD cuando puedas \u2014 es el cierre de ra\u00edz del vector.<\/li>\n\n\n\n<li><strong>Audit\u00e1 el ArgoCD de <\/strong>ever \u2014 confirm\u00e1 repo de origen y permisos de escritura.<\/li>\n\n\n\n<li><strong>Revis\u00e1 si esas tres personas necesitan <\/strong>admin o si edit sin gesti\u00f3n de Routes les alcanza (aunque ojo: edit tambi\u00e9n suele permitir Routes en OpenShift, as\u00ed que verific\u00e1 el rol exacto si quer\u00e9s restringir).<\/li>\n\n\n\n<li><strong>Audit\u00e1 Routes existentes<\/strong> en esos tres namespaces buscando spec.path an\u00f3malos.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Estado final, ya sin pendientes de verificaci\u00f3n<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El vector queda confirmado emp\u00edricamente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>ever.vega.suazo@una.ac.cr<\/code> puede crear Routes en <code>ever<\/code><\/li>\n\n\n\n<li><code>allam@una.ac.cr<\/code> puede crear Routes en <code>allam2<\/code><\/li>\n\n\n\n<li><code>valeria.herrera.rodriguez@una.ac.cr<\/code> puede crear Routes en <code>proyecto-base<\/code><\/li>\n\n\n\n<li>M\u00e1s el <code>argocd-application-controller<\/code> en <code>ever<\/code> (GitOps), que sigue pendiente de auditar en cuanto a repo de origen.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>1. CVE-2026-10840 (OpenShift Pipelines \/ Tekton) \u2014 El fallo est\u00e1 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\u00f3mo el operador productizado de Red Hat configura el RBAC. En OKD normalmente instalar\u00edas el operador Tekton\/Pipelines de la comunidad, no el openshift-pipelines-operator-rh. Si [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-25062","post","type-post","status-publish","format-standard","hentry","category-sin-categoria"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/25062","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=25062"}],"version-history":[{"count":1,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/25062\/revisions"}],"predecessor-version":[{"id":25063,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/25062\/revisions\/25063"}],"wp:attachment":[{"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=25062"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=25062"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=25062"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}