GCVE Workshop - 22 September 2026 (14:00-18:00), Luxembourg Before The Vulnopticon Conference - Registration

UBUNTU-CVE-2026-10645 (CVE-2026-10645)

Vulnerability from osv_ubuntu – Published: 2026-06-23 01:16 – Updated: 2026-07-15 17:48 – Source website
VLAI
Details

The Zephyr ext2 filesystem driver (subsys/fs/ext2) trusted the on-disk directory entry fields de_rec_len and de_name_len when walking a directory block. ext2_fetch_direntry() guarded only with de_name_len > EXT2_MAX_FILE_NAME, but de_name_len is a uint8_t and EXT2_MAX_FILE_NAME is 255, so the check is always false; the function then memcpy'd up to 255 name bytes and the lookup/readdir paths advanced traversal by an unvalidated de_rec_len. Each directory block is read into a block_size-sized slab buffer, and block_off can be driven near the block end by preceding entries' rec_len, so the 8-byte header read and the subsequent name memcpy can read up to ~263 bytes past the end of the block buffer into adjacent heap/slab memory. On the readdir path those bytes are returned to the caller in fs_dirent.name, leaking adjacent kernel heap memory; a de_rec_len of 0 also causes a zero-progress infinite loop (denial of service), and the unlink path's memmove(de, next, next_reclen) over unvalidated records is an additional OOB read/write source. The defect is reached by any path-based operation (open, stat, unlink, rename, mkdir) or directory listing on a mounted ext2 volume, so a crafted or corrupted ext2 image on attacker-supplied storage (SD card, USB mass storage, or otherwise mounted image) triggers it. Affected: Zephyr ext2 from its introduction in v3.5.0 through v4.4.0. The fix validates rec_len and name_len in the parser and rejects entries whose header does not fit the remaining block or whose rec_len crosses the block boundary in every traversal caller.


