Bug 842918 (CVE-2012-3535)

Summary: CVE-2012-3535 openjpeg: heap-based buffer overflow when decoding jpeg2000 files
Product: [Other] Security Response Reporter: Vincent Danen <vdanen>
Component: vulnerabilityAssignee: Red Hat Product Security <security-response-team>
Status: CLOSED ERRATA QA Contact:
Severity: high Docs Contact:
Priority: high    
Version: unspecifiedCC: fweimer, security-response-team, tgl
Target Milestone: ---Keywords: Security
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard: impact=important,public=20120827,reported=20120723,source=redhat,cvss2=6.8/AV:N/AC:M/Au:N/C:P/I:P/A:P,fedora-all/openjpeg=affected,rhel-6/openjpeg=affected,cwe=CWE-122[auto]
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2012-12-20 12:56:11 EST Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---
Bug Depends On: 851955, 856048, 856049    
Bug Blocks: 842919    

Description Vincent Danen 2012-07-24 18:31:21 EDT
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.


This issue was discovered by Huzaifa Sidhpurwala of the Red Hat Security Response Team.
Comment 7 Huzaifa S. Sidhpurwala 2012-08-27 02:23:22 EDT
Upstream bug:

Comment 8 Huzaifa S. Sidhpurwala 2012-08-27 02:45:13 EDT
This has been assigned CVE-2012-3535 via:

Comment 9 Huzaifa S. Sidhpurwala 2012-08-27 02:50:50 EDT
Created openjpeg tracking bugs for this issue

Affects: fedora-all [bug 851955]
Comment 10 Huzaifa S. Sidhpurwala 2012-09-03 02:37:48 EDT
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++) {
Comment 11 Huzaifa S. Sidhpurwala 2012-09-03 03:31:04 EDT
Upstream patch at:
Comment 13 Huzaifa S. Sidhpurwala 2012-09-10 10:28:35 EDT
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
Comment 18 errata-xmlrpc 2012-09-17 12:54:11 EDT
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