Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAccess exposed conversion API locally
-
DeliverySupply crafted \U+XXXX string with failing codepage
-
ExploitTrigger iconv error path (errno ≠ E2BIG)
-
Executionbit_u_expand writes through read-only aliased input
-
ImpactProcess crashes, denial of service
Vulnerability Assessment
| Weakness |
CWE
|
| Exploitation Conditions | Exploitation requires an application that itself calls bit_TV_to_utf8() in src/bits.c and exposes it to untrusted input, AND passes src as an immutable buffer - a string literal, read-only mapping, shared immutable buffer, or other non-writable storage. It further requires that iconv() fail with an errno OTHER than E2BIG (for example a \U+XXXX escape sequence converted under CP_UTF16, as in the advisory reproducer), which routes execution to the bit_u_expand(osrc) in-place write. Limiting factors that reduce real-world risk: this is not reached through normal DWG decode/export because bit_read_TV() heap-allocates most TV strings (so the aliased buffer would be mutable, not read-only); the condition is therefore a non-default API-usage pattern rather than a default remote-reachable path, and impact is limited to a crash or unexpected mutation of caller-owned input. |
| Impact | All decision signals converge on low priority. The NVD CVSS is 3.3 (Low) with a local vector (AV:L), no privileges (PR:N) but required interaction (UI:R), and only an availability impact (A:L, with C:N/I:N); the vuln.today Decision label is 'monitor', which matches. There is no CISA KEV listing (so not confirmed actively exploited) and no EPSS score was supplied, so exploitation probability cannot be quantified from the input. A public PoC reference exists - the GHSA advisory embeds a minimal reproducer that reliably triggers a SIGSEGV - but the input does not mark it as confirmed working exploit code, and crucially the reporter and advisory state that direct file-triggered exploitability through normal DWG decode/export paths is UNCONFIRMED because bit_read_TV() heap-allocates most TV strings. The signals are therefore consistent rather than conflicting: a genuine but conditional defect whose impact is capped at denial of service (or unexpected mutation of caller-owned input) and only when an application deliberately feeds untrusted data to bit_TV_to_utf8() with an immutable buffer. This is a real correctness/robustness bug but a low real-world priority, not a high-CVSS-but-overstated issue - the CVSS itself is already low and honest about the constraints. |
| Exploit ScenarioDerived | An application that links LibreDWG and exposes bit_TV_to_utf8() to attacker-controlled strings passes a read-only buffer (e.g. a string literal or memory-mapped read-only data) containing a \U+XXXX escape with a codepage that makes iconv() fail with an errno other than E2BIG. On that error path the function calls bit_u_expand() on the aliased const input, writing in place and crashing the process (SIGSEGV), causing denial of service. A public PoC reproducer demonstrating the crash is included in the GHSA advisory; it is not verified as a weaponized exploit and file-driven triggering via normal DWG parsing is unconfirmed. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 30, 2026
LibreDWG before 0.14 contains an error-path flaw in bit_TV_to_utf8() (src/bits.c) where a failure inside iconv() with an errno other than E2BIG frees the conversion buffer but still routes the original const input through bit_u_expand(), which rewrites \U+XXXX and \M+... sequences in place. The result is a SIGSEGV denial of service when the caller passed a string literal, read-only mapping, or other immutable buffer, and an unexpected mutation of the caller's input when the buffer is writable. The library is a C DWG read/write library, and practical reachability is limited: normal DWG decode/export paths heap-allocate most TV strings via bit_read_TV(), so an application must itself expose this conversion API to untrusted input and pass it non-writable storage - the assessed vector is local (AV:L), high attack complexity, requiring user interaction, with only low availability impact, and no public exploit identified at time of analysis; LibreDWG 0.14 contains the fix.
RemediationAI
Vendor-released patch: LibreDWG 0.14, which changes the iconv() error path in bit_TV_to_utf8() to return the allocating fallback bit_TV_to_utf8_codepage(osrc, codepage) instead of passing the const src alias to the in-place bit_u_expand(). Upgrade to 0.14 (https://github.com/LibreDWG/libredwg/releases/tag/0.14); the fix commit is 08c034a224a4e9512b1cd62e74b5cf081a4cfa89 (https://github.com/LibreDWG/libredwg/commit/08c034a224a4e9512b1cd62e74b5cf081a4cfa89) and the advisory is GHSA-5p98-8245-6hxq. There is no fixed version listed for the pre-0.14 branch, so backporting that one-line change (or the equivalent strdup-before-bit_u_expand approach proposed in the advisory) is required if staying on 0.13.x. For applications that cannot upgrade immediately, the reported exposure is limited to code that calls bit_TV_to_utf8() with untrusted input and a non-writable buffer; passing a writable, caller-owned copy of any untrusted string into the conversion removes both the segmentation fault and the unexpected mutation, and validating or rejecting raw \U+XXXX and \M+... escape sequences before conversion avoids the failing iconv path that reaches bit_u_expand. Applications that never expose this conversion API to untrusted input remain unaffected, since normal DWG decode/export uses heap-allocated TV strings from bit_read_TV(). No public exploit code was identified at time of analysis; the priority decision is monitor.
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
LibreDWG is a free C library for reading and writing DWG (AutoCAD drawing) files. The affected routine, bit_TV_to_utf8() in src/bits.c, converts DWG text-value (TV) strings between codepages using iconv(); its public signature takes the source as const char *restrict. The flaw is an aliasing/const-correctness defect classified as CWE-471 (modification of assumed-immutable data), with the advisory also tagging CWE-703 (improper check or handling of exceptional conditions). On an iconv() error other than E2BIG, the function frees its allocated output buffer and then returns bit_u_expand(osrc), where osrc was saved as a cast-away-const alias of the caller's src. bit_u_expand() performs in-place expansion or shrinking of Unicode and multibyte escape sequences using memcpy/memmove, so it writes through that alias: into read-only storage it faults (the advisory's GDB backtrace shows __memcpy_avx_unaligned_erms -> bit_u_expand -> bit_TV_to_utf8 -> main), and into caller-owned writable storage it silently changes the caller's data before returning it. The advisory reproducer passes the literal "\\U+0234" with CP_UTF16, which produces an iconv failure with errno 22 and the crash. The upstream fix replaces the bit_u_expand(osrc) return with the existing allocating fallback bit_TV_to_utf8_codepage(osrc, codepage) and adds a unit test in test/unit-testing/bits_test.c asserting the literal is not modified and no SIGSEGV occurs. Notably, direct file-triggered exploitability through DWG decode/export is unconfirmed, because bit_read_TV() heap-allocates most TV strings, making the aliased buffer mutable rather than read-only.
Know when Libredwg 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
AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:L
AV:L and UI:R because an application must call the API with attacker input; AC:H because it needs an immutable input buffer and a specific non-E2BIG iconv failure; C:N/I:N with A:L as impact is a crash.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
LibreDWG is a free C library to read and write DWG files. Prior to 0.14, bit_TV_to_utf8() in src/bits.c can write to the caller-provided src buffer despite accepting const input. On an iconv() error other than E2BIG, the function frees its output buffer and passes the original input alias to bit_u_expand(), which expands or shrinks Unicode and multibyte escape sequences in place. If the input is a string literal, read-only mapping, or other immutable buffer, the write can cause a segmentation fault and denial of service; mutable caller-owned input can be unexpectedly modified before being returned. This affects applications that expose the conversion API to untrusted input under those conditions. Direct file-triggered exploitability through normal DWG decode/export paths remains unconfirmed because many TV strings are heap allocated by bit_read_TV(). This issue is fixed in version 0.14.
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
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
LibreDWG v0.12.4.4608 & commit f2dea29 was discovered to contain a heap use-after-free via bit_copy_chain. Rated critica
LibreDWG v0.12.3 was discovered to contain a heap-buffer overflow via decode_preR13. Rated critical severity (CVSS 9.8),
GNU LibreDWG 0.10 is affected by: memcpy-param-overlap. Rated high severity (CVSS 8.8), this vulnerability is remotely e
An issue was discovered in GNU LibreDWG 0.7 and 0.7.1645. Rated critical severity (CVSS 9.1), this vulnerability is remo
An issue was discovered in GNU LibreDWG 0.7 and 0.7.1645. Rated critical severity (CVSS 9.1), this vulnerability is remo
A heap based buffer overflow vulnerability exits in GNU LibreDWG 0.10 via: read_2004_section_classes ../../src/decode.c:
A heap based buffer overflow vulnerability exits in GNU LibreDWG 0.10 via bit_read_B ../../src/bits.c:135. Rated high se
A heap based buffer overflow vulnerability exits in GNU LibreDWG 0.10 via bit_search_sentinel ../../src/bits.c:1985. Rat
A heap based buffer overflow vulnerability exits in GNU LibreDWG 0.10 via: read_2004_section_appinfo ../../src/decode.c:
A heap based buffer overflow vulnerability exits in GNU LibreDWG 0.10 via bit_read_RC ../../src/bits.c:318. Rated high s
A heap based buffer overflow vulnerability exists in GNU LibreDWG 0.10 via read_2004_section_revhistory ../../src/decode
A heap based buffer overflow vulnerability exists in GNU LibreDWG 0.10 via read_2004_compressed_section ../../src/decode
EUVD-2026-114464
NVD
CVE.org
EPSS
GitHub
Exploit-DB