Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <537a4ffc-7e54-470f-8c64-3dcf5131a606@hoffie.info>
Date: Fri, 26 Sep 2025 09:30:24 +0200
From: Christian Hoffmann <christian@...fie.info>
To: oss-security@...ts.openwall.com
Subject: libtiff 4.7.0: Out-of-Bounds Write in TIFFReadRGBAImageOriented()
 (CVE-2025-9900)

Hi,

on 2025-09-23 CVE-2025-9900 was published for libtiff 4.7.0 and it seems 
to have gained some traction due to the potential risk of code execution 
via malicious TIFF files.
I was wondering about the real world criticality for software which uses 
libtiff. I did some investigation and I'm looking for validation or 
falsification of those findings.

# Background
According to the CVE details, the CVE is about an advisory [1] by Github 
user SexyShoelessGodofWar. Further research turns up Issue #704 in the 
Gitlab libtiff issue tracker [2] from 2025-05-14 which also contains a 
reproducer (attached testGen.py and poc_crasher.c) and links the 
relevant patch [3].

# Observations
1. poc_crasher.c calls libtiff's TIFFReadRGBAImage with width and height 
values which are smaller then the actual TIFF dimensions when an image 
with width or height > 10000 is supplied. Based on the libtiff API 
documentation, this is a supported use case ("If the raster dimensions 
are smaller than the image, the image data is cropped to the raster 
bounds." [4]).
2. The test file (generated via testGen.py) does not show any obviously 
suspicious behavior when loaded in GIMP, imagemagick or evince. I have 
not checked all possible call sites, but I believe that at least those 
listed tools always call the affected function TIFFReadRGBAImage with 
the actual TIFF's dimensions and as such don't hit the bug. 
SexyShoelessGodofWar also confirmed that Evince did not seem affected 
and that other tools are still under investigation.
3. When loading a plain 1024x768 sized TIFF file (generated via GIMP), 
libtiff exhibits the same value when passed height=256. This suggests 
that the actual libtiff usage is very relevant and the potentially 
malicious TIFF file maybe less so.

# Fixes
Besides Merge Request 732 [3], Merge Request 738 [6] also touches this 
code path and may be relevant.
libtiff 4.7.1 was released on 2025-09-18 and lists Issue #704 (this CVE) 
as fixed [7].


# First conclusion
Based on my understanding, libtiff users would only be affected by this 
issue under specific circumstances. The issue would be limited to 
libtiff users which call TIFFReadRGBAImage or TIFFReadRGBAImageOriented 
with a smaller height than the actual TIFF's height (i.e. cropping the 
image on read). For example, this would be exploitable if an application 
used a static or attacker-supplied height which is smaller than the 
height of the attacker-supplied TIFF.
My gut feeling is that this should not be common (especially since this 
would crash during ordinary usage), but it's hard for me to tell if this 
matches reality.
I currently do not see a way for an attacker to confuse libtiff into 
returning a small height to the libtiff user and later use a larger 
height from the same TIFF file internally.


Note:
- I do not want to downplay the issue. There seems to be an actual bug 
and it may be security-relevant in more cases than I can think of. I'm 
posting this to start a potential discussion about that.
- I'm not affiliated with the researcher, I'm just sharing my findings 
and observations in the hope that they help libtiff downstream users and 
in the hope that further confirmation or falisification of those 
findings appear.


Kind regards,
Christian


[1] 
https://github.com/SexyShoelessGodofWar/LibTiff-4.7.0-Write-What-Where?tab=readme-ov-file
[2] https://gitlab.com/libtiff/libtiff/-/issues/704 
(libtiff-gitlab-issue-704.txt)
[3] https://gitlab.com/libtiff/libtiff/-/merge_requests/732
[4] 
https://gitlab.com/libtiff/libtiff/-/blob/5fe20d0e9aba49a6a350ed533459d1505203838f/doc/functions/TIFFReadRGBAImage.rst

[5] 
https://github.com/SexyShoelessGodofWar/LibTiff-4.7.0-Write-What-Where/issues/1#issuecomment-3335973158
 > I had caused crashes in one application (but interestingly I recall,
 > it was through memory exhaustion), but further investigation was
 > earmarked for future work - I've not really looked more deeply into
 > this. Some of the other applications i'd tried. Evince was one of
 > them, and that didn't crash - this is generally just due to some pre-
 > processing of the file or additional checks that sit infront of the
 > vulnerable code path. I speculate a little here, but am pretty certain
 > this will be the mitigating factor.

[6] https://gitlab.com/libtiff/libtiff/-/merge_requests/738

[7] https://libtiff.gitlab.io/libtiff/releases/v4.7.1.html
 > tif_getimage.c: Fix buffer underflow crash for less raster rows
 > at TIFFReadRGBAImageOriented() (fixes issue #704)

Vendor CVE pages:
https://access.redhat.com/security/cve/cve-2025-9900
https://www.suse.com/security/cve/CVE-2025-9900.html
https://ubuntu.com/security/CVE-2025-9900
https://security-tracker.debian.org/tracker/CVE-2025-9900
View attachment "poc_crasher.c" of type "text/x-csrc" (2823 bytes)

View attachment "testGen.py" of type "text/x-python" (1157 bytes)

View attachment "libtiff-gitlab-issue-704.txt" of type "text/plain" (2548 bytes)

Powered by blists - more mailing lists

Please check out the Open Source Software Security Wiki, which is counterpart to this mailing list.

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.