Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessDeliver crafted KWAJ file to scanner/app
-
ExploitTrigger header read error in kwajd_read_headers
-
ExecutionFree uninitialized filename/extra pointers
-
ImpactCorrupt heap or crash process
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Uninitialized pointer prevention
MITRE ATT&CK
1 technique across 1 tactic: Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires that an application linked against libmspack (≤0.11alpha) invokes kwajd_open()/the KWAJ decompressor on attacker-supplied input, and that the attacker provides a malformed KWAJ file (truncated, zero-length, or wrong signature) that forces an early error return in kwajd_read_headers() before filename/extra are initialized. Limiting factors: exploitation is local/file-delivery and needs the application to actually process the file (UI:P) using the default mspack_system free(); the reliable outcome is a crash, and the arbitrary-free escalation is conditional on the uninitialized stack values (AT:P) being attacker-influenceable, which is not guaranteed across compilers/platforms. KWAJ is a less common format, so only code paths that invoke the KWAJ decompressor are affected. |
| Impact | This is a moderate, not top-priority, issue. The authoritative CVSS 4.0 vector (AV:L/AC:L/AT:P/PR:N/UI:P, VC:N/VI:H/VA:H) describes a locally-reached, file-processing flaw that requires passive user/application interaction (feeding a crafted KWAJ file to a program linked against libmspack) and has no confidentiality impact. The score of 5.8 and CWE-824 (access of uninitialized pointer) align with the description: the primary, reliable outcome is a crash/DoS, while the 'arbitrary-free memory corruption primitive' is a potential-but-conditional escalation (reflected by AT:P - it depends on the uninitialized stack value being attacker-influenceable or non-NULL). Exploitation status: no public exploit identified as a weaponized tool, but reporter-supplied example trigger files (empty.kwj, blank.kwj) and a public technical write-up exist, so a crash PoC is effectively in the open - treat as 'publicly available exploit code exists.' KEV: not listed (no confirmed active exploitation). EPSS: not provided in the input, so real-world exploitation probability cannot be quantified - do NOT assume widespread exploitation. The signals are internally consistent (local vector + user interaction + DoS-leaning impact), so there is no conflict to flag, but note that libmspack is frequently embedded in antivirus/file scanners that auto-process untrusted input, which can raise effective exposure above a naive 'local' reading. |
| Exploit ScenarioDerived | An attacker emails or uploads a truncated, empty, or wrong-signature KWAJ file to a service that uses libmspack (e.g., an antivirus scanner, cabextract, or archive handler). When the application calls kwajd_open() and the header read fails, kwajd_close() frees the uninitialized filename and extra pointers, crashing the process or corrupting memory. Reporter-supplied trigger files and a public write-up make reproduction trivial, though no weaponized code-execution exploit is confirmed. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 14, 2026
Processing a malformed KWAJ archive with libmspack through 0.11alpha can free uninitialized heap pointers, crashing the host application and potentially providing an arbitrary-free memory corruption primitive. The flaw is unauthenticated but local/file-delivery in nature: an application linked against libmspack must invoke the KWAJ decompressor (kwajd_open) on attacker-supplied input, and the attacker must present a truncated, zero-length, or wrong-signature file that forces an early error return before the filename and extra pointers are initialized. No public exploit code or CISA KEV entry was identified at time of analysis, and the independent assessment rates this as a moderate, not top-priority, issue whose reliable outcome is a crash, with arbitrary-free escalation conditional on platform- and compiler-specific uninitialized stack values.
RemediationAI
Apply the upstream fix commit 4d868504114346aa767d435fbb89a8b76603493f (upstream fix available; a released/tagged patched version was not independently confirmed at time of analysis), which initializes hdr->filename and hdr->extra before any error return in kwajd_read_headers() and ships regression tests with empty.kwj and blank.kwj fixtures. If you cannot immediately rebuild against the fixed source, treat KWAJ support as untrusted: reject or refuse to parse .kwj/KWAJ input in applications before it reaches kwajd_open(), or disable the KWAJ decompressor entirely in builds where that format is not needed, accepting the trade-off that legitimate KWAJ archives will no longer be extractable. Where the format must be supported, run the decompression in a sandboxed, memory-hardened process (e.g. an isolated worker with allocator hardening) so an uninitialized free() degrades to a contained crash rather than arbitrary memory corruption, and input-signature filtering before the library call as a supplementary check, recognizing that filtering can be bypassed by any path that still reaches the vulnerable error handling. Advisory references: https://www.vulncheck.com/advisories/libmspack-through-0-11alpha-uninitialized-pointer-free-via-kwajd-open-error-path and the fix commit at https://github.com/kyz/libmspack/commit/4d868504114346aa767d435fbb89a8b76603493f.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
libmspack is a library for decoding Microsoft compression formats, and CWE-824 (Access of Uninitialized Pointer) is the root cause here. In mspack/kwajd.c, kwajd_read_headers() allocated and populated the header's filename and extra fields only after successfully reading and validating the KWAJ header; on any early error path (MSPACK_ERR_READ for truncated/empty files, MSPACK_ERR_SIGNATURE for wrong magic) it returned before those fields were set to NULL. The cleanup routine kwajd_close() then called mspack_system.free() on those uninitialized pointers. The upstream fix simply moves the hdr->filename = NULL and hdr->extra = NULL initializations to the top of kwajd_read_headers() so they are valid on every return path, and adds regression tests using new fixtures empty.kwj and blank.kwj. Because the default mspack_system free() is invoked with garbage values, the impact spans undefined-behaviour crashes to a free() on an attacker-influenced address, making this a memory-corruption primitive rather than a clean denial of service. The affected CPE is cpe:2.3:a:kyz:libmspack:*:*:*:*:*:*:*:*, i.e. all released versions through 0.11alpha; KWAJ (.kwj) is a comparatively uncommon format, so exposure is limited to applications that actually route KWAJ input into this decoder.
Know when Libmspack gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:P/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N
File must be processed by the host app (AV:L, UI:R, PR:N); reliable crash plus free-based memory corruption gives I:H/A:H with no information disclosure (C:N).
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
libmspack through 0.11alpha contains an uninitialized pointer free vulnerability in kwajd_open() in mspack/kwajd.c that frees unzeroed filename and extra pointers on header read errors. Attackers can supply a truncated, empty, or wrong-signature KWAJ file to crash the process or obtain an arbitrary-free memory corruption primitive.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Memory corruption occurs when a program writes data beyond the boundaries of allocated memory regions or accesses memory in unintended ways, violating the integrity of the process's address space.
Off-by-one error in the READ_ENCINT macro in chmd.c in libmspack before 0.5 allows remote attackers to cause a denial of
libmspack 0.9.1alpha is affected by: Buffer Overflow. Rated medium severity (CVSS 5.5), this vulnerability is no authent
chmextract.c in the chmextract sample program, as distributed with libmspack before 0.8alpha, does not protect against a
Integer overflow in the qtmd_decompress function in libmspack 0.4 allows remote attackers to cause a denial of service (
An issue was discovered in mspack/chmd.c in libmspack before 0.7alpha. Rated high severity (CVSS 8.8), this vulnerabilit
An issue was discovered in kwajd_read_headers in mspack/kwajd.c in libmspack before 0.7alpha. Rated high severity (CVSS
Off-by-one error in the lzxd_decompress function in lzxd.c in libmspack before 0.5 allows remote attackers to cause a de
Off-by-one error in the inflate function in mszipd.c in libmspack before 0.5 allows remote attackers to cause a denial o
The cabd_extract function in cabd.c in libmspack before 0.5 does not properly maintain decompression callbacks in certai
The chmd_read_headers function in chmd.c in libmspack before 0.5 does not validate name lengths, which allows remote att
Multiple integer overflows in the search_chunk function in chmd.c in libmspack before 0.5 allow remote attackers to caus
The chmd_init_decomp function in chmd.c in libmspack before 0.5 does not properly validate the reset interval, which all
EUVD-2026-101230
GHSA-5m37-fqj8-q94j
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB