[osm-tile-server] 01/01: Prevent injection of commands in osm-tile-server-import-raw that can be run as setuid osm-tile-server

Ruben Undheim rubund-guest at moszumanska.debian.org
Sat Nov 7 09:20:01 UTC 2015


This is an automated email from the git hooks/post-receive script.

rubund-guest pushed a commit to branch master
in repository osm-tile-server.

commit bb81b11cf55c77b85d76698fbccbdf6bfcd0ed15
Author: Ruben Undheim <ruben.undheim at gmail.com>
Date:   Sat Nov 7 10:10:27 2015 +0100

    Prevent injection of commands in osm-tile-server-import-raw that can be run as setuid osm-tile-server
---
 scripts/osm-tile-server-import   |  2 +-
 src/osm-tile-server-import-raw.c | 32 +++++++++++++++++++++++++++++---
 2 files changed, 30 insertions(+), 4 deletions(-)

diff --git a/scripts/osm-tile-server-import b/scripts/osm-tile-server-import
index 301f4aa..74cb1e6 100755
--- a/scripts/osm-tile-server-import
+++ b/scripts/osm-tile-server-import
@@ -20,7 +20,7 @@ if groups | grep -q '\bosm-tile-server\b' ; then
 fi
 
 if [ $ALLOWED = 1 ] ;then
-  /usr/lib/osm-tile-server-base/bin/osm-tile-server-import-raw $*
+  /usr/lib/osm-tile-server-base/bin/osm-tile-server-import-raw "$1"
 else
   no_permission
 fi
diff --git a/src/osm-tile-server-import-raw.c b/src/osm-tile-server-import-raw.c
index 4b03ebb..0c2c671 100644
--- a/src/osm-tile-server-import-raw.c
+++ b/src/osm-tile-server-import-raw.c
@@ -4,16 +4,40 @@
 
 #include "parse-settings.h"
 
+
+char command[512];
+
 int main(int argc, char **argv)
 {
-	char command[256];
 	char *pbffile;
 
 	if(argc != 2){
 		fprintf(stderr,"Usage: osm-tile-server-import <pbf-file>\n");
 		return -1;
 	}
-	pbffile = argv[1];
+
+	pbffile = (char*)malloc(256);
+
+	int i,p=0;
+	int pbflen = strlen(argv[1]);
+	for(i=0;i<pbflen;i++){
+		if(argv[1][i] == '\'') {
+			pbffile[p] = '\'';
+			p++;
+			pbffile[p] = '\\';
+			p++;
+			pbffile[p] = '\'';
+			p++;
+			pbffile[p] = '\'';
+		}
+		else{
+			pbffile[p] = argv[1][i];
+		}
+		p++;
+		if(p >= 255) break;
+	}
+	pbffile[p] = 0;
+	printf("pbffile '%s'",pbffile);
 
 	parse_settings();
 
@@ -23,10 +47,12 @@ int main(int argc, char **argv)
 	else {
 		cfg_slim[0] = 0;
 	}
-	snprintf(command,255,"osm2pgsql %s -d %s --cache-strategy %s -C %s --number-processes %s --hstore -S /usr/share/osm2pgsql/default.style %s",cfg_slim,cfg_dbname,cfg_cache_strategy,cfg_memory,cfg_processes,pbffile);
+	snprintf(command,255,"osm2pgsql %s -d %s --cache-strategy %s -C %s --number-processes %s --hstore -S /usr/share/osm2pgsql/default.style '%s'",cfg_slim,cfg_dbname,cfg_cache_strategy,cfg_memory,cfg_processes,pbffile);
 	printf("Importing to database with this command:\n\n");
 	printf(" %s\n\n",command);
 
+	free(pbffile);
+
 	return system(command);
 
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/osm-tile-server.git



More information about the Pkg-grass-devel mailing list