Commit Graph

59 Commits

Author SHA1 Message Date
Chase b46cfa7876 Remove redundant hourglass functions 2020-01-26 12:09:12 -07:00
Jon Trulson a5a5d83cbd dtprintinfo: fix a mulit-core build race, for realz this time 2019-11-22 17:35:29 -07:00
Jon Trulson 264871cefb Fix up a couple issues with multi-core builds and 2 race conditions 2019-11-22 13:42:02 -07:00
Jon Trulson 5bb7b74efd dtprintinfo: make it build
Also, it was easier just to use a single Makefile.am rather than one for
every subdir, so thats what we did here.
2019-11-21 17:51:35 -07:00
Jon Trulson 82059bf240 Merge branch 'master' into autotools-conversion after 2.3.1 release 2019-11-16 16:35:56 -07:00
Nina Didenko f75ee32e72 sym2num: don't hardcode path to cpp 2019-11-05 18:49:17 -07:00
Jon Trulson 730da7747c Change "if SUN" conditionals in remaining Makefile.am files to "if SOLARIS" 2019-10-28 18:54:17 -06:00
Chase e79d944119 programs/dtprintinfo: add automake files 2019-10-23 15:34:20 -06:00
Jose Rubio 08cea15be5 get rid of the 'extern sys_errlist' and 'sys_nerr' in SysErrorMsg. 2019-10-13 10:23:49 +02:00
Jose Rubio 0086a7067e Fix to compile warnings.
* discarded-qualifiers warnings.
* Function definitions, the .h doesn't match the .c.
* Added some include to ensure the .c has function definition.
2019-10-11 10:49:48 +02:00
Jon Trulson 05d231606e dtprintinfo: correct another possible buffer overflow 2019-05-07 11:21:49 -06:00
Jon Trulson 30cd56ac38 dtprintinfo: Fix a potential exploitable buffer overrun
This fixes a potentially exploitable buffer overrun in dtprintinfo.
This was brought to my attention based on a 0day exploit released for
Solaris CDE.

The exploit code does not work (or build) on linux, and the overrun is
in the heap rather than the stack as on Solaris, but it's easy to see
how this could be exploited.

The following is the content of the advisory:

8<-----------------------------------------------------------

@Mediaservice.net (Cybaze Group) Security Advisory #2019-01 (2019-05-07)

         Title:	Local privilege escalation via CDE dtprintinfo
   Application:	Common Desktop Environment 2.3.0 and earlier
     Platforms:	Oracle Solaris 10 1/13 (Update 11) and earlier
   Description:	A local attacker can gain root privileges by exploiting
		a buffer overflow in CDE dtprintinfo
        Author:	Marco Ivaldi <marco.ivaldi@mediaservice.net>
   Contributor:	Dave Aitel <dave.aitel@cyxtera.com> (original discovery)
 Vendor Status:	<secalert_us@oracle.com> notified on 2019-05-05
		<cdesktopenv-devel@lists.sourceforge.net> notified on 2019-05-05
           CVE:	The Common Vulnerabilities and Exposures project has not assigned
		a name to this issue yet
    References: https://lab.mediaservice.net/advisory/2019-01-cde-dtprintinfo.txt
		https://github.com/0xdea/raptor_infiltrate19
		https://sourceforge.net/p/cdesktopenv/wiki/Home/
		https://www.oracle.com/technetwork/server-storage/solaris10/
		https://www.mediaservice.net/
		https://infiltratecon.com/

1. Abstract.

A buffer overflow in the DtPrinterAction::PrintActionExists() function in the
Common Desktop Environment 2.3.0 and earlier, as used in Oracle Solaris 10 1/13
(Update 11) and earlier, allows local users to gain root privileges via a long
printer name passed to dtprintinfo by a malicious lpstat program.

This is a 0day vulnerability demonstrated at #INFILTRATE19 on May 2nd, 2019 in
the talk "A bug's life: story of a Solaris 0day".

2. Example Attack Session.

bash-3.2$ cat /etc/release
                    Oracle Solaris 10 1/13 s10x_u11wos_24a X86
  Copyright (c) 1983, 2013, Oracle and/or its affiliates. All rights reserved.
                            Assembled 17 January 2013
bash-3.2$ uname -a
SunOS nostalgia 5.10 Generic_147148-26 i86pc i386 i86pc
bash-3.2$ id
uid=54322(raptor) gid=1(other)
bash-3.2$ gcc raptor_dtprintname_intel.c -o raptor_dtprintname_intel -Wall
bash-3.2$ ./raptor_dtprintname_intel 192.168.1.1:0
raptor_dtprintname_intel.c - dtprintinfo 0day, Solaris/Intel
Copyright (c) 2004-2019 Marco Ivaldi <raptor@0xdeadbeef.info>

Using SI_PLATFORM       : i86pc (5.10)
Using stack base        : 0x8047fff
Using rwx_mem address   : 0xfeffa004
Using sc address        : 0x8047f60
Using strcpy() address  : 0xfefe26a0

lpstat called with -v
lpstat called with -v
lpstat called with -d
uid=0(root) gid=1(other)

3. Affected Platforms.

All platforms shipping the Common Desktop Environment are potentially
affected. This includes:

* Oracle Solaris 10 1/13 (Update 11) and earlier [default installation]

According to the CDE Wiki, the following platforms are officially supported:

* All Official Ubuntu variants 12.04 - 18.04
* Debian 6, 7, 8, 9
* Fedora 17 at least
* Archlinux
* Red Hat
* Slackware 14.0
* OpenBSD
* NetBSD
* FreeBSD 9.2, 10.x, 11.x
* openSUSE Tumbleweed (gcc7)
* openSUSE Leap 4.2 (gcc4)
* SUSE 12 SP3 (gcc4)
* Solaris, OpenIndiana

4. Fix.

The upstream CDE maintainers have issued a patch for this vulnerability. Oracle
is investigating the issue via tracking# S1153109 and is expected to release a
fix for all affected-supported versions of Solaris via their quarterly Critical
Patch Update (CPU) program.

As a temporary workaround, it is possible to remove the setuid bit from the
dtprintinfo executable as follows:

bash-3.2# chmod -s /usr/dt/bin/dtprintinfo

5. Proof of Concept.

A working exploit for Oracle Solaris 10 1/13 (Update 11) Intel has been
developed as a proof of concept. Exploits for other Solaris versions and for
the SPARC architecture are also available. All exploits can be downloaded at:

https://github.com/0xdea/raptor_infiltrate19/
https://github.com/0xdea/exploits/

8<-----------------------------------------------------------
2019-05-07 11:21:49 -06:00
Peter Howkins 40b38d300b dtprintinfo: Coverity 88447 2018-07-04 01:57:52 +01:00
Peter Howkins 09f187d6be dtprintinfo: Coverity 89669 2018-07-04 01:55:44 +01:00
Peter Howkins a38c049703 dtprintinfo: Coverity 88097 2018-07-04 01:53:56 +01:00
Peter Howkins 445019f086 dtprintinfo: Coverity 88683 2018-07-04 01:51:43 +01:00
Peter Howkins 1cd6ca0999 dtprintinfo: Coverity 88650 2018-07-04 01:49:50 +01:00
Peter Howkins c6dd25b884 dtprintinfo: Coverity 89488 2018-07-04 01:47:31 +01:00
Peter Howkins 419a7efff4 dtprintinfo: Coverity 89561 2018-07-04 01:45:39 +01:00
Peter Howkins ccd9f88a6d dtprintinfo: Coverity 88414 2018-07-04 01:43:29 +01:00
Jon Trulson 3096ad03a8 dtprintinfo: remove register keyword 2018-06-27 22:20:34 -06:00
chase 809c3d8bb6 Spelling fixes 2018-05-31 22:23:19 -06:00
Ulrich Wilkens 297b6bd845 Fix warnings on FreeBSD 2018-05-31 22:04:08 -06:00
chase 4f5e7fe5e3 Use POSIX macros for linux 2018-05-24 18:22:55 -06:00
chase 164e695cd0 remove OSF1 support 2018-05-24 14:25:26 -06:00
chase 0fa51f280f Use /var/spool instead of /usr/spool and /var/mail instead of /usr/mail 2018-05-20 12:30:32 -06:00
chase 07900bd93b Remove Unixware and openserver support 2018-05-20 12:13:07 -06:00
chase 8a4f389634 Remove UXPDS support 2018-05-15 20:27:22 -06:00
chase 1fe5a550b2 Fix typo in license headers 2018-04-28 12:30:20 -06:00
Swift Griggs 1fdcd4c93d Patches from pkgsrc-WIP 2016-08-05 11:21:06 -06:00
Peter Howkins 2ea057d511 Disable all code related to libXp
deprecated and mostly no longer included on current OSes
2016-04-20 20:17:22 +01:00
Edmond ORIGNAC 51afe76f07 Fix dtprintinfo parser
When using a non C locale such as fr_FR.ISO8859-1, the CUPS messages
returned by lpq are translated. However, the parser in ParseJobs.C can only
handle messages in English. As a result, dtprintinfo exits immediately with
an error message. To fix that problem we force a LANG=C environment when calling
lpq so that messages will be in English and will be processed correctly by dtprintinfo
parser.
2015-03-21 20:14:16 -06:00
Peter Howkins e987e48f9a dtprintinfo: Resolve CID 87253 2015-01-15 16:07:10 +00:00
Jon Trulson a5c7512782 dtprintinfo: Coverity (memory corruption, moderate) 2014-12-26 17:17:06 -07:00
Ulrich Wilkens 01d6c363fa OpenIndiana and Solaris port 2014-10-28 13:40:11 -06:00
Jon Trulson 9ed39fd5f2 MotifUI.C: NULL is not 0 2014-03-22 19:14:38 -06:00
Jon Trulson 4568a22f99 Icon.c: include stdlib.h 2014-03-22 19:01:49 -06:00
Peter Tribble 468d576030 initial illumos port 2014-03-22 16:33:11 -06:00
Ulrich Wilkens 2712d5f787 NetBSD port 2014-02-22 19:12:19 -07:00
Eugene Doudine 23e217b329 Fixes segfault in dtprintinfo when used UTF-8 locale, bug was caused by unchecked return value of XmeRenderTableGetDefaultFont() 2014-02-22 19:07:52 -07:00
Marcin Cieslak c1b4c13398 dtprintinfo: sym2num needs ksh 2012-09-23 19:43:43 -06:00
Marcin Cieslak df1da3432e dtprintinfo: Use 64-bit values for XtVaGetValues() pointers
XtArgVal should be a type that encompasses XtPointer
and long integer types. In the X.org implementation
it is currently defined as (long).

Don't use (unsigned int *) instead of (Window *).
2012-09-23 19:43:11 -06:00
Marcin Cieslak fc0f1ff697 dtprintinfo: Use CUPS lpq for FreeBSD
Use /usr/local/bin/lpq from CUPS for FreeBSD
for now; this prevents immediate dtprintinfo
crash.

In the future we should handle both built-in
/usr/bin/lpq as well as CUPS /usr/local/bin/lpq
output in separate functions.

Code to support CUPS should probably shared between
other operating systems.
2012-09-23 19:41:32 -06:00
Marcin Cieslak 6ea7855841 Fix logic in dtprintinfo
Fix values for true/false and boolean type
2012-09-23 19:38:43 -06:00
Marcin Cieslak 17a33f0430 Use KORNSHELL variable instead of /bin/ksh
This patch removes instances of hardcoded
invocation of /bin/ksh and allows to
replace it with, for, example,
/usr/local/bin/ksh93

Also "ksh93" is accepted whenever "ksh" is.

Tested using the following /bin/ksh:

----8<----
WHAT=`ps -o command= -p $PPID`
msg="Something tried to call /bin/ksh: $PPID: $WHAT"
print -u2 "$msg"
logger user.warn "$msg"
exit 99
----8<----
(Warning: first two lines are FreeBSD specific)

Scripts from Makefiles should now be executed either
with

$(KORNSHELL) korn-shell-script

or

$(SHELL) bourne-shell-script

therefore #!/bin/ksh has not been changed everywhere.

/usr/dt/bin/ scripts have been converted (e.g. Xsession)

Whenever possible Imake and CPP facilities have been used.

For C and C++ programs KORNSHELL needs to be defined to
"/path/to/your/ksh" (with quotes) so that it can make
a valid C constant.

Therefore, when adding KORNSHELL to Imakefile for C files,
you have to add

CXXEXTRA_DEFINES = -DKORNSHELL=\"$(KORNSHELL)\"

or similar (for example, see programs/dtprintinfo)

But for simple shell script substitution we usually change

 LOCAL_CPP_DEFINES = -DCDE_CONFIGURATION_TOP=$(CDE_CONFIGURATION_TOP) \
                     -DCDE_INSTALLATION_TOP=$(CDE_INSTALLATION_TOP) \
                     -DCDE_LOGFILES_TOP=$(CDE_LOGFILES_TOP)

to:

 LOCAL_CPP_DEFINES = -DCDE_CONFIGURATION_TOP=$(CDE_CONFIGURATION_TOP) \
                     -DCDE_INSTALLATION_TOP=$(CDE_INSTALLATION_TOP) \
                     -DCDE_LOGFILES_TOP=$(CDE_LOGFILES_TOP) \
                     -DKORNSHELL=$(KORNSHELL) \
                     -DXPROJECTROOT=X11ProjectRoot

since we don't want quotes for shell scripts.
2012-08-23 20:00:43 -06:00
Marcin Cieslak c3cd844df6 Use FreeBSD-specific invocation of /bin/ps 2012-08-23 19:56:31 -06:00
Marcin Cieslak a35975a334 FreeBSD does not need extern char *sys_errlist[]
Add preprocessor directives not to try
to redefine sys_errlist[] or sys_nerr

There are already definitions:

 extern __const char *__const sys_errlist[];
 extern __const int sys_nerr;

in <stdio.h>

Actually we should have something like
NeedSysErrlist in imake definitions
to get rid of those #ifdefs.
2012-08-15 15:58:46 -06:00
Marcin Cieslak d6b6353f95 Use $(SHELL) and $(KORNSHELL) for shell scripts
Introduce KORNSHELL make variable to point
to the implementation of the Korn Shell.

Use $(SHELL) or $(KORNSHELL) explicitly for
make programs that do not automatically call
shell scripts from the current directory.
2012-08-14 12:34:41 -06:00
Pascal Stumpf 72c954e5b3 sym2num: add path to cpp on OpenBSD. 2012-08-12 14:20:58 -06:00
Pascal Stumpf 76984653b4 OpenBSD patches for dtpdmd and dtprintinfo.
Casts, #ifdefs, SIGCLD ...
2012-08-11 20:06:44 -06:00