[Pkg-nagios-devel] Bug#392010: nsca: crashes on malformed command line

Ulf Harnhammar metaur at telia.com
Mon Oct 9 19:58:50 UTC 2006


Subject: nsca: crashes on malformed command line
Package: nsca
Version: 2.6-1
Severity: normal
Tags: patch

Hello,

the send_nsca command crashes when you give it a command line containing
the -c or -d parameters with data containing "%n" format strings:


metaur at metaur:~$ /usr/sbin/send_nsca -c %n%n%n%n
Segmentation fault
metaur at metaur:~$ /usr/sbin/send_nsca -d %n%n%n%n
Segmentation fault
metaur at metaur:~$


This is caused by two broken snprintf() calls, that can be fixed by
applying my attached patch.

Format string bugs such as these sometimes cause security issues, but I see
no security implications of this bug whatsoever. As the send_nsca binary is
not set to setuid or setgid anything, the person that runs it already has
all the permissions that the program has. It is still a bug that should be
fixed in the interest of achieving as high quality and stability as possible.

// Ulf Harnhammar

-- System Information:
Debian Release: testing/unstable
  APT prefers testing
  APT policy: (500, 'testing')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.12-1-686
Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ISO-8859-1)

Versions of packages nsca depends on:
ii  libc6                        2.3.6.ds1-4 GNU C Library: Shared libraries
ii  libmcrypt4                   2.5.7-5     De-/Encryption Library

nsca recommends no packages.

-- debconf information:
  nsca/run-nsca-daemon:

-------------- next part --------------
--- src/send_nsca.c.old	2006-04-06 23:19:30.000000000 +0200
+++ src/send_nsca.c	2006-10-09 20:47:10.000000000 +0200
@@ -421,7 +421,7 @@ int process_arguments(int argc, char **a
 		/* config file */
 		else if(!strcmp(argv[x-1],"-c")){
 			if(x<argc){
-				snprintf(config_file,sizeof(config_file),argv[x]);
+				snprintf(config_file,sizeof(config_file),"%s",argv[x]);
 				config_file[sizeof(config_file)-1]='\x0';
 				x++;
 			        }
@@ -432,7 +432,7 @@ int process_arguments(int argc, char **a
 		/* delimiter to use when parsing input */
 		else if(!strcmp(argv[x-1],"-d")){
 			if(x<argc){
-				snprintf(delimiter,sizeof(delimiter),argv[x]);
+				snprintf(delimiter,sizeof(delimiter),"%s",argv[x]);
 				delimiter[sizeof(delimiter)-1]='\x0';
 				x++;
 			        }


More information about the Pkg-nagios-devel mailing list