|
![]() ![]() |
CERT® Advisory CA-1995-10 Ghostscript VulnerabilityOriginal issue date: August 31, 1995Last revised: September 23, 1997 Updated copyright information A complete revision history is at the end of this file. A large portion of the technical content of this advisory was provided by the DFN-CERT and NASIRC response teams, and is used with their permission. There is a vulnerability in older versions of ghostscript (gs) that enables users to execute commands and thus modify files. This problem involves the -dSAFER option and is present in all versions of ghostscript from 2.6 through 3.22 beta. We recommend that you apply the solution in Section III below to fix the -dSAFER PostScript code or install the latest version of ghostscript (version 4.01). In both cases, we urge you to make -dSAFER the default mode for all versions of ghostscript starting with version 2.6. We will update this advisory as we receive additional information. Please check advisory files regularly for updates that relate to your site.
I. BackgroundThe PostScript language, which was designed for the expression of graphical data, is widely used for transferring images and preformatted text across the Internet. The language includes primitives for file operations, which were intended to be useful in the expression of images. Unfortunately the operations can be abused by people intentionally embedding commands within an otherwise harmless image so that when displaying that image the PostScript viewer may perform malicious file creations or deletions. This is a potentially serious problem because many images transferred on the World Wide Web are sent in PostScript. For example, a malicious person could install a booby-trapped image on a web-page, buried among useful or interesting data. The viewer "ghostscript," a PostScript interpreter, recognizes the command-line option: "-dSAFER". This option is intended to disable the file operations and the %pipe PostScript operator that could be abused to do damage. This option is intended to protect you from this type of sabotage when viewing images from untrusted sources.
II. Problem DescriptionProblems exist with the ghostscript program, which supports the kind of commands discussed above. Older versions of ghostscript do not completely disable the pipe operator that can be used execute commands that can modify files. Therefore the option -dSAFER does not provide full protection. This problem is present in all versions of ghostscript between 2.6 (when the %pipe operator was added) and 3.22beta (when a fix was made).
III. ImpactAttackers who have inserted malicious code into a PostScript file can cause commands to be executed and files to be modified on any system where that PostScript file is viewed with ghostscript.
IV. SolutionsWe recommend either fixing the -dSAFER PostScript code or installing version 4.01 of ghostscript (see Sections IV.A and IV.B). In addition, we urge you to enable the -dSAFER option as the default (see Section IV.C).
A. Fixing the -dSAFER PostScript codeThe following fix is in the form of "diff" output, which is suitable for use with the GNU patch program. This patch brings the code into conformance with the version of gs_init.ps distributed with the latest version of ghostscript (4.01) and can be applied to the GNU versions 2.6, 2.6.1, and 2.6.2. The file to be patched is in the ghostscript library. As an example, gs_init.ps could be installed in: /usr/local/lib/ghostscript/gs_init.psHere is the patch. Please see the Updates section at the end of this file for cautions and for corrections to be applied in some situations.
--------------------------------cut here--------------------------------------
*** gs_init.ps.orig Fri Aug 25 10:42:51 1995
--- gs_init.ps Fri Aug 25 11:16:24 1995
***************
*** 302,308 ****
% If we want a "safer" system, disable some obvious ways to cause havoc.
SAFER not { (%END SAFER) .skipeof } if
/file
! { dup (r) eq
{ file }
{ /invalidfileaccess signalerror }
ifelse
--- 302,308 ----
% If we want a "safer" system, disable some obvious ways to cause havoc.
SAFER not { (%END SAFER) .skipeof } if
/file
! { dup (r) eq 2 index (%pipe*) .stringmatch not and
{ file }
{ /invalidfileaccess signalerror }
ifelse
--------------------------------cut here--------------------------------------
The key is to change the line that says:
{ dup (r) eq
to one that says:
{ dup (r) eq 2 index (%pipe*) .stringmatch not and
Here are the relevant lines in the gs_init.ps file for version 2.6.2
of ghostscript before the patch:
302 % If we want a "safer" system, disable some obvious ways to cause havoc.
303 SAFER not { (%END SAFER) .skipeof } if
304 /file
305 { dup (r) eq
306 { file }
307 { /invalidfileaccess signalerror }
308 ifelse
309 } bind odef
310 /renamefile { /invalidfileaccess signalerror } odef
311 /deletefile { /invalidfileaccess signalerror } odef
312 %END SAFER
Here are the same lines after the patch has been applied:
302 % If we want a "safer" system, disable some obvious ways to cause havoc.
303 SAFER not { (%END SAFER) .skipeof } if
304 /file
305 { dup (r) eq 2 index (%pipe*) .stringmatch not and
306 { file }
307 { /invalidfileaccess signalerror }
308 ifelse
309 } bind odef
310 /renamefile { /invalidfileaccess signalerror } odef
311 /deletefile { /invalidfileaccess signalerror } odef
312 %END SAFER
B. Installing version 4.01You may wish to install Aladdin Ghostscript version 4.01. The latest version of ghostscript is version 4.01 and is available at the locations noted below. This version of ghostscript is provided by Aladdin Enterprises and is subject to their licensing agreements. Please read the "Aladdin Ghostscript Free Public License" (included in the source code distribution) which differs from the "GNU Public License." Please note that this version is not the GNU version. The latest GNU version, which is version 2.6.2, does not fix this problem.
ftp://ftp.cs.wisc.edu/ghost/aladdin/ghostscript-4.01.tar.gz
ftp://ftp.cs.wisc.edu/ghost/aladdin/ghostscript-4.01jpeg.tar.gz
ftp://ftp.cs.wisc.edu/ghost/aladdin/ghostscript-4.01zlib.tar.gz
Optionally, you may need the font files for this release. They are available at these locations:
ftp://ftp.cs.wisc.edu/pub/aladdin/ghostscript-fonts-std-4.01.tar.gz
ftp://ftp.cs.wisc.edu/pub/aladdin/ghostscript-fonts-other-4.01.tar.gz
C. Making -dSAFER the defaultTo make -dSAFER the default mode for ghostscript for all versions of ghostscript starting with version 2.6, the file gs_init.ps must again be changed. The PostScript commands which check the actual interpreted command are collected in one single if statement in the gs_init.ps file. By commenting out the begin and end lines of this if statement, the check is always applied meaning that the -dSAFER option is always enabled. NOTE: If you make this change, all file and %pipe operations are disabled and cannot be re-enabled. The lines which must be changed are:
303 SAFER not { (%END SAFER) .skipeof } if
and
312 %END SAFERThese two lines should be commented out and made to look like this:
303 % SAFER not { (%END SAFER) .skipeof } if
and
312 % %END SAFERIf you are using ghostscript 2.6.2, the code will look like the following when both patches noted above are installed:
302 % If we want a "safer" system, disable some obvious ways to cause havoc.
303 % SAFER not { (%END SAFER) .skipeof } if
304 /file
305 { dup (r) eq 2 index (%pipe*) .stringmatch not and
306 { file }
307 { /invalidfileaccess signalerror }
308 ifelse
309 } bind odef
310 /renamefile { /invalidfileaccess signalerror } odef
311 /deletefile { /invalidfileaccess signalerror } odef
312 % %END SAFER
The CERT Coordination Center staff thanks the DFN-CERT and NASIRC response teams for providing a large portion of the technical content of this advisory, and we thank Wolfgang Ley for his assistance.
UPDATES
This document is available from: http://www.cert.org/advisories/CA-1995-10.html CERT/CC Contact Information
Phone: +1 412-268-7090 (24-hour hotline) Fax: +1 412-268-6989 Postal address: CERT/CC personnel answer the hotline 08:00-17:00 EST(GMT-5) / EDT(GMT-4) Monday through Friday; they are on call for emergencies during other hours, on U.S. holidays, and on weekends. Using encryptionWe strongly urge you to encrypt sensitive information sent by email. Our public PGP key is available from If you prefer to use DES, please call the CERT hotline for more information. Getting security informationCERT publications and other security information are available from our web site
* "CERT" and "CERT Coordination Center" are registered in the U.S. Patent and Trademark Office.
NO WARRANTY Conditions for use, disclaimers, and sponsorship information
Copyright 1995, 1996 Carnegie Mellon University. Revision History
Sep. 23, 1997 Updated copyright statement
Aug. 30, 1996 Information previously in the README was inserted
into the advisory, with editing in the Updates section.
Nov. 08, 1995 Updates section - added SAFER and UNSAFER patches and
instructions for applying them. Included a note for Macintosh
and DOS/Windows users. Noted a recent release of ghostscript
version 3.51.
|










