
Erzeugt manipulierte TIFF/DNG-Dateien, um Out-of-Bounds-Schreibzugriffe in Samsungs libimagecodec.quram.so auszulösen, einschließlich Binäranalyse und Reproduktionsschritten.
Dieses Repository enthält konzeptionelle Proof-of-Concept-Dateien (PoC), die
Out-of-Bounds-Schreibschwachstellen (OOB) in der Quramsoft-Bildcodec-Bibliothek
(libimagecodec.quram.so) demonstrieren, die auf Samsung-Android-Geräten verwendet wird.
| CVE | Format | Typ | Schweregrad | CVSS 4.0 | Behoben in |
|---|---|---|---|---|---|
| CVE-2026-21045 | TIFF | Out-of-Bounds Write (CWE-787) | Kritisch | 8.4 | SMR Jul-2026 Release 1 |
| CVE-2026-21048 | DNG | Out-of-Bounds Write (CWE-787) | Hoch | — | SMR Jul-2026 Release 1 |
/system/lib64/libimagecodec.quram.soDie Schwachstelle befindet sich in der IFD-Tag-Parsing-Funktion (Image File Directory)
WINKJ_ReadExifField (Offset 0x13a0a8 in der 64-Bit-Binärdatei). Diese Funktion
verarbeitet einzelne TIFF/EXIF-IFD-Einträge, jeweils eine 12-Byte-Struktur:
Offset Size Field
------ ---- -----
0 2 Tag ID
2 2 Data Type (1=BYTE, 2=ASCII, 3=SHORT, 4=LONG, 5=RATIONAL, etc.)
4 4 Count (number of values)
8 4 Value / Offset to data
Wenn count * element_size > 4, wird das 4-Byte-Feld Value als Datei-Offset
behandelt (der auf die tatsächlichen Daten zeigt). Der Code führt dann eine Grenzprüfung
an der Adresse 0x13a258 durch:
add w8, w6, w7 ; w8 = value_offset + (count * element_size) [32-bit]
cmp w8, w5 ; compare against remaining buffer size
b.ls ok ; if w8 <= buffer_size, proceed
Die Schwachstelle ist ein 32-Bit-Integer-Überlauf ohne Vorzeichen bei der Addition.
Wenn ein Angreifer value_offset und count * element_size so gestaltet, dass ihre
Summe auf einen kleinen Wert überläuft, besteht die Prüfung, obwohl der tatsächliche
Speicherzugriff bei base + value_offset außerhalb der Grenzen liegt.
Beispiel (Typ UNDEFINED, element_size = 1):
Die 32-Bit-Addition 0x17FFF + 0xFFFF0001 = 0x10008000 wird auf 0x8000
abgeschnitten, was buffer_size entspricht. Die Prüfung besteht, aber der tatsächliche
Datenzeiger (base + 0x17FFF) liegt 0x7FFF Bytes hinter dem Ende des zugewiesenen Puffers.
TIFFReadDirectory / WINKJ_ReadTiffInfo
└─> WINKJ_ReadTiffIFDInfo (allocates IFD buffer)
└─> for each IFD entry:
└─> WINKJ_ReadExifField (parses entry, reads value data)
└─> Switch on Data Type (jump table at 0x13a15c)
├─ Type 0 (BYTE/ASCII/UNDEFINED): handler at 0x13a15c
├─ Type 3/8 (SHORT/SSHORT): handler at 0x13a1d0
├─ Type 4/9/11 (LONG/SLONG/FLOAT): handler at 0x13a17c
└─ Type 5/10/12 (RATIONAL/SRATIONAL/DOUBLE): handler at 0x13a1ac
Each handler -> reads data at offset -> bounds check at 0x13a258
| Datei | Beschreibung |
|---|---|
cve-2026-21045_tiff_oob_poc.py | Erzeugt poc_crash.tif — manipulierte TIFF-Datei, die einen OOB-Write über ein ASCII-Tag mit manipuliertem Count/Offset auslöst |
cve-2026-21048_dng_oob_poc.py | Erzeugt poc_crash.dng — manipulierte DNG-Datei, die einen OOB-Write über ein UNDEFINED-Tag mit manipuliertem Count/Offset auslöst |
# Generate TIFF PoC
python3 cve-2026-21045_tiff_oob_poc.py -o payload.tif
# Generate DNG PoC
python3 cve-2026-21048_dng_oob_poc.py -o payload.dng
# Transfer to device and trigger (e.g., via Gallery/MMS)
adb push payload.tif /sdcard/Download/
adb shell am start -a android.intent.action.VIEW -d file:///sdcard/Download/payload.tif -t image/tiff
Auf einem ungepatchten Gerät (Sicherheitspatch vor Juli 2026) sollte das Öffnen der manipulierten TIFF/DNG-Datei in Samsung Gallery (oder einer anderen App, die den Quram-Decoder verwendet) eine Heap-Speicherbeschädigung verursachen, die möglicherweise zu Folgendem führt:
Auf einem gepatchten Gerät (SMR Jul-2026+) sollte das Bild entweder als ungültig abgelehnt oder sicher verarbeitet werden. Ein Absturz auf einem vollständig gepatchten Gerät kann auf ein separates, ungepatchtes Problem hinweisen.
File: libimagecodec.quram.so (64-bit)
SHA256: (verify against your copy)
NDK: r23c (Android 21)
Built: 2021-12-31 (placeholder date)
Soname: libimagecodec.quram.so
Extrahiert aus WINKJ_ReadExifField:
Alle Typen mit element_size = 1 (BYTE, ASCII, UNDEFINED) teilen sich denselben Handler
und sind gleichermaßen anfällig für den Integer-Überlauf-Bypass.
Diese Proofs of Concept dienen ausschließlich zu Bildungs- und Sicherheitsforschungszwecken. Sie demonstrieren den Schwachstellenmechanismus, um Benutzern und Entwicklern zu helfen, das Risiko zu verstehen. Verwenden Sie sie nicht gegen Systeme, die Ihnen nicht gehören oder für die Sie keine ausdrückliche Erlaubnis zum Testen haben.
| Feld | Wert (hex) | Dezimal |
|---|
count | 0xFFFF0001 | 4.294.901.761 |
element_size | 1 | 1 |
count * element_size | 0xFFFF0001 ≡ -65535 (mod 2³²) | 4.294.901.761 |
value_offset | 0x00017FFF | 98.303 |
value_offset + count*size | 0x00008000 (Überlauf!) | 32.768 |
buffer_size | 0x00008000 | 32.768 |
Prüfergebnis: 0x8000 <= 0x8000 | ✅ BESTANDEN | — |
Tatsächlicher Speicherzugriff: base + 0x17FFF | 0x7FFF Bytes hinter dem Puffer | ❌ OOB |
| Funktion | Adresse (64-Bit) | Größe | Zweck |
|---|
WINKJ_ReadExifField | 0x13a0a8 | 912 | Parst einzelnen IFD-Eintrag (verwundbar) |
WINKJ_ReadTiffIFDInfo | 0x139d28 | 896 | Liest alle IFD-Einträge |
WINKJ_ReadTiffInfo | 0x139ad4 | 596 | High-Level-TIFF-Info-Parser |
WINKJ_GetTiffInfo | 0x1393fc | 1752 | Haupt-Einstiegspunkt für die TIFF-Analyse |
decodeTIFF | 0x1a2adc | 580 | Dekodiert TIFF-Bild über libtiff |
getTIFFImageInfo | 0x1a2d20 | 508 | Ruft TIFF-Bildmetadaten ab |
copySubImageBuffer | 0x0b2824 | 324 | Kopiert Sub-Bild-Bereich |
TIFFReadDirectory | 0x1aac78 | 5896 | libtiff 4.6.0-Verzeichnisleser |
_TIFFMultiply32 | 0x1a2f1c | 56 | Sicherer 32-Bit-Multiplikationscheck |
_TIFFMultiply64 | 0x1a2f58 | 48 | Sicherer 64-Bit-Multiplikationscheck |
| Typ | Name | Elementgröße | Handler-Adresse |
|---|
| 1 | BYTE | 1 | 0x13a15c |
| 2 | ASCII | 1 | 0x13a15c |
| 3 | SHORT | 2 | 0x13a1d0 |
| 4 | LONG | 4 | 0x13a17c |
| 5 | RATIONAL | 8 | 0x13a1ac |
| 6 | SBYTE | 1 | 0x13a15c |
| 7 | UNDEFINED | 1 | 0x13a15c |
| 8 | SSHORT | 2 | 0x13a1d0 |
| 9 | SLONG | 4 | 0x13a17c |
| 10 | SRATIONAL | 8 | 0x13a1ac |
| 11 | FLOAT | 4 | 0x13a17c |
| 12 | DOUBLE | 8 | 0x13a1ac |
| CVE | Beschreibung | Status |
|---|
| CVE-2025-58477 | OOB-Write in der IFD-Tag-Analyse in libimagecodec.quram.so (SMR Dez-2025) | ✅ Behoben |
| CVE-2026-20973 | OOB-Read in libimagecodec.quram.so (SMR Jan-2026) | ✅ Behoben |
| CVE-2026-21045 | OOB-Write in der TIFF-Analyse in libimagecodec.media.quram.so (SMR Jul-2026) | ⚠️ Für mich ungepatcht |
| CVE-2026-21048 | OOB-Write in der DNG-Analyse in libimagecodec.media.quram.so (SMR Jul-2026) | ⚠️ Für mich ungepatcht |
| CVE-2026-4775 | Vorzeichenbehafteter Integer-Überlauf in libtiff 4.6.0 putcontig8bitYCbCr44tile | ⚠️ Für mich ungepatcht |
| CVE-2024-7006 | NULL-Dereferenz in libtiff tif_dirinfo.c | ✅ Behoben in 4.6.1 |