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 loadwithgdkpixbuf() in loader.c. The cleanup path manually frees the sixelframet object and its internal buffers without consulting the reference count, even though the object was created via the refcounted constructor sixelframenew() and exposed to the public callback. A callback that calls sixelframeref(frame) to retain a logically valid reference will hold a dangling pointer after sixelhelperloadimagefile() 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: sixelframeunref() is used in loadwithbuiltin() but raw free() is used in loadwithgdkpixbuf(). 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.
{
"binaries": [
{
"binary_version": "1.8.2-2.1",
"binary_name": "libsixel-bin"
},
{
"binary_version": "1.8.2-2.1",
"binary_name": "libsixel-dev"
},
{
"binary_version": "1.8.2-2.1",
"binary_name": "libsixel-examples"
},
{
"binary_version": "1.8.2-2.1",
"binary_name": "libsixel1"
}
]
}{
"binaries": [
{
"binary_version": "1.10.3-3build1",
"binary_name": "libsixel-bin"
},
{
"binary_version": "1.10.3-3build1",
"binary_name": "libsixel-dev"
},
{
"binary_version": "1.10.3-3build1",
"binary_name": "libsixel-examples"
},
{
"binary_version": "1.10.3-3build1",
"binary_name": "libsixel1"
}
]
}