Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft malformed pre-R13 DWG (AC1.40)
-
DeliveryDeliver file to user or automated pipeline
-
ExploitTool calls dwg_read_file() on untrusted file
-
Executiondecode_preR13_entities enters nonterminating allocation loop
-
ImpactUnbounded memory growth triggers OOM-kill
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Loop termination conditions
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the target to parse an attacker-supplied, untrusted pre-R13 DWG file (the minimized PoC uses the AC1.40 magic header) through dwg_read_file() using an affected LibreDWG build (<=0.14, prior to nightly 0.14.8413); all bundled tools sharing this decode path are affected, including dwg2dxf, dwgread and dwg2svg. No authentication or privileges are required (PR:N). Limiting factors: impact is availability-only (process memory exhaustion/OOM-kill - no code execution, data disclosure or integrity loss); the file must actually be opened/processed by a user or an automated pipeline (UI:R), so the attacker needs a delivery channel into such a workflow; and the specific trigger path is the pre-R13 entity decoder, so only files reaching that decoder are relevant. |
| Impact | This is a genuine but bounded issue - a denial-of-service only, not a path to code execution or data exposure. The NVD vector CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H (5.5 Medium) reflects that: the only impact metric set is A:H, with C:N and I:N. The LibreDWG advisory independently scores it AV:N (6.5 Medium); this attack-vector disagreement is unresolved in the available data - AV:L fits a user opening a file in a local tool, while AV:N fits an untrusted file reaching a network-facing converter or CI pipeline, so the real figure depends on deployment. No CISA KEV listing and no EPSS score are present in the input, so there is no signal of active or probable exploitation; exploitation status is best described as a public PoC reference existing (see below) rather than confirmed exploitation. The vuln.today decision label is 'this_month', i.e. prioritized but explicitly not an emergency - consistent with a credible, reproducible DoS that lacks the integrity/confidentiality impact or active-exploitation evidence that would justify emergency handling. Net: a real, worth-patching availability bug for anyone parsing untrusted DWG files, not a high-CVSS-but-low-real-risk phantom, but also not a drop-everything priority. |
| Exploit ScenarioDerived | An attacker crafts a malformed pre-R13 DWG file (magic header AC1.40) and delivers it to a target that parses DWGs via LibreDWG - for example a document-conversion service, a CAD viewer, or a CI asset pipeline that runs dwg2dxf, dwgread or dwg2svg. When dwg_read_file() processes the file, decode_preR13_entities() enters a nonterminating loop that allocates a new object every iteration, consuming memory without bound until the process is OOM-killed or realloc fails. The GHSA advisory includes a verified 496-byte minimized PoC and reproduction steps, so the trigger is demonstrated rather than theoretical. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 30, 2026
Memory-exhaustion denial of service in LibreDWG 0.14 and earlier lets a crafted pre-R13 DWG file drive the pre-R13 entity decoder into a loop with no reachable normal exit, allocating a new object on every iteration until the process is OOM-killed or realloc fails. Any application or tool that calls dwg_read_file() on untrusted input is affected - including the bundled dwg2dxf, dwgread and dwg2svg - so a CAD viewer, document converter or CI asset pipeline that processes a malformed file supplied by a user or an automated feed can be taken down; the impact is availability only, with no code execution or data disclosure. No authentication is required, but the file must actually be opened by the target workflow. A 496-byte minimized proof-of-concept (magic header AC1.40) is published in the upstream advisory together with reproduction steps using dwgread; that PoC is a denial-of-service reproducer, not verified exploit code for other impact classes, and no CISA KEV entry exists for this issue.
RemediationAI
Vendor-released patch: upgrade to nightly version 0.14.8413 (https://github.com/LibreDWG/libredwg/releases/tag/0.14.8413); distributions and downstream packagers still carrying <=0.14 can instead backport commit 4e14952c43be5b8feff6e54a61af3425d6ca95a4, which recalculates size from the clamped end and adds a per-iteration no-advance check. Note that the clamping and no-progress changes shipped for issue #1131 do not close this hole, so a build carrying only those earlier fixes remains vulnerable. Where upgrading is not immediately possible, the effective compensating controls are containment and input filtering: run converters and any dwg_read_file() consumer inside a cgroup / RLIMIT_AS memory cap or a disposable container so allocation failure surfaces as DWG_ERR_OUTOFMEM and the job dies alone instead of OOM-killing the host - the trade-off is that the malicious file still fails to process and the worker must be restarted; and reject or quarantine pre-R13 DWG inputs (files whose first bytes are the AC1.x magic, as in the 496-byte PoC) at the ingestion boundary before they reach the decoder, which costs legitimate legacy-file support. Because exploitation requires the victim to open or pipeline a supplied file, treating DWG attachments from untrusted sources as hostile until they have been through a patched decoder is the practical preventive measure; no credentials or privileges are needed by the attacker, so authentication controls alone do not help.
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
The flaw lives in LibreDWG's pre-R13 DWG decoder, which is fed by two raw, file-controlled header fields, entities_start and entities_end, both of type BITCODE_RL. In decode_preR13 (src/decode_r11.c) the caller computes the loop bound as size = entities_end - entities_start before the call and passes it into decode_preR13_entities (src/decode.c) as a separate argument. The callee clamps the end argument to dat->size when the header value is corrupt (logging 'Corrupt end ... fixed to filesize') but never recomputes size from the clamped end, so the iteration loop continues to test dat->byte < oldpos + size against the original, file-controlled length. Once dat->byte reaches the real end of the buffer, bit_read_RC and bit_read_RS stop advancing and emit 'buffer overflow' errors, and both escape hatches fail: the overflow abort requires dat->byte != end, which is now false because end equals dat->size, and the no-advance guard compares against oldpos saved once before the loop rather than the previous iteration, so it can never fire after the first entity is decoded. Each iteration still performs num++ with dwg->object reallocated in doubling steps plus a memset of the new slot, so resident memory climbs steadily (the advisory's sampling shows roughly 17 MB/s) until allocation fails with DWG_ERR_OUTOFMEM or the process is OOM-killed. The issue is filed as CWE-835 (loop with unreachable exit condition) and is rooted in unchecked quantity validation (CWE-1284) leading to uncontrolled resource consumption (CWE-400/CWE-789). It persists despite the entities_end clamping and no-progress abort added for the earlier issue #1131; commit 4e14952c43be5b8feff6e54a61af3425d6ca95a4 fixes it by recalculating size from the clamped end (or zeroing it) and by saving a per-iteration iter_start to compare against instead of the pre-loop oldpos.
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:H
Local tool must parse an attacker-supplied file (AV:L, UI:R); no auth needed (PR:N); deterministic trigger (AC:L); only availability affected via memory exhaustion (A:H, C:N/I:N).
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.8413, a crafted pre-R13 DWG can make decode_preR13_entities() in src/decode.c enter a nonterminating loop that allocates a new object each iteration. decode_preR13 in src/decode_r11.c computes size from the raw file-controlled entities_start and entities_end header bounds; the callee clamps end to dat->size but never recalculates size. At end of input, bit_read_RC and bit_read_RS stop advancing dat->byte, the overflow guard fails because end equals dat->size, and the no-advance check compares against oldpos saved before the loop instead of the previous iteration. This leaves repeated allocation of dwg->object entries until allocation fails or the process is OOM-killed, not merely a constant-memory CPU hang. The defect remains after the clamping and no-progress changes associated with the earlier issue 1131. Applications and tools calling dwg_read_file() on untrusted files, including dwg2dxf, dwgread and dwg2svg, can suffer denial of service when a user or automated pipeline opens a malformed file; no attacker credentials are required. This issue is fixed in repository nightly version 0.14.8413.
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-114463
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB