« Volver al listado

CVE-2026-19574

Estado: Pendiente de análisisAlta (7)—

El motor MMU de ARM64 asignaba identificadores de espacio de direcciones (ASIDs) para dominios de memoria con un contador simple round-robin en arch_mem_domain_init() (arch/arm64/core/mmu.c). VM_ASID_BITS es 8, por lo que solo existen 255 ASIDs; una vez que el contador se reajustaba, arch_mem_domain_init() podría asignar un ASID a un nuevo dominio mientras un dominio aún activo mantenía el mismo. Los mapeos privados del dominio se instalan como no globales (MT_NG), por lo que el ASID es la única etiqueta que separa las traducciones en caché de un dominio de las de otro en la TLB.

La ruta de cambio de contexto en z_arm64_swap_ptables() solo vacía la TLB cuando los dominios salientes y entrantes tienen el mismo ASID, lo que no cubre un duplicado alcanzado a través de un tercer dominio: para los dominios A y C que comparten un ASID y un dominio no relacionado B, la planificación A -> B -> C nunca toma la rama de vaciado, por lo que las entradas etiquetadas con ASID que A rellenó permanecen residentes mientras se ejecuta C.

Leer descripción completaMostrar menos

Bajo SMP, dos dominios activos que comparten un ASID pueden además estar residentes en dos CPUs simultáneamente, lo que la arquitectura no permite para conjuntos de tablas de traducción distintos.

Desencadenar el ajuste requiere una aplicación CONFIG_USERSPACE en ARM64 que cree más de 255 dominios de memoria durante su vida útil; k_mem_domain_init() y k_mem_domain_deinit() son APIs de supervisor solamente y no se exponen como llamadas del sistema, por lo que un hilo sin privilegios no puede dirigir directamente el contador. Sin embargo, una vez que dos dominios activos coinciden, un hilo en modo usuario en un dominio puede leer y escribir memoria perteneciente a las particiones y pilas de hilo del otro dominio con los permisos de ese dominio, derrotando el límite de aislamiento del dominio de memoria.

La corrección examina domain_list en vivo antes de asignar un ASID, avanza el contador round-robin más allá de los ASIDs ya en uso, y devuelve -ENOMEM cuando todos están ocupados, por lo que la creación de dominio falla de forma segura en lugar de hacer alias silenciosamente.

Traducción automática del texto original de NVD (en inglés).

CVSS

Probabilidad de explotación (EPSS)

EPSS (Exploit Prediction Scoring System, de FIRST) estima la probabilidad de que una vulnerabilidad sea explotada en 30 días. Complementa a CVSS (impacto) y a CISA KEV (explotación confirmada).

🎯 Técnicas ATT&CK

Cómo se explota esta vulnerabilidad y qué consigue el atacante, en el lenguaje de MITRE ATT&CK.

Vulnerabilidad de escalada de privilegios local (AV:L, PR:L) que permite a un hilo no privilegiado leer/escribir memoria de otros dominios tras el wrap de ASID, cruzando límites de aislamiento de memoria.

Inferido por nuestro agente de análisis a partir de la descripción oficial, el vector CVSS y la CWE, y comprobado por un supervisor. Puede contener errores.

🛡️ Mitigaciones ATT&CK que cubren estas técnicas

Tecnologías afectadas (1)

⚠ Inferidas por IA a partir de la descripción — NVD aún no ha analizado esta CVE; no son CPE verificados.

CWE

Referencias

JSON original (NVD)

Mostrar
{
  "id": "CVE-2026-19574",
  "cveTags": [],
  "metrics": {
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "id": "CVE-2026-19574",
          "role": "CISA Coordinator",
          "options": [
            {
              "exploitation": "none"
            },
            {
              "automatable": "no"
            },
            {
              "technicalImpact": "total"
            }
          ],
          "version": "2.0.3",
          "timestamp": "2026-10-09T17:56:13.062546Z"
        }
      }
    ],
    "cvssMetricV31": [
      {
        "type": "Secondary",
        "source": "vulnerabilities@zephyrproject.org",
        "cvssData": {
          "scope": "UNCHANGED",
          "version": "3.1",
          "baseScore": 7,
          "attackVector": "LOCAL",
          "baseSeverity": "HIGH",
          "vectorString": "CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H",
          "integrityImpact": "HIGH",
          "userInteraction": "NONE",
          "attackComplexity": "HIGH",
          "availabilityImpact": "HIGH",
          "privilegesRequired": "LOW",
          "confidentialityImpact": "HIGH"
        },
        "impactScore": 5.9,
        "exploitabilityScore": 1
      }
    ]
  },
  "affected": [
    {
      "source": "vulnerabilities@zephyrproject.org",
      "affectedData": [
        {
          "vendor": "zephyrproject",
          "product": "zephyr",
          "versions": [
            {
              "status": "affected",
              "version": "3.3.0",
              "versionType": "semver",
              "lessThanOrEqual": "4.4.2"
            }
          ],
          "packageName": "zephyr",
          "programFiles": [
            "arch/arm64/core/mmu.c"
          ],
          "collectionURL": "https://github.com/zephyrproject-rtos/zephyr",
          "defaultStatus": "unaffected",
          "programRoutines": [
            {
              "name": "arch_mem_domain_init"
            },
            {
              "name": "k_mem_domain_init"
            }
          ]
        }
      ]
    }
  ],
  "published": "2026-10-09T08:16:54.940",
  "references": [
    {
      "url": "https://github.com/zephyrproject-rtos/zephyr/commit/805054b8ed89dd5441fbca36b3cd3be7e4fb4100",
      "source": "vulnerabilities@zephyrproject.org"
    },
    {
      "url": "https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-923h-8c2j-pcm5",
      "source": "vulnerabilities@zephyrproject.org"
    }
  ],
  "vulnStatus": "Awaiting Analysis",
  "weaknesses": [
    {
      "type": "Secondary",
      "source": "vulnerabilities@zephyrproject.org",
      "description": [
        {
          "lang": "en",
          "value": "CWE-284"
        }
      ]
    }
  ],
  "descriptions": [
    {
      "lang": "en",
      "value": "The ARM64 MMU back-end allocated address space identifiers (ASIDs) for memory domains with a bare round-robin counter in arch_mem_domain_init() (arch/arm64/core/mmu.c). VM_ASID_BITS is 8, so only 255 ASIDs exist; once the counter wrapped, arch_mem_domain_init() could hand an ASID to a new domain while a still-live domain held the same one. Domain-private mappings are installed non-global (MT_NG), so the ASID is the only tag separating one domain's cached translations from another's in the TLB.\n\nThe context-switch path in z_arm64_swap_ptables() only flushes the TLB when the outgoing and incoming domains carry the same ASID, which does not cover a duplicate reached through a third domain: for domains A and C sharing an ASID and an unrelated domain B, the schedule A -> B -> C never takes the flush branch, so the ASID-tagged entries A populated remain resident while C runs. Under SMP two live domains sharing an ASID can additionally be resident on two CPUs at once, which the architecture does not allow for distinct translation-table sets.\n\nTriggering the wrap requires a CONFIG_USERSPACE application on ARM64 that creates more than 255 memory domains over its lifetime; k_mem_domain_init() and k_mem_domain_deinit() are supervisor-only APIs and are not exposed as syscalls, so an unprivileged thread cannot drive the counter directly. Once two live domains alias, however, a user-mode thread in one domain can read and write memory belonging to the other domain's partitions and thread stacks with that domain's permissions, defeating the memory-domain isolation boundary.\n\nThe fix scans the live domain_list before assigning an ASID, advances the round-robin counter past ASIDs already in use, and returns -ENOMEM when all are taken, so domain creation fails closed instead of silently aliasing."
    }
  ],
  "lastModified": "2026-10-09T18:17:08.147",
  "sourceIdentifier": "vulnerabilities@zephyrproject.org"
}