Exiv2 version 0.28.9 is released today, with fixes for 1 moderate and 6 low severity vulnerabilities. We are also planning to include a security-related change in the upcoming 0.29.0 release: more details at the end.
https://github.com/Exiv2/exiv2/security/advisories/GHSA-3695-mjv8-3r52 (moderate severity, CVE-2026-68546) Out-of-bounds write in RemoteIo::Impl::populateBlocks(). The bug is in the RemoteIo class, which is only used when Exiv2 is run on a URL, rather than a local file. In other words, to trigger the bug, Exiv2 needs to be run like this:
bash exiv2 https://dodgywebsite.com/poc.jpg
https://github.com/Exiv2/exiv2/security/advisories/GHSA-jcgh-p9v3-pw6j (low severity, CVE-2026-68547) Out-of-bounds read in RemoteIo::Impl::populateBlocks(). The bug is in the RemoteIo class, which is only used when Exiv2 is run on a URL, rather than a local file. In other words, to trigger the bug, Exiv2 needs to be run like this:
bash exiv2 https://dodgywebsite.com/poc.jpg
https://github.com/Exiv2/exiv2/security/advisories/GHSA-hxph-pv7w-8649 (low severity, CVE-2026-49275) Out-of-bounds read in CrwMap::decodeBasic(). The bug is reproducible with our fuzz target, but we have not been able to reproduce it with the exiv2 command line application.
https://github.com/Exiv2/exiv2/security/advisories/GHSA-vg6c-9f6h-4x5q (low severity, CVE requested) Out-of-bounds write in RemoteIo::mmap(). The bug is in the RemoteIo class, which is only used when Exiv2 is run on a URL, rather than a local file. Furthermore, the bug is only triggered when using Exiv2 to list available image previews (the -pp command line option). In other words, to trigger the bug, Exiv2 needs to be run like this:
bash exiv2 -pp https://dodgywebsite.com/poc.jpg
https://github.com/Exiv2/exiv2/security/advisories/GHSA-9v3x-mhg4-wwv2 (low severity, CVE requested) Out-of-bounds write in Exiv2::http(). The bug can only be triggered by running Exiv2 on a URL, rather than a local file. The easiest way to reproduce the bug is by calling Exiv2 with an unrealistically long command line argument:
bash exiv2 -pa python -c "print('http://127.0.0.1:8769/' + 'A' 100000)"
The above reproduction steps are a self-pwn, which would make this a regular bug, not a vulnerability. However, we are treating it as a vulnerability because there is also a possibility that the bug could be triggered by a command like this:
bash exiv2 -Mset Exif.Image.Artist PwnMe https://dodgywebsite.com/poc.jpg
https://github.com/Exiv2/exiv2/security/advisories/GHSA-fgw8-p7pr-37cp (low severity, CVE requested) Denial of service in QuickTimeVideo::userDataDecoder(): an invalid input file can cause QuickTimeVideo::userDataDecoder() to get stuck in an infinite loop during parsing. The vulnerability can be triggered by running Exiv2 on a crafted file, like this:
bash exiv2 poc.mov
https://github.com/Exiv2/exiv2/security/advisories/GHSA-pwvq-9w4q-786w (low severity, CVE requested) Denial of service in PgfImage::readMetadata(). The vulnerability can be triggered by running Exiv2 on a crafted file, like this:
bash exiv2 poc.pgf
This causes Exiv2 to rapidly allocate a very large amount of memory, which can impact system performance.
Security related note on the upcoming 0.29.0 release We have been receiving a very large number of "denial of service" vulnerability reports, all of them variations on the theme: "deeply nested file causes stack exhaustion". Exiv2 uses recursion to parse image files, so it is relatively easy for a crafted file to cause Exiv2 to run out of stack. On Linux, there is a very simple solution to this issue, which is to increase your stack size with the ulimit command. But that solution doesn't work on macOS and Windows which have relatively low hard limits on the stack size. So we are planning to fix this issue by adding a recursion depth limit to all the parsers. Unfortunately, this will involve changing libexiv2's public API, so we cannot do it in the 0.28.x series. We are planning to include this change in the upcoming 0.29.0 release instead. For more details on this issue, see https://github.com/Exiv2/exiv2/issues/9414
Exiv2 is a C++ library and a command-line utility to read, write, delete and modify Exif, IPTC, XMP and ICC image metadata. Prior to version 0.28.8, an out-of-bounds read was found. The vulnerability is in the CRW image parser. This issue has been patched in version 0.28.8.
Exiv2 is a C++ library and a command-line utility to read, write, delete and modify Exif, IPTC, XMP and ICC image metadata. Prior to version 0.28.8, an out-of-bounds read was found in Exiv2. The vulnerability is in the preview component, which is only triggered when running Exiv2 with an extra command line argument, like -pp. The out-of-bounds read is at a 4GB offset, which usually causes Exiv2 to crash. This issue has been patched in version 0.28.8.
Exiv2 is a C++ library and a command-line utility to read, write, delete and modify Exif, IPTC, XMP and ICC image metadata. Prior to version 0.28.8, an uncaught exception was found in Exiv2. The vulnerability is in the preview component, which is only triggered when running Exiv2 with an extra command line argument, like -pp. Due to an integer overflow, the code attempts to create a huge std::vector, which causes Exiv2 to crash with an uncaught exception. This issue has been patched in version 0.28.8.
Exiv2 version 0.28.8 was released yesterday (2026-03-01) with fixes for three CVEs:
CVE-2026-25884: Out-of-bounds read in CrwMap::decode0x0805 Impact: low severity, because we're only able to reproduce this with our fuzz target, not with the exiv2 command-line application. Credit: found by Google OSS-Fuzz
CVE-2026-27596: Integer overflow in LoaderNative::getData() causes out-of-bounds read Impact: low severity, because it is only triggered when running Exiv2 with an extra command line argument, like -pp. The out-of-bounds read is at a 4GB offset, which typically causes a crash. Credit: found by @zerojackyi
CVE-2026-27631: Uncaught exception: cannot create std::vector larger than maxsize() Impact: low severity, because it is only triggered when running Exiv2 with an extra command line argument, like -pp. This issue causes Exiv2 to crash with an uncaught exception. Credit: found by team Exiv2
The second issue (CVE-2026-27596) is perhaps the most interesting because it looks to me like it was found by AI. I think the report looks AI-generated, but it's also unusual for a poc to be written in Python, since most Exiv2 bugs are found by fuzzing. In the past, a poc like this would have indicated that it was hand-crafted by a human, but these days AI seems more likely. Although we've rated it low-severity, it was a useful report to receive because it uncovered a gap in our fuzzing coverage. We have now added a new fuzz-target to address that gap, which is how we found the third issue (CVE-2026-27631).
One more thing that I'd like to mention: we have stopped supporting older versions of Exiv2. If you haven't done so already, please consider upgrading to the 0.28 series.
Thanks,
Kev
Links: https://github.com/Exiv2/exiv2/releases/tag/v0.28.8 https://github.com/Exiv2/exiv2/security/advisories/GHSA-9mxq-4j5g-5wrp https://github.com/Exiv2/exiv2/security/advisories/GHSA-3wgv-fg4w-75x7 https://github.com/Exiv2/exiv2/security/advisories/GHSA-p2pw-7935-c73j
Impact A heap buffer overflow was found in Exiv2 versions v0.28.0 to v0.28.4. Versions prior to v0.28.0, such as v0.27.7, are not affected. Exiv2 is a command-line utility and C++ library for reading, writing, deleting, and modifying the metadata of image files. The heap overflow is triggered when Exiv2 is used to write metadata into a crafted image file. An attacker could potentially exploit the vulnerability to gain code execution, if they can trick the victim into running Exiv2 on a crafted image file.
Note that this bug is only triggered when writing the metadata, which is a less frequently used Exiv2 operation than reading the metadata. For example, to trigger the bug in the Exiv2 command-line application, you need to add an extra command-line argument such as fixiso.
Patches The bug is fixed in version v0.28.5.
References Issue: https://github.com/Exiv2/exiv2/issues/3168 Fix: https://github.com/Exiv2/exiv2/pull/3174
For more information Please see our security policy for information about Exiv2 security.
Impact An out-of-bounds read was found in Exiv2 version v0.28.1. The vulnerable function, QuickTimeVideo::NikonTagsDecoder, was new in v0.28.0 (see https://github.com/Exiv2/exiv2/pull/2337), so Exiv2 versions before v0.28 are not affected. Exiv2 is a command-line utility and C++ library for reading, writing, deleting, and modifying the metadata of image files. The out-of-bounds read is triggered when Exiv2 is used to read the metadata of a crafted video file.
Patches The bug is fixed in version v0.28.2.
For more information Please see our security policy for information about Exiv2 security.
Credit This bug was found by OSS-Fuzz.
Impact A denial-of-service was found in Exiv2 version v0.28.1: an unbounded recursion can cause Exiv2 to crash by exhausting the stack. The vulnerable function, QuickTimeVideo::multipleEntriesDecoder, was new in v0.28.0 (see https://github.com/Exiv2/exiv2/pull/2337), so Exiv2 versions before v0.28 are not affected. Exiv2 is a command-line utility and C++ library for reading, writing, deleting, and modifying the metadata of image files. The denial-of-service is triggered when Exiv2 is used to read the metadata of a crafted video file.
Patches The bug is fixed in version v0.28.2.
For more information Please see our security policy for information about Exiv2 security.
Credit This bug was found by OSS-Fuzz.
Exiv2 is a command-line utility and C++ library for reading, writing, deleting, and modifying the metadata of image files. An infinite loop was found in Exiv2 versions v0.27.4 and earlier. The infinite loop is triggered when Exiv2 is used to modify the metadata of a crafted image file. An attacker could potentially exploit the vulnerability to cause a denial of service, if they can trick the victim into running Exiv2 on a crafted image file. Note that this bug is only triggered when deleting the IPTC data, which is a less frequently used Exiv2 operation that requires an extra command line option (-d I rm). The bug is fixed in version v0.27.5.
Exiv2 is a command-line utility and C++ library for reading, writing, deleting, and modifying the metadata of image files. An infinite loop was found in Exiv2 versions v0.27.4 and earlier. The infinite loop is triggered when Exiv2 is used to print the metadata of a crafted image file. An attacker could potentially exploit the vulnerability to cause a denial of service, if they can trick the victim into running Exiv2 on a crafted image file. Note that this bug is only triggered when printing the image ICC profile, which is a less frequently used Exiv2 operation that requires an extra command line option (-p C). The bug is fixed in version v0.27.5.
Exiv2 is a command-line utility and C++ library for reading, writing, deleting, and modifying the metadata of image files. An out-of-bounds read was found in Exiv2 versions v0.27.4 and earlier. The out-of-bounds read is triggered when Exiv2 is used to write metadata into a crafted image file. An attacker could potentially exploit the vulnerability to cause a denial of service by crashing Exiv2, if they can trick the victim into running Exiv2 on a crafted image file. Note that this bug is only triggered when writing the metadata, which is a less frequently used Exiv2 operation than reading the metadata. For example, to trigger the bug in the Exiv2 command-line application, you need to add an extra command-line argument such as insert. The bug is fixed in version v0.27.5.
Exiv2 is a command-line utility and C++ library for reading, writing, deleting, and modifying the metadata of image files. An out-of-bounds read was found in Exiv2 versions v0.27.4 and earlier. The out-of-bounds read is triggered when Exiv2 is used to print the metadata of a crafted image file. An attacker could potentially exploit the vulnerability to cause a denial of service, if they can trick the victim into running Exiv2 on a crafted image file. Note that this bug is only triggered when printing the image ICC profile, which is a less frequently used Exiv2 operation that requires an extra command line option (-p C). The bug is fixed in version v0.27.5.
Exiv2 is a command-line utility and C++ library for reading, writing, deleting, and modifying the metadata of image files. An out-of-bounds read was found in Exiv2 versions v0.27.4 and earlier. The out-of-bounds read is triggered when Exiv2 is used to read the metadata of a crafted image file. An attacker could potentially exploit the vulnerability to cause a denial of service, if they can trick the victim into running Exiv2 on a crafted image file. The bug is fixed in version v0.27.5.
Exiv2 is a command-line utility and C++ library for reading, writing, deleting, and modifying the metadata of image files. An infinite loop was found in Exiv2 versions v0.27.4 and earlier. The infinite loop is triggered when Exiv2 is used to modify the metadata of a crafted image file. An attacker could potentially exploit the vulnerability to cause a denial of service, if they can trick the victim into running Exiv2 on a crafted image file. Note that this bug is only triggered when deleting the IPTC data, which is a less frequently used Exiv2 operation that requires an extra command line option (-d I rm). The bug is fixed in version v0.27.5.
Exiv2 is a command-line utility and C++ library for reading, writing, deleting, and modifying the metadata of image files. A null pointer dereference was found in Exiv2 versions v0.27.4 and earlier. The null pointer dereference is triggered when Exiv2 is used to print the metadata of a crafted image file. An attacker could potentially exploit the vulnerability to cause a denial of service, if they can trick the victim into running Exiv2 on a crafted image file. Note that this bug is only triggered when printing the interpreted (translated) data, which is a less frequently used Exiv2 operation that requires an extra command line option (-p t or -P t). The bug is fixed in version v0.27.5.
Exiv2 is a command-line utility and C++ library for reading, writing, deleting, and modifying the metadata of image files. A null pointer dereference was found in Exiv2 versions v0.27.4 and earlier. The null pointer dereference is triggered when Exiv2 is used to print the metadata of a crafted image file. An attacker could potentially exploit the vulnerability to cause a denial of service, if they can trick the victim into running Exiv2 on a crafted image file. Note that this bug is only triggered when printing the interpreted (translated) data, which is a less frequently used Exiv2 operation that requires an extra command line option (-p t or -P t). The bug is fixed in version v0.27.5.
A flaw was found in Exiv2 in versions before and including 0.27.4-RC1. Improper input validation of the rawData.size property in Jp2Image::readMetadata() in jp2image.cpp can lead to a heap-based buffer overflow via a crafted JPG image containing malicious EXIF data.
In Jp2Image::readMetadata() in jp2image.cpp in Exiv2 0.27.2, an input file can result in an infinite loop and hang, with high CPU consumption. Remote attackers could leverage this vulnerability to cause a denial of service via a crafted file.
Exiv2 0.27.2 allows attackers to trigger a crash in Exiv2::getULong in types.cpp when called from Exiv2::Internal::CiffDirectory::readDirectory in crwimageint.cpp, because there is no validation of the relationship of the total size to the offset and size.
A CiffDirectory::readDirectory integer overflow and out-of-bounds read in Exiv2 through 0.27.1 allows an attacker to cause a denial of service (SIGSEGV) via a crafted CRW image file.
A flaw was found in Exiv2 0.26. A heap-based buffer over-read in Exiv2::IptcParser::decode in iptc.cpp (called from psdimage.cpp in the PSD image reader). This could lead to a denial of service caused by an integer overflow via a crafted PSD image file.
References: https://github.com/Exiv2/exiv2/issues/427
Upstream Patch: https://github.com/Exiv2/exiv2/pull/518
A flaw was found in Exiv2 0.26. An infinite loop in Exiv2::PsdImage::readMetadata in psdimage.cpp in the PSD image reader. This could lead to a denial of service caused by an integer overflow via a crafted PSD image file.
References: https://github.com/Exiv2/exiv2/issues/426
Upstream Patch: https://github.com/Exiv2/exiv2/pull/518
A flaw was found in Exiv2 0.26. The CiffDirectory::readDirectory() function at crwimageint.cpp has an excessive stack consumption due to a recursive function, leading to Denial of service.
References: https://github.com/Exiv2/exiv2/issues/460 https://github.com/SegfaultMasters/covering360/blob/master/Exiv2
Exiv2::Internal::PngChunk::parseTXTChunk in Exiv2 v0.26 allows remote attackers to cause a denial of service (heap-based buffer over-read) via a crafted image file, a different vulnerability than CVE-2018-10999.
A flaw was found in Exiv2 0.26. An integer overflow in LoaderTiff::getData() in preview.cpp, leading to an out-of-bounds read in Exiv2::ValueType::setDataArea in value.hpp.
References: https://github.com/Exiv2/exiv2/issues/366 https://github.com/TeamSeri0us/pocs/blob/master/exiv2/2-out-of-read-Poc
Patch: https://github.com/Exiv2/exiv2/commit/341de4500ab993103c215bfb07d43d4a08654ac4
Exiv2 0.26 has an integer overflow in the LoaderExifJpeg class in preview.cpp, leading to an out-of-bounds read in Exiv2::MemIo::read in basicio.cpp.
Exiv2 0.26 has a heap-based buffer overflow in getData in preview.cpp.
An issue was discovered in Exiv2 0.26. The Exiv2::Internal::PngChunk::parseTXTChunk function has a heap-based buffer over-read.
An issue was discovered in Exiv2 0.26. readMetadata in jp2image.cpp allows remote attackers to cause a denial of service (SIGABRT) by triggering an incorrect Safe::add call.
In types.cpp in Exiv2 0.26, a large size value may lead to a SIGABRT during an attempt at memory allocation for an Exiv2::Internal::PngChunk::zlibUncompress call.