GHSA-pjjp-65r7-ppgm: libass: Out-of-bounds read and write in wrap_lines_measure
libass is a portable subtitle renderer for the ASS/SSA (Advanced Substation Alpha/Substation Alpha) subtitle format. Prior to 0.17.5, libass can overread and overwrite the glyph array in wraplinesmeasure while rendering malicious ASS content. In wrap modes other than two, a final line ending with a literal backslash-n sequence and otherwise consisting only of such sequences or spaces can remain after early trimming and make the line-measurement loops overshoot by one glyph. When the total text size exactly matches the allocated glyph-array capacity, the first loop reads an uninitialized 32-bit fixed-point pos.x value, although that value is not subsequently used. The second loop writes pos.x and pos.y beyond the array, zeroing the first and adding an attacker-controllable offset to the second. No actual exploitation beyond possible denial of service is known; broader exploitation is theoretical and constrained by the addresses, limited writes, and ASLR. This issue is fixed in version 0.17.5.
Event History
Frequently Asked Questions
What conditions are required to trigger the out-of-bounds access?
An attacker must cause libass to render malicious ASS content using a wrap mode other than two. The affected final line must end in a literal backslash-n sequence and otherwise contain only literal backslash-n sequences or spaces, with total text size exactly matching the allocated glyph-array capacity.
What impact has been demonstrated?
No exploitation beyond a possible denial of service is known. Broader exploitation is theoretical and constrained by the relevant addresses, the limited writes, and ASLR.
Which versions are affected and what remediation is available?
Versions prior to 0.17.5 are affected. Upgrade to libass 0.17.5, which fixes the issue.