| Title | Hayaki Saito (saitoha)のlibsixelにおける解放済みメモリの使用に関する脆弱性 |
|---|---|
| Summary | libsixelはkmiyaのsixelから派生したSIXELエンコーダー/デコーダーの実装です。バージョン1.8.7以前では、--with-gdk-pixbuf2オプションを付けてビルドした場合、loader.cのload_with_gdkpixbuf()においてuse-after-freeの脆弱性が存在していました。クリーンアップの過程で、sixel_frame_tオブジェクトとその内部バッファを参照カウントを考慮せずに手動で解放しており、オブジェクトはrefcountedコンストラクターのsixel_frame_new()を介して作成され、パブリックコールバックに公開されています。コールバックがsixel_frame_ref(frame)を呼び出して論理的に有効な参照を保持していても、sixel_helper_load_image_file()の戻り後にはダングリングポインタを保持し、フレームやそのフィールドへの後続アクセスはAddressSanitizerによりuse-after-freeが確認されています。根本原因は同一コードベース内での2つのクリーンアップ方法の不整合にあり、load_with_builtin()ではsixel_frame_unref()が使われるのに対し、load_with_gdkpixbuf()では生のfree()が使用されていました。攻撃者はgdk-pixbuf2サポート付きlibsixelをリンクした任意のアプリケーションに対して細工された画像を供給することで、この問題を確実に誘発でき、情報漏洩、メモリ破壊、コード実行のリスクがあります。この問題はバージョン1.8.7-r1で修正されました。 |
| Possible impacts | 当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 また、当該ソフトウェアが扱う全ての情報が書き換えられる可能性があります。 さらに、当該ソフトウェアが完全に停止する可能性があります。 そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。 |
| Solution | 正式な対策が公開されています。ベンダ情報を参照して適切な対策を実施してください。 |
| Publication Date | April 14, 2026, midnight |
| Registration Date | April 24, 2026, 11:37 a.m. |
| Last Update | April 24, 2026, 11:37 a.m. |
| CVSS3.0 : 重要 | |
| Score | 7.8 |
|---|---|
| Vector | CVSS:3.0/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H |
| Hayaki Saito (saitoha) |
| libsixel 1.8.7 およびそれ以前 |
| No | Changed Details | Date of change |
|---|---|---|
| 1 | [2026年04月24日] 掲載 |
April 24, 2026, 11:37 a.m. |
| Summary | libsixel is a SIXEL encoder/decoder implementation derived from kmiya's sixel. In versions 1.8.7 and prior, when built with the --with-gdk-pixbuf2 option, a use-after-free vulnerability exists in load_with_gdkpixbuf() in loader.c. The cleanup path manually frees the sixel_frame_t object and its internal buffers without consulting the reference count, even though the object was created via the refcounted constructor sixel_frame_new() and exposed to the public callback. A callback that calls sixel_frame_ref(frame) to retain a logically valid reference will hold a dangling pointer after sixel_helper_load_image_file() returns, and any subsequent access to the frame or its fields triggers a use-after-free confirmed by AddressSanitizer. The root cause is a consistency failure between two cleanup strategies in the same codebase: sixel_frame_unref() is used in load_with_builtin() but raw free() is used in load_with_gdkpixbuf(). An attacker supplying a crafted image to any application built against libsixel with gdk-pixbuf2 support can trigger this reliably, potentially leading to information disclosure, memory corruption, or code execution. This issue has been fixed in version 1.8.7-r1. |
|---|---|
| Publication Date | April 15, 2026, 8:16 a.m. |
| Registration Date | April 15, 2026, 11:42 a.m. |
| Last Update | April 23, 2026, 11:46 p.m. |
| Configuration1 | or higher | or less | more than | less than | |
| cpe:2.3:a:saitoha:libsixel:*:*:*:*:*:*:*:* | 1.8.7 | ||||