# CVE-2026-109349: gitoxide gix-pack reachable assertion in pack header decoder

Source: https://junglewise.ai/threats/cve-2026-109349-gitoxide-gix-pack-before-0-75-0-contains-a-reachable-assertion  
Publisher: Junglewise Threat Intelligence, https://junglewise.ai/threats  
Published: 2026-10-12. Updated: 2026-10-16  
License: CC BY 4.0 with a link back

CVE-2026-109349 · Severity: medium · CVSS 6.5 · Published 2026-10-12

gitoxide gix-pack is a Rust library that parses Git pack files during clone and fetch operations. A malicious attacker can send a crafted 12-byte pack header with version 3 to trigger a hard assertion panic in the library, causing the entire clone or fetch operation to abort with no way for the client to recover. This is a trivial pre-authentication denial of service that requires only sending minimal data over the network.

Vendors: [GitoxideLabs](https://junglewise.ai/threats/vendors/gitoxidelabs).

## Quick answers

**Is CVE-2026-109349 exploited in the wild?** No. Junglewise Threat Intelligence has no report of CVE-2026-109349 being exploited in the wild.

**How severe is CVE-2026-109349?** Medium severity, with a CVSS score of 6.5, published 12 October 2026.

**Which products and versions are affected?** GitoxideLabs Gix-Pack before 0.75.0.

**Is there a fix for CVE-2026-109349?** Yes: fixed in 0.75.0. Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.

**How is CVE-2026-109349 attacked?** It is attacked over the network, in a software library.

**Am I affected by CVE-2026-109349?** Check whether you run GitoxideLabs Gix-Pack at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

## How to fix

- Fixed in 0.75.0

## Technical details

The pack header decoder in gix-pack/src/data/header.rs explicitly accepts version 3 (returning Ok(Version::V3)), but immediately after, BytesToEntriesIter::new_from_header uses assert_eq!(version, Version::V2) to verify the version—a hard assertion that is compiled into release builds. An attacker can send a pack stream beginning with bytes 50 41 43 4B 00 00 00 03 (PACK version 3) to trigger the panic; with panic="unwind" and no catch_unwind in the read path, this unwinds to the process abort. The fix treats non-V2 versions as a graceful error instead of a panic.

## Affected products

- GitoxideLabs gix-pack before 0.75.0

## Timeline

- 2026-09-25: disclosed
- 2026-10-12: advisory

## References

- [https://github.com/GitoxideLabs/gitoxide/security/advisories/GHSA-633h-mqjc-8rwg](https://github.com/GitoxideLabs/gitoxide/security/advisories/GHSA-633h-mqjc-8rwg)
- [https://www.vulncheck.com/advisories/gix-pack-before-0.75.0-reachable-assertion-dos-via-pack-version-3-header](https://www.vulncheck.com/advisories/gix-pack-before-0.75.0-reachable-assertion-dos-via-pack-version-3-header)

## Related threats

- [Gitoxide gix-pack uncontrolled memory allocation in pack header](https://junglewise.ai/threats/cve-2026-109351-gitoxide-gix-pack-before-0-75-0-contains-an-uncontrolled-memory)
