Skip to main content

LibreDWG CVE-2026-54610

| EUVDEUVD-2026-114464 LOW
Modification of Assumed-Immutable Data (MAID) (CWE-471)
2026-10-30 GitHub_M
3.3
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Access exposed conversion API locally
  2. Delivery
    Supply crafted \U+XXXX string with failing codepage
  3. Exploit
    Trigger iconv error path (errno ≠ E2BIG)
  4. Execution
    bit_u_expand writes through read-only aliased input
  5. Impact
    Process 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.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

libredwg < 0.14

Affected Packages

euvd libredwg fix: 0.14

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

Vendor (GitHub_M) PRIMARY 3.3 LOW
AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:L
vuln.today AI 2.5 LOW

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.

3.1 AV:L/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:L
4.0 AV:L/AC:H/AT:N/PR:N/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Local
Attack Complexity
Low
Privileges Required
None
User Interaction
Required
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
Low

Lifecycle Timeline

1
Patch available
Oct 30, 2026 - 22:03 EUVD

DescriptionCVE.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

EPSS Score
0.1%
Top 98% exploitable
Prevalence
Low
niche open-source C library for DWG parsing, limited enterprise footprint
Data Quality
3 sources
Confidence: Low

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.

SignalValue
Severity LOW
CISA KEV No
Public POC No
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation· derived
None
System Exposure· derived
Small
Automatable· derived
No
Human Impact· derived
Low

Priority Score

16
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +16
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

CVE-2022-35164 CRITICAL POC
9.8 Aug 18

LibreDWG v0.12.4.4608 & commit f2dea29 was discovered to contain a heap use-after-free via bit_copy_chain. Rated critica

CVE-2021-28237 CRITICAL POC
9.8 Dec 02

LibreDWG v0.12.3 was discovered to contain a heap-buffer overflow via decode_preR13. Rated critical severity (CVSS 9.8),

CVE-2020-21844 HIGH POC
8.8 May 17

GNU LibreDWG 0.10 is affected by: memcpy-param-overlap. Rated high severity (CVSS 8.8), this vulnerability is remotely e

CVE-2019-9775 CRITICAL POC
9.1 Mar 14

An issue was discovered in GNU LibreDWG 0.7 and 0.7.1645. Rated critical severity (CVSS 9.1), this vulnerability is remo

CVE-2019-9774 CRITICAL POC
9.1 Mar 14

An issue was discovered in GNU LibreDWG 0.7 and 0.7.1645. Rated critical severity (CVSS 9.1), this vulnerability is remo

CVE-2020-21833 HIGH POC
8.8 May 17

A heap based buffer overflow vulnerability exits in GNU LibreDWG 0.10 via: read_2004_section_classes ../../src/decode.c:

CVE-2020-21841 HIGH POC
8.8 May 17

A heap based buffer overflow vulnerability exits in GNU LibreDWG 0.10 via bit_read_B ../../src/bits.c:135. Rated high se

CVE-2020-21840 HIGH POC
8.8 May 17

A heap based buffer overflow vulnerability exits in GNU LibreDWG 0.10 via bit_search_sentinel ../../src/bits.c:1985. Rat

CVE-2020-21838 HIGH POC
8.8 May 17

A heap based buffer overflow vulnerability exits in GNU LibreDWG 0.10 via: read_2004_section_appinfo ../../src/decode.c:

CVE-2020-21843 HIGH POC
8.8 May 17

A heap based buffer overflow vulnerability exits in GNU LibreDWG 0.10 via bit_read_RC ../../src/bits.c:318. Rated high s

CVE-2020-21842 HIGH POC
8.8 May 17

A heap based buffer overflow vulnerability exists in GNU LibreDWG 0.10 via read_2004_section_revhistory ../../src/decode

CVE-2020-21832 HIGH POC
8.8 May 17

A heap based buffer overflow vulnerability exists in GNU LibreDWG 0.10 via read_2004_compressed_section ../../src/decode

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy