A heap-based buffer overflow was found in the way OpenJPEG, an open-source JPEG 2000 codec written in C language, performed parsing of JPEG2000 image files. A remote attacker could provide a specially crafted JPEG 2000 file, which when opened in an application linked against openjpeg would lead to that application crash, or, potentially arbitrary code execution with the privileges of the user running the application. Acknowledgements: This issue was discovered by Huzaifa Sidhpurwala of the Red Hat Security Response Team.
Upstream bug: http://code.google.com/p/openjpeg/issues/detail?id=170
This has been assigned CVE-2012-3535 via: http://seclists.org/oss-sec/2012/q3/300
Created openjpeg tracking bugs for this issue Affects: fedora-all [bug 851955]
Analysis of the issue: (Applicable to openjpeg-1.3 and openjpeg-1.4) The cause of crash while decoding JPEG2000 files is user controlled invalid memory write while decoding (atleast partly user-controlled in this case). In j2k.c:j2k_read_cox(), tccp->numresolutions (1 byte) is read from the file via: 648 tccp->numresolutions = cio_read(cio, 1) + 1; /* SPcox (D) */ This number is not validated, and later in the code is directly used as an index when writing to the tccp->prcw array. The size of the tccp->prcw array is J2K_MAXRLVLS, which is defined in openjpeg.h as: #define J2K_MAXRLVLS 33 The following simple patch should fix this issue for openjpeg 1.3 and 1.4: - for (i = 0; i < tccp->numresolutions; i++) { + for (i = 0; i < tccp->numresolutions && i < J2K_MAXRLVLS; i++) {
Upstream patch at: http://code.google.com/p/openjpeg/issues/detail?id=170#c6
Final upstream patches: Trunk: http://code.google.com/p/openjpeg/source/detail?r=1918 1.5 branch: http://code.google.com/p/openjpeg/source/detail?r=1919
This issue has been addressed in following products: Red Hat Enterprise Linux 6 Via RHSA-2012:1283 https://rhn.redhat.com/errata/RHSA-2012-1283.html