Bug 1191080 (CVE-2014-9658)

Summary: CVE-2014-9658 freetype: buffer over-read and integer underflow in tt_face_load_kern()
Product: [Other] Security Response Reporter: Vasyl Kaigorodov <vkaigoro>
Component: vulnerabilityAssignee: Red Hat Product Security <security-response-team>
Status: CLOSED ERRATA QA Contact:
Severity: low Docs Contact:
Priority: low    
Version: unspecifiedCC: behdad, fonts-bugs, kevin, mkasik
Target Milestone: ---Keywords: Security
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: freetype 2.5.4 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2015-03-18 07:41:00 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 1191099, 1197737, 1197738, 1197739, 1197740    
Bug Blocks: 1191102    

Description Vasyl Kaigorodov 2015-02-10 12:50:17 UTC
Common Vulnerabilities and Exposures assigned CVE-2014-9658 to the following issue:

The tt_face_load_kern function in sfnt/ttkern.c in FreeType before 2.5.4
enforces an incorrect minimum table length, which allows remote attackers to
cause a denial of service (out-of-bounds read) or possibly have unspecified
other impact via a crafted TrueType font.

http://code.google.com/p/google-security-research/issues/detail?id=194
http://git.savannah.gnu.org/cgit/freetype/freetype2.git/commit/?id=f70d9342e65cd2cb44e9f26b6d7edeedf191fc6c

Comment 1 Vasyl Kaigorodov 2015-02-10 12:55:29 UTC
Created freetype tracking bugs for this issue:

Affects: fedora-all [bug 1191099]

Comment 2 Fedora Update System 2015-02-19 18:01:12 UTC
freetype-2.5.3-15.fc21 has been pushed to the Fedora 21 stable repository.  If problems still persist, please make note of it in this bug report.

Comment 3 Tomas Hoger 2015-02-19 20:58:29 UTC
Upstream bug is:

https://savannah.nongnu.org/bugs/?43672

Issue was fixed upstream in 2.5.4.

The issue here starts as a simple short buffer over-read.  Existing check to ensure enough input data is still available was incorrect:

http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/src/sfnt/ttkern.c?id=73be9f9#n102

The length <= 6 only takes into account the previously read header:

http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/src/sfnt/ttkern.c?id=73be9f9#n96

p is later incremented by 8 (but only the first two bytes are actually read/accessed):

http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/src/sfnt/ttkern.c?id=73be9f9#n115

However, when length is too short, p_next may be less than p, which leads to integer underflow in (p_next - p) in this num_pairs check:

http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/src/sfnt/ttkern.c?id=73be9f9#n118

The check aims to prevent further over-reads.  Underflow bypasses the check and makes it possible to read 6 * 0xffff bytes (num_pairs is short).  Crash should be possible.

Comment 5 Fedora Update System 2015-02-20 08:30:41 UTC
freetype-2.5.0-9.fc20 has been pushed to the Fedora 20 stable repository.  If problems still persist, please make note of it in this bug report.

Comment 7 errata-xmlrpc 2015-03-17 17:58:53 UTC
This issue has been addressed in the following products:

  Red Hat Enterprise Linux 6
  Red Hat Enterprise Linux 7

Via RHSA-2015:0696 https://rhn.redhat.com/errata/RHSA-2015-0696.html