CSIRTS // UNIFIED SECURITY ADVISORY FEEDSYS ● ONLINE · POWERED BY INTELFUSIONS.COM

GHSA-g77h-45rf-hcx4: ExifReader HEIC/AVIF ISO-BMFF parser throws uncaught RangeError on truncated boxes

mediumCVSS 5.3CVE-2026-53496
Summary ExifReader 4.40.0 can throw an uncaught RangeError: Offset is outside the bounds of the DataView while parsing crafted HEIC/AVIF files. The file only needs a valid leading ftyp box with a HEIC/AVIF major brand followed by a malformed ISO-BMFF box, such as an empty 8-byte free box or a truncated extended-size box. This is reachable through the public ExifReader.load() API for in-memory buffers and through the async file/URL loaders when an application parses attacker-supplied images. In applications that do not wrap every parse in a defensive try/catch, a single uploaded or fetched image can abort the request/worker and cause a denial of service. Credit requested: Yaohui Wang. Affected version tested - npm package: exifreader - Version: 4.40.0 - Repository commit tested: 8cb0261a26b7d986955fe0a6780f076dcb7902e7 Root cause The ISO-BMFF parser assumes that every top-level box with at least an 8-byte header also has enough bytes for the fields required by its parsed form. In src/image-header-iso-bmff.js: - findMetaBox() calls parseBox(dataView, offset) while only checking that offset + 8 <= dataView.byteLength. - parseBox() calls getBoxLength() and then unconditionally reads fields such as the full-box version byte for meta/iloc/iinf/idat boxes. - getBoxLength() handles boxLength === 1 by calling hasEmptyHighBits(dataView, offset), which reads dataView.getUint32(offset + 8) without first checking that the 64-bit extended size field is present. As a result, syntactically small or truncated boxes after a valid HEIC/AVIF ftyp box escape the format-detection catch blocks and throw from the main parsing path. Reproduction Run this from the repository root against the committed dist/exif-reader.js bundle: const ExifReader = require('./dist/exif-reader.js'); function u32be(n) { return [(n >>> 24) & 255, (n >>> 16) & 255, (n >>> 8) & 255, n & 255]; } function ascii(s) { return Array.from(Buffer.from(s, 'ascii')); } function box(type, content = []) { return

Details

Source
GitHub Security Advisories (INTL · database · site)
Severity
medium — CVSS 5.3
Published
2026-07-17
Last updated
2026-07-17
Exploitation
Not in CISA KEV at last sync

Original advisory: https://github.com/advisories/GHSA-g77h-45rf-hcx4

Referenced CVEs

CVECSIRTS overviewExternal
CVE-2026-53496coverage & exploitation statusNVD · CVE.org

More from GitHub Security Advisories