CVE-2026-82254
gitoxide before 0.69.0 Denial of Service via gix-pack
gitoxide before 0.69.0 contains unchecked array indexing in delta application and uncapped allocation from attacker-controlled size headers in gix-pack. Attackers can send crafted pack data during clone or fetch operations to trigger panics or out-of-memory process kills.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
8.7
gitoxide before 0.69.0 Denial of Service via gix-pack
gitoxide before 0.69.0 contains unchecked array indexing in delta application and uncapped allocation from attacker-controlled size headers in gix-pack. Attackers can send crafted pack data during clone or fetch operations to trigger panics or out-of-memory process kills.
- Record
CVE-2026-82254- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-248
- Updated
- 2026-11-02
EUVDEUVD-2026-67706
8.7
gitoxide before 0.69.0 contains unchecked array indexing in delta application and uncapped allocation from attacker-controlled size headers in gix-pack. Attackers can send crafted pack data during clone or fetch operations to trigger panics or out-of-memory process kills.
- Record
EUVD-2026-67706- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-5v2g-4955-9qfh
8.7
gitoxide before 0.69.0 contains unchecked array indexing in delta application and uncapped...
gitoxide before 0.69.0 contains unchecked array indexing in delta application and uncapped allocation from attacker-controlled size headers in gix-pack. Attackers can send crafted pack data during clone or fetch operations to trigger panics or out-of-memory process kills.
- Record
GHSA-5v2g-4955-9qfh- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-248
- Updated
- 2026-11-02
GitHub AdvisoriesGHSA-x494-mj8g-cj27
8.7
gix-pack has multiple DoS vectors: unchecked indexing panics and uncapped OOM allocations from crafted pack data
Summary
Multiple denial-of-service vectors in gix-pack: unchecked array indexing causes panics on crafted delta data, and uncapped attacker-controlled size headers enable OOM process kills. Both are triggered by malicious pack data received during clone/fetch.
Details
Bug 1: Unchecked array indexing in delta application (CWE-248)
The apply() function in gix-pack/src/data/delta.rs (lines 33-87) reads delta instructions using unchecked data[i] indexing at 7 locations (lines 41, 45, 49, 53, 57, 61, 65). The command byte's bits indicate how many additional bytes follow, but if the delta data is truncated, the index panics:
pub(crate) fn apply(base: &[u8], mut target: &mut [u8], data: &[u8]) -> Result<(), apply::Error> {
let mut i = 0;
while let Some(cmd) = data.get(i) { // first byte: safely checked
i += 1;
match cmd {
cmd if cmd & 0b1000_0000 != 0 => {
let (mut ofs, mut size): (u32, u32) = (0, 0);
if cmd & 0b0000_0001 != 0 {
ofs = u32::from(data[i]); // PANIC: no bounds check
i += 1;
}
// ... 6 more unchecked data[i] at lines 45, 49, 53, 57, 61, 65
Lines 83-84 use assert_eq! (not debug_assert_eq!) that panics in both debug and release builds:
assert_eq!(i, data.len());
assert_eq!(target.len(), 0);
A second location in parse_header_info() (gix-pack/src/data/entry/decode.rs:116-129) also panics on truncated input via unchecked data[0] and data[i].
Note: PR #2059 (merged 2025-06-25) fixed the explicit panic!() for command code 0. The unchecked array indexing is a distinct class that remains unfixed.
Bug 2: Uncapped allocation from attacker-controlled size headers (CWE-770)
Pack entry headers and delta headers encode object sizes as LEB128-encoded u64 values. These sizes are used to allocate buffers before validating the actual data, with no upper bound:
bytes_to_entries.rs:109 Vec::with_capacity(entry.decompressed_size as usize) // UNCAPPED
resolve.rs:461 out.resize(decompressed_len, 0) // UNCAPPED
resolve.rs:190 fully_resolved_delta_bytes.resize(result_size as usize, 0) // UNCAPPED
A 10-byte crafted pack entry can claim decompressed_size = 0xFFFFFFFFFFFF (281 TB). At bytes_to_entries.rs:109, gitoxide calls Vec::with_capacity(281TB) before any decompression occurs. The OS immediately OOM-kills the process. No MAX_SIZE, max_object_size, or equivalent limit exists anywhere in gix-pack.
The allocation at resolve.rs:461 is equally dangerous: decompressed_size from the pack header is cast to usize and passed to Vec::resize(), which allocates and zeroes the full claimed size before the zlib decompressor runs.
PoC
Compiled and executed in Rust 1.94.1 --release mode. All 5 panics confirmed:
[1] delta apply: cmd=0x81, truncated -> PANIC: index out of bounds: len is 1 but index is 1
[2] delta apply: cmd=0xFF, only 3 extra bytes -> PANIC: index out of bounds: len is 4 but index is 4
[3] parse_header_info: empty data -> PANIC: index out of bounds: len is 0 but index is 0
[4] parse_header_info: byte=0x80, truncated -> PANIC: index out of bounds: len is 1 but index is 1
[5] delta apply: assert_eq!(i, data.len()) -> PANIC: assertion failed
For the OOM vector: the allocation path is parse_header_info() -> entry.decompressed_size (u64) -> Vec::with_capacity(size as usize) with no intermediate validation. A minimal pack with a single entry claiming a multi-terabyte size triggers immediate process kill.
Impact
Any application built on gitoxide that clones or fetches from an untrusted remote can be crashed by a malicious server:
- Panic DoS: 1-2 bytes of crafted delta data causes an immediate process abort
- OOM DoS: A single crafted pack entry header causes the process to attempt a multi-terabyte allocation,…
- Record
GHSA-x494-mj8g-cj27- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-248, CWE-770
- Updated
- 2026-11-02
NVD
8.7
gitoxide before 0.69.0 contains unchecked array indexing in delta application and uncapped allocation from attacker-controlled size headers in gix-pack. Attackers can send crafted pack data during clone or fetch operations to trigger panics or out-of-memory process kills.
- Record
CVE-2026-82254- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-248
- Updated
- 2026-11-02
OSV
8.7
gitoxide before 0.69.0 Denial of Service via gix-pack
gitoxide before 0.69.0 contains unchecked array indexing in delta application and uncapped allocation from attacker-controlled size headers in gix-pack. Attackers can send crafted pack data during clone or fetch operations to trigger panics or out-of-memory process kills.
- Record
CVE-2026-82254- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-248
- Updated
- 2026-11-02
Show 7 moreShow less
OSVDEBIAN-CVE-2026-82254
8.7
gitoxide before 0.69.0 contains unchecked array indexing in delta application and uncapped allocation from attacker-controlled size headers in gix-pack. Attackers can send crafted pack data during clone or fetch operations to trigger panics or out-of-memory process kills.
- Record
DEBIAN-CVE-2026-82254- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - Updated
- 2026-11-02
OSVGHSA-x494-mj8g-cj27
8.7
gix-pack has multiple DoS vectors: unchecked indexing panics and uncapped OOM allocations from crafted pack data
Summary
Multiple denial-of-service vectors in gix-pack: unchecked array indexing causes panics on crafted delta data, and uncapped attacker-controlled size headers enable OOM process kills. Both are triggered by malicious pack data received during clone/fetch.
Details
Bug 1: Unchecked array indexing in delta application (CWE-248)
The apply() function in gix-pack/src/data/delta.rs (lines 33-87) reads delta instructions using unchecked data[i] indexing at 7 locations (lines 41, 45, 49, 53, 57, 61, 65). The command byte's bits indicate how many additional bytes follow, but if the delta data is truncated, the index panics:
pub(crate) fn apply(base: &[u8], mut target: &mut [u8], data: &[u8]) -> Result<(), apply::Error> {
let mut i = 0;
while let Some(cmd) = data.get(i) { // first byte: safely checked
i += 1;
match cmd {
cmd if cmd & 0b1000_0000 != 0 => {
let (mut ofs, mut size): (u32, u32) = (0, 0);
if cmd & 0b0000_0001 != 0 {
ofs = u32::from(data[i]); // PANIC: no bounds check
i += 1;
}
// ... 6 more unchecked data[i] at lines 45, 49, 53, 57, 61, 65
Lines 83-84 use assert_eq! (not debug_assert_eq!) that panics in both debug and release builds:
assert_eq!(i, data.len());
assert_eq!(target.len(), 0);
A second location in parse_header_info() (gix-pack/src/data/entry/decode.rs:116-129) also panics on truncated input via unchecked data[0] and data[i].
Note: PR #2059 (merged 2025-06-25) fixed the explicit panic!() for command code 0. The unchecked array indexing is a distinct class that remains unfixed.
Bug 2: Uncapped allocation from attacker-controlled size headers (CWE-770)
Pack entry headers and delta headers encode object sizes as LEB128-encoded u64 values. These sizes are used to allocate buffers before validating the actual data, with no upper bound:
bytes_to_entries.rs:109 Vec::with_capacity(entry.decompressed_size as usize) // UNCAPPED
resolve.rs:461 out.resize(decompressed_len, 0) // UNCAPPED
resolve.rs:190 fully_resolved_delta_bytes.resize(result_size as usize, 0) // UNCAPPED
A 10-byte crafted pack entry can claim decompressed_size = 0xFFFFFFFFFFFF (281 TB). At bytes_to_entries.rs:109, gitoxide calls Vec::with_capacity(281TB) before any decompression occurs. The OS immediately OOM-kills the process. No MAX_SIZE, max_object_size, or equivalent limit exists anywhere in gix-pack.
The allocation at resolve.rs:461 is equally dangerous: decompressed_size from the pack header is cast to usize and passed to Vec::resize(), which allocates and zeroes the full claimed size before the zlib decompressor runs.
PoC
Compiled and executed in Rust 1.94.1 --release mode. All 5 panics confirmed:
[1] delta apply: cmd=0x81, truncated -> PANIC: index out of bounds: len is 1 but index is 1
[2] delta apply: cmd=0xFF, only 3 extra bytes -> PANIC: index out of bounds: len is 4 but index is 4
[3] parse_header_info: empty data -> PANIC: index out of bounds: len is 0 but index is 0
[4] parse_header_info: byte=0x80, truncated -> PANIC: index out of bounds: len is 1 but index is 1
[5] delta apply: assert_eq!(i, data.len()) -> PANIC: assertion failed
For the OOM vector: the allocation path is parse_header_info() -> entry.decompressed_size (u64) -> Vec::with_capacity(size as usize) with no intermediate validation. A minimal pack with a single entry claiming a multi-terabyte size triggers immediate process kill.
Impact
Any application built on gitoxide that clones or fetches from an untrusted remote can be crashed by a malicious server:
- Panic DoS: 1-2 bytes of crafted delta data causes an immediate process abort
- OOM DoS: A single crafted pack entry header causes the process to attempt a multi-terabyte allocation,…
- Record
GHSA-x494-mj8g-cj27- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-248, CWE-770
- Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-82254
8.7
gitoxide before 0.69.0 contains unchecked array indexing in delta application and uncapped allocation from attacker-controlled size headers in gix-pack. Attackers can send crafted pack data during clone or fetch operations to trigger panics or out-of-memory process kills.
- Record
UBUNTU-CVE-2026-82254- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVAZL-98412 No score
CVE-2026-82254 affecting package rust 1.75.0-31
gitoxide before 0.69.0 contains unchecked array indexing in delta application and uncapped allocation from attacker-controlled size headers in gix-pack. Attackers can send crafted pack data during clone or fetch operations to trigger panics or out-of-memory process kills.
- Record
AZL-98412- Updated
- 2026-11-02
OSVAZL-98424 No score
CVE-2026-82254 affecting package rust 1.98.1-1
gitoxide before 0.69.0 contains unchecked array indexing in delta application and uncapped allocation from attacker-controlled size headers in gix-pack. Attackers can send crafted pack data during clone or fetch operations to trigger panics or out-of-memory process kills.
- Record
AZL-98424- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:11730-1 No score
cargo-audit-0.22.2~git0.281452c-3.1 on GA media
These are all security issues fixed in the cargo-audit-0.22.2~git0.281452c-3.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:11730-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:11741-1 No score
cargo-c-0.10.25-1.1 on GA media
These are all security issues fixed in the cargo-c-0.10.25-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:11741-1- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
gix-packcrates.io |
through 0.68.0 | 0.69.0 |
rustAzure Linux:3 |
through 1.75.0-31 | None known |
rustAzure Linux:3 |
1.85.0 to 1.98.1-1 | None known |
rust-gix-packDebian:13 |
All versions, plus listed versions 0.56.0-10.60.0-10.70.0-10.73.0-10.73.0-20.74.2-1 |
None known |
rust-gix-packDebian:14 |
before 0.70.0-1, plus listed versions 0.56.0-10.60.0-1 |
0.70.0-1 |
gix-packcrates.io |
before 0.69.0 | 0.69.0 |
rust-gix-packUbuntu:26.10 |
All versions, plus listed versions 0.60.0-10.70.0-1 |
None known |
rust-gix-packUbuntu:26.04:LTS |
All versions, plus listed versions 0.56.0-10.60.0-1 |
None known |
cargo-auditopenSUSE:Tumbleweed |
before 0.22.2~git0.281452c-3.1 | 0.22.2~git0.281452c-3.1 |
cargo-copenSUSE:Tumbleweed |
before 0.10.25-1.1 | 0.10.25-1.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-82254 is a high vulnerability (CVSS 8.7) in Gitoxidelabs Gitoxide, published May 5, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.49%, the 42nd percentile. Fixed in gix-pack 0.69.0.
References
github.com/GitoxideLabs/gitoxide/security/advisories/GHSA-x494-mj8g-cj27
vulncheck.com/advisories/gitoxide-before-0.69.0-denial-of-service-via-gix-pack
nvd.nist.gov/vuln/detail/CVE-2026-82254
github.com/advisories/GHSA-5v2g-4955-9qfh
github.com/advisories/GHSA-x494-mj8g-cj27
github.com/CVEProject/cvelistV5/tree/main/cves/2026/82xxx/CVE-2026-82254.json
Show 9 moreShow less
security-tracker.debian.org/tracker/CVE-2026-82254
github.com/GitoxideLabs/gitoxide
ubuntu.com/security/CVE-2026-82254
cve.org/CVERecord?id=CVE-2026-82254
suse.com/security/cve/CVE-2026-82247
suse.com/security/cve/CVE-2026-82250
suse.com/security/cve/CVE-2026-82251
suse.com/security/cve/CVE-2026-82253
suse.com/security/cve/CVE-2026-82254
Left out here: the rest of 2 source descriptions. The JSON record has them.