{
  "affected": [
    {
      "ecosystem_specific": {
        "binaries": [
          {
            "binary_name": "libzephyr4",
            "binary_version": "3.1.2-1build1"
          },
          {
            "binary_name": "libzephyr4-krb5",
            "binary_version": "3.1.2-1build1"
          },
          {
            "binary_name": "zephyr-clients",
            "binary_version": "3.1.2-1build1"
          },
          {
            "binary_name": "zephyr-server",
            "binary_version": "3.1.2-1build1"
          },
          {
            "binary_name": "zephyr-server-krb5",
            "binary_version": "3.1.2-1build1"
          }
        ]
      },
      "package": {
        "ecosystem": "Ubuntu:16.04:LTS",
        "name": "zephyr",
        "purl": "pkg:deb/ubuntu/zephyr@3.1.2-1build1?arch=source\u0026distro=xenial"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ],
      "versions": [
        "3.1.2-1",
        "3.1.2-1build1"
      ]
    },
    {
      "ecosystem_specific": {
        "binaries": [
          {
            "binary_name": "libzephyr4",
            "binary_version": "3.1.2-1build2"
          },
          {
            "binary_name": "libzephyr4-krb5",
            "binary_version": "3.1.2-1build2"
          },
          {
            "binary_name": "zephyr-clients",
            "binary_version": "3.1.2-1build2"
          },
          {
            "binary_name": "zephyr-server",
            "binary_version": "3.1.2-1build2"
          },
          {
            "binary_name": "zephyr-server-krb5",
            "binary_version": "3.1.2-1build2"
          }
        ]
      },
      "package": {
        "ecosystem": "Ubuntu:18.04:LTS",
        "name": "zephyr",
        "purl": "pkg:deb/ubuntu/zephyr@3.1.2-1build2?arch=source\u0026distro=bionic"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ],
      "versions": [
        "3.1.2-1build1",
        "3.1.2-1build2"
      ]
    },
    {
      "ecosystem_specific": {
        "binaries": [
          {
            "binary_name": "libzephyr4",
            "binary_version": "3.1.2-1build3"
          },
          {
            "binary_name": "libzephyr4-krb5",
            "binary_version": "3.1.2-1build3"
          },
          {
            "binary_name": "zephyr-clients",
            "binary_version": "3.1.2-1build3"
          },
          {
            "binary_name": "zephyr-server",
            "binary_version": "3.1.2-1build3"
          },
          {
            "binary_name": "zephyr-server-krb5",
            "binary_version": "3.1.2-1build3"
          }
        ]
      },
      "package": {
        "ecosystem": "Ubuntu:20.04:LTS",
        "name": "zephyr",
        "purl": "pkg:deb/ubuntu/zephyr@3.1.2-1build3?arch=source\u0026distro=focal"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ],
      "versions": [
        "3.1.2-1build3"
      ]
    },
    {
      "ecosystem_specific": {
        "binaries": [
          {
            "binary_name": "libzephyr4",
            "binary_version": "3.1.2-1build3"
          },
          {
            "binary_name": "libzephyr4-krb5",
            "binary_version": "3.1.2-1build3"
          },
          {
            "binary_name": "zephyr-clients",
            "binary_version": "3.1.2-1build3"
          },
          {
            "binary_name": "zephyr-server",
            "binary_version": "3.1.2-1build3"
          },
          {
            "binary_name": "zephyr-server-krb5",
            "binary_version": "3.1.2-1build3"
          }
        ]
      },
      "package": {
        "ecosystem": "Ubuntu:22.04:LTS",
        "name": "zephyr",
        "purl": "pkg:deb/ubuntu/zephyr@3.1.2-1build3?arch=source\u0026distro=jammy"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ],
      "versions": [
        "3.1.2-1build3"
      ]
    },
    {
      "ecosystem_specific": {
        "binaries": [
          {
            "binary_name": "libzephyr4",
            "binary_version": "3.1.2-1.1build1"
          },
          {
            "binary_name": "libzephyr4-krb5",
            "binary_version": "3.1.2-1.1build1"
          },
          {
            "binary_name": "zephyr-clients",
            "binary_version": "3.1.2-1.1build1"
          },
          {
            "binary_name": "zephyr-server",
            "binary_version": "3.1.2-1.1build1"
          },
          {
            "binary_name": "zephyr-server-krb5",
            "binary_version": "3.1.2-1.1build1"
          }
        ]
      },
      "package": {
        "ecosystem": "Ubuntu:24.04:LTS",
        "name": "zephyr",
        "purl": "pkg:deb/ubuntu/zephyr@3.1.2-1.1build1?arch=source\u0026distro=noble"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ],
      "versions": [
        "3.1.2-1.1",
        "3.1.2-1.1build1"
      ]
    },
    {
      "ecosystem_specific": {
        "binaries": [
          {
            "binary_name": "libzephyr4",
            "binary_version": "3.1.2-1.1build1"
          },
          {
            "binary_name": "libzephyr4-krb5",
            "binary_version": "3.1.2-1.1build1"
          },
          {
            "binary_name": "zephyr-clients",
            "binary_version": "3.1.2-1.1build1"
          },
          {
            "binary_name": "zephyr-server",
            "binary_version": "3.1.2-1.1build1"
          },
          {
            "binary_name": "zephyr-server-krb5",
            "binary_version": "3.1.2-1.1build1"
          }
        ]
      },
      "package": {
        "ecosystem": "Ubuntu:25.10",
        "name": "zephyr",
        "purl": "pkg:deb/ubuntu/zephyr@3.1.2-1.1build1?arch=source\u0026distro=questing"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ],
      "versions": [
        "3.1.2-1.1build1"
      ]
    },
    {
      "ecosystem_specific": {
        "binaries": [
          {
            "binary_name": "libzephyr4",
            "binary_version": "3.1.2-4"
          },
          {
            "binary_name": "libzephyr4-krb5",
            "binary_version": "3.1.2-4"
          },
          {
            "binary_name": "zephyr-clients",
            "binary_version": "3.1.2-4"
          },
          {
            "binary_name": "zephyr-server",
            "binary_version": "3.1.2-4"
          },
          {
            "binary_name": "zephyr-server-krb5",
            "binary_version": "3.1.2-4"
          }
        ]
      },
      "package": {
        "ecosystem": "Ubuntu:26.04:LTS",
        "name": "zephyr",
        "purl": "pkg:deb/ubuntu/zephyr@3.1.2-4?arch=source\u0026distro=resolute"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ],
      "versions": [
        "3.1.2-1.1build1",
        "3.1.2-4"
      ]
    }
  ],
  "aliases": [],
  "details": "The Zephyr ext2 filesystem driver (subsys/fs/ext2) trusted the on-disk directory entry fields de_rec_len and de_name_len when walking a directory block. ext2_fetch_direntry() guarded only with de_name_len \u003e EXT2_MAX_FILE_NAME, but de_name_len is a uint8_t and EXT2_MAX_FILE_NAME is 255, so the check is always false; the function then memcpy\u0027d up to 255 name bytes and the lookup/readdir paths advanced traversal by an unvalidated de_rec_len. Each directory block is read into a block_size-sized slab buffer, and block_off can be driven near the block end by preceding entries\u0027 rec_len, so the 8-byte header read and the subsequent name memcpy can read up to ~263 bytes past the end of the block buffer into adjacent heap/slab memory. On the readdir path those bytes are returned to the caller in fs_dirent.name, leaking adjacent kernel heap memory; a de_rec_len of 0 also causes a zero-progress infinite loop (denial of service), and the unlink path\u0027s memmove(de, next, next_reclen) over unvalidated records is an additional OOB read/write source. The defect is reached by any path-based operation (open, stat, unlink, rename, mkdir) or directory listing on a mounted ext2 volume, so a crafted or corrupted ext2 image on attacker-supplied storage (SD card, USB mass storage, or otherwise mounted image) triggers it. Affected: Zephyr ext2 from its introduction in v3.5.0 through v4.4.0. The fix validates rec_len and name_len in the parser and rejects entries whose header does not fit the remaining block or whose rec_len crosses the block boundary in every traversal caller.",
  "id": "UBUNTU-CVE-2026-10645",
  "modified": "2026-07-15T17:48:10Z",
  "published": "2026-06-23T01:16:00Z",
  "references": [
    {
      "type": "REPORT",
      "url": "https://ubuntu.com/security/CVE-2026-10645"
    },
    {
      "type": "REPORT",
      "url": "https://www.cve.org/CVERecord?id=CVE-2026-10645"
    },
    {
      "type": "REPORT",
      "url": "https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-hwrh-9h3x-vccm"
    }
  ],
  "related": [],
  "schema_version": "1.7.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:P/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:H",
      "type": "CVSS_V3"
    },
    {
      "score": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H",
      "type": "CVSS_V3"
    },
    {
      "score": "medium",
      "type": "Ubuntu"
    }
  ],
  "upstream": [
    "CVE-2026-10645"
  ]
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…