Note: This is a public test instance of Red Hat Bugzilla. The data contained within is a snapshot of the live data so any changes you make will not be reflected in the production Bugzilla. Email is disabled so feel free to test any aspect of the site that you want. File any problems you find or give feedback at bugzilla.redhat.com.

Bug 1665273 (CVE-2018-20662)

Summary: CVE-2018-20662 poppler: SIGABRT PDFDoc::setup class in PDFDoc.cc
Product: [Other] Security Response Reporter: Laura Pardo <lpardo>
Component: vulnerabilityAssignee: Red Hat Product Security <security-response-team>
Status: CLOSED ERRATA QA Contact:
Severity: low Docs Contact:
Priority: low    
Version: unspecifiedCC: mkasik
Target Milestone: ---Keywords: Security
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2019-08-06 13:21:30 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: 1665274, 1665275, 1677347, 1677348, 1690480    
Bug Blocks:    

Description Laura Pardo 2019-01-10 20:19:04 UTC
A flaw was found in Poppler 0.72.0. The PDFDoc::setup class in PDFDoc.cc allows attackers to cause a denial-of-service (application crash caused by Object.h SIGABRT, because of a wrong return value from PDFDoc::setup) by crafting a PDF file in which an xref data structure is mishandled during extractPDFSubtype processing.


References:
https://gitlab.freedesktop.org/poppler/poppler/issues/706

Upstream Patch:
https://gitlab.freedesktop.org/poppler/poppler/commit/9fd5ec0e6e5f763b190f2a55ceb5427cfe851d5f

Comment 1 Laura Pardo 2019-01-10 20:19:18 UTC
Created mingw-poppler tracking bugs for this issue:

Affects: fedora-all [bug 1665275]


Created poppler tracking bugs for this issue:

Affects: fedora-all [bug 1665274]

Comment 3 Scott Gayou 2019-02-13 22:23:22 UTC
Red Hat Enterprise 7 has a few valgrind errors, but no abort.

```
==12199== Memcheck, a memory error detector
==12199== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==12199== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==12199== Command: pdfunite test.pdf sigabrt_Object.h:258_2.pdf out.pdf
==12199== 
Syntax Error (374): Illegal character <10> in hex string
Syntax Error (603): Dictionary key must be a name object
Syntax Error (605): Dictionary key must be a name object
Syntax Error (611): Dictionary key must be a name object
Syntax Error (603): Dictionary key must be a name object
Syntax Error (605): Dictionary key must be a name object
Syntax Error (611): Dictionary key must be a name object
Syntax Error (1014): Dictionary key must be a name object
Syntax Error (1016): Dictionary key must be a name object
Syntax Error (1018): Dictionary key must be a name object
Syntax Error (1018): Dictionary key must be a name object
Syntax Error (1020): Dictionary key must be a name object
Syntax Error: Page count in top-level pages object is wrong type (null)
==12199== Invalid read of size 4
==12199==    at 0x6341C30: pthread_mutex_lock (pthread_mutex_lock.c:65)
==12199==    by 0x4F15D82: UnknownInlinedFun (GooMutex.h:78)
==12199==    by 0x4F15D82: Array::decRef() (Array.cc:85)
==12199==    by 0x4F83EC8: Object::free() (Object.cc:134)
==12199==    by 0x4F2470C: Dict::~Dict() (Dict.cc:126)
==12199==    by 0x4F83F15: Object::free() (Object.cc:140)
==12199==    by 0x4FA3CBF: XRef::~XRef() (XRef.cc:392)
==12199==    by 0x4F8F83F: PDFDoc::~PDFDoc() (PDFDoc.cc:322)
==12199==    by 0x402289: main (pdfunite.cc:196)
==12199==  Address 0x7ce93e0 is 48 bytes inside a block of size 72 free'd
==12199==    at 0x4C2B16D: operator delete(void*) (vg_replace_malloc.c:576)
==12199==    by 0x4F83EE5: Object::free() (Object.cc:135)
==12199==    by 0x4F2470C: Dict::~Dict() (Dict.cc:126)
==12199==    by 0x4F83F15: Object::free() (Object.cc:140)
==12199==    by 0x4FA3CBF: XRef::~XRef() (XRef.cc:392)
==12199==    by 0x4F8F83F: PDFDoc::~PDFDoc() (PDFDoc.cc:322)
==12199==    by 0x402289: main (pdfunite.cc:196)
==12199==  Block was alloc'd at
==12199==    at 0x4C2A1E3: operator new(unsigned long) (vg_replace_malloc.c:334)
==12199==    by 0x4F83C81: Object::initArray(XRef*) (Object.cc:67)
==12199==    by 0x4F8D24C: PDFDoc::replacePageDict(int, int, PDFRectangle*, PDFRectangle*, Object*) (PDFDoc.cc:1507)
==12199==    by 0x401BD6: main (pdfunite.cc:119)
==12199== 
==12199== Invalid read of size 4
==12199==    at 0x633D8C4: __pthread_mutex_lock_full (pthread_mutex_lock.c:176)
==12199==    by 0x4F15D82: UnknownInlinedFun (GooMutex.h:78)
==12199==    by 0x4F15D82: Array::decRef() (Array.cc:85)
==12199==    by 0x4F83EC8: Object::free() (Object.cc:134)
==12199==    by 0x4F2470C: Dict::~Dict() (Dict.cc:126)
==12199==    by 0x4F83F15: Object::free() (Object.cc:140)
==12199==    by 0x4FA3CBF: XRef::~XRef() (XRef.cc:392)
==12199==    by 0x4F8F83F: PDFDoc::~PDFDoc() (PDFDoc.cc:322)
==12199==    by 0x402289: main (pdfunite.cc:196)
==12199==  Address 0x7ce93e0 is 48 bytes inside a block of size 72 free'd
==12199==    at 0x4C2B16D: operator delete(void*) (vg_replace_malloc.c:576)
==12199==    by 0x4F83EE5: Object::free() (Object.cc:135)
==12199==    by 0x4F2470C: Dict::~Dict() (Dict.cc:126)
==12199==    by 0x4F83F15: Object::free() (Object.cc:140)
==12199==    by 0x4FA3CBF: XRef::~XRef() (XRef.cc:392)
==12199==    by 0x4F8F83F: PDFDoc::~PDFDoc() (PDFDoc.cc:322)
==12199==    by 0x402289: main (pdfunite.cc:196)
==12199==  Block was alloc'd at
==12199==    at 0x4C2A1E3: operator new(unsigned long) (vg_replace_malloc.c:334)
==12199==    by 0x4F83C81: Object::initArray(XRef*) (Object.cc:67)
==12199==    by 0x4F8D24C: PDFDoc::replacePageDict(int, int, PDFRectangle*, PDFRectangle*, Object*) (PDFDoc.cc:1507)
==12199==    by 0x401BD6: main (pdfunite.cc:119)
==12199== 
==12199== Invalid read of size 4
==12199==    at 0x4F15D83: Array::decRef() (Array.cc:86)
==12199==    by 0x4F83EC8: Object::free() (Object.cc:134)
==12199==    by 0x4F2470C: Dict::~Dict() (Dict.cc:126)
==12199==    by 0x4F83F15: Object::free() (Object.cc:140)
==12199==    by 0x4FA3CBF: XRef::~XRef() (XRef.cc:392)
==12199==    by 0x4F8F83F: PDFDoc::~PDFDoc() (PDFDoc.cc:322)
==12199==    by 0x402289: main (pdfunite.cc:196)
==12199==  Address 0x7ce93c8 is 24 bytes inside a block of size 72 free'd
==12199==    at 0x4C2B16D: operator delete(void*) (vg_replace_malloc.c:576)
==12199==    by 0x4F83EE5: Object::free() (Object.cc:135)
==12199==    by 0x4F2470C: Dict::~Dict() (Dict.cc:126)
==12199==    by 0x4F83F15: Object::free() (Object.cc:140)
==12199==    by 0x4FA3CBF: XRef::~XRef() (XRef.cc:392)
==12199==    by 0x4F8F83F: PDFDoc::~PDFDoc() (PDFDoc.cc:322)
==12199==    by 0x402289: main (pdfunite.cc:196)
==12199==  Block was alloc'd at
==12199==    at 0x4C2A1E3: operator new(unsigned long) (vg_replace_malloc.c:334)
==12199==    by 0x4F83C81: Object::initArray(XRef*) (Object.cc:67)
==12199==    by 0x4F8D24C: PDFDoc::replacePageDict(int, int, PDFRectangle*, PDFRectangle*, Object*) (PDFDoc.cc:1507)
==12199==    by 0x401BD6: main (pdfunite.cc:119)
==12199== 
==12199== Invalid write of size 4
==12199==    at 0x4F15D8C: Array::decRef() (Array.cc:86)
==12199==    by 0x4F83EC8: Object::free() (Object.cc:134)
==12199==    by 0x4F2470C: Dict::~Dict() (Dict.cc:126)
==12199==    by 0x4F83F15: Object::free() (Object.cc:140)
==12199==    by 0x4FA3CBF: XRef::~XRef() (XRef.cc:392)
==12199==    by 0x4F8F83F: PDFDoc::~PDFDoc() (PDFDoc.cc:322)
==12199==    by 0x402289: main (pdfunite.cc:196)
==12199==  Address 0x7ce93c8 is 24 bytes inside a block of size 72 free'd
==12199==    at 0x4C2B16D: operator delete(void*) (vg_replace_malloc.c:576)
==12199==    by 0x4F83EE5: Object::free() (Object.cc:135)
==12199==    by 0x4F2470C: Dict::~Dict() (Dict.cc:126)
==12199==    by 0x4F83F15: Object::free() (Object.cc:140)
==12199==    by 0x4FA3CBF: XRef::~XRef() (XRef.cc:392)
==12199==    by 0x4F8F83F: PDFDoc::~PDFDoc() (PDFDoc.cc:322)
==12199==    by 0x402289: main (pdfunite.cc:196)
==12199==  Block was alloc'd at
==12199==    at 0x4C2A1E3: operator new(unsigned long) (vg_replace_malloc.c:334)
==12199==    by 0x4F83C81: Object::initArray(XRef*) (Object.cc:67)
==12199==    by 0x4F8D24C: PDFDoc::replacePageDict(int, int, PDFRectangle*, PDFRectangle*, Object*) (PDFDoc.cc:1507)
==12199==    by 0x401BD6: main (pdfunite.cc:119)
==12199== 
==12199== Invalid read of size 4
==12199==    at 0x6342E10: __pthread_mutex_unlock_usercnt (pthread_mutex_unlock.c:39)
==12199==    by 0x6342E10: pthread_mutex_unlock (pthread_mutex_unlock.c:330)
==12199==    by 0x4F15D93: UnknownInlinedFun (GooMutex.h:79)
==12199==    by 0x4F15D93: Array::decRef() (Array.cc:87)
==12199==    by 0x4F83EC8: Object::free() (Object.cc:134)
==12199==    by 0x4F2470C: Dict::~Dict() (Dict.cc:126)
==12199==    by 0x4F83F15: Object::free() (Object.cc:140)
==12199==    by 0x4FA3CBF: XRef::~XRef() (XRef.cc:392)
==12199==    by 0x4F8F83F: PDFDoc::~PDFDoc() (PDFDoc.cc:322)
==12199==    by 0x402289: main (pdfunite.cc:196)
==12199==  Address 0x7ce93e0 is 48 bytes inside a block of size 72 free'd
==12199==    at 0x4C2B16D: operator delete(void*) (vg_replace_malloc.c:576)
==12199==    by 0x4F83EE5: Object::free() (Object.cc:135)
==12199==    by 0x4F2470C: Dict::~Dict() (Dict.cc:126)
==12199==    by 0x4F83F15: Object::free() (Object.cc:140)
==12199==    by 0x4FA3CBF: XRef::~XRef() (XRef.cc:392)
==12199==    by 0x4F8F83F: PDFDoc::~PDFDoc() (PDFDoc.cc:322)
==12199==    by 0x402289: main (pdfunite.cc:196)
==12199==  Block was alloc'd at
==12199==    at 0x4C2A1E3: operator new(unsigned long) (vg_replace_malloc.c:334)
==12199==    by 0x4F83C81: Object::initArray(XRef*) (Object.cc:67)
==12199==    by 0x4F8D24C: PDFDoc::replacePageDict(int, int, PDFRectangle*, PDFRectangle*, Object*) (PDFDoc.cc:1507)
==12199==    by 0x401BD6: main (pdfunite.cc:119)
==12199== 
==12199== Invalid read of size 4
==12199==    at 0x633DDC6: __pthread_mutex_unlock_full (pthread_mutex_unlock.c:101)
==12199==    by 0x4F15D93: UnknownInlinedFun (GooMutex.h:79)
==12199==    by 0x4F15D93: Array::decRef() (Array.cc:87)
==12199==    by 0x4F83EC8: Object::free() (Object.cc:134)
==12199==    by 0x4F2470C: Dict::~Dict() (Dict.cc:126)
==12199==    by 0x4F83F15: Object::free() (Object.cc:140)
==12199==    by 0x4FA3CBF: XRef::~XRef() (XRef.cc:392)
==12199==    by 0x4F8F83F: PDFDoc::~PDFDoc() (PDFDoc.cc:322)
==12199==    by 0x402289: main (pdfunite.cc:196)
==12199==  Address 0x7ce93e0 is 48 bytes inside a block of size 72 free'd
==12199==    at 0x4C2B16D: operator delete(void*) (vg_replace_malloc.c:576)
==12199==    by 0x4F83EE5: Object::free() (Object.cc:135)
==12199==    by 0x4F2470C: Dict::~Dict() (Dict.cc:126)
==12199==    by 0x4F83F15: Object::free() (Object.cc:140)
==12199==    by 0x4FA3CBF: XRef::~XRef() (XRef.cc:392)
==12199==    by 0x4F8F83F: PDFDoc::~PDFDoc() (PDFDoc.cc:322)
==12199==    by 0x402289: main (pdfunite.cc:196)
==12199==  Block was alloc'd at
==12199==    at 0x4C2A1E3: operator new(unsigned long) (vg_replace_malloc.c:334)
==12199==    by 0x4F83C81: Object::initArray(XRef*) (Object.cc:67)
==12199==    by 0x4F8D24C: PDFDoc::replacePageDict(int, int, PDFRectangle*, PDFRectangle*, Object*) (PDFDoc.cc:1507)
==12199==    by 0x401BD6: main (pdfunite.cc:119)
==12199== 
==12199== 
==12199== HEAP SUMMARY:
==12199==     in use at exit: 1,034 bytes in 29 blocks
==12199==   total heap usage: 7,782 allocs, 7,753 frees, 2,012,194 bytes allocated
==12199== 
==12199== LEAK SUMMARY:
==12199==    definitely lost: 465 bytes in 16 blocks
==12199==    indirectly lost: 512 bytes in 4 blocks
==12199==      possibly lost: 0 bytes in 0 blocks
==12199==    still reachable: 57 bytes in 9 blocks
==12199==         suppressed: 0 bytes in 0 blocks
==12199== Rerun with --leak-check=full to see details of leaked memory
==12199== 
==12199== For counts of detected and suppressed errors, rerun with: -v
==12199== ERROR SUMMARY: 6 errors from 6 contexts (suppressed: 0 from 0)
```

Comment 9 errata-xmlrpc 2019-08-06 12:03:01 UTC
This issue has been addressed in the following products:

  Red Hat Enterprise Linux 7

Via RHSA-2019:2022 https://access.redhat.com/errata/RHSA-2019:2022

Comment 10 Product Security DevOps Team 2019-08-06 13:21:30 UTC
This bug is now closed. Further updates for individual products will be reflected on the CVE page(s):

https://access.redhat.com/security/cve/cve-2018-20662

Comment 11 errata-xmlrpc 2019-09-11 09:33:19 UTC
This issue has been addressed in the following products:

  Red Hat Enterprise Linux 8

Via RHSA-2019:2713 https://access.redhat.com/errata/RHSA-2019:2713