I tested the source code of httpd-2.0.47, with tool pscan (format bug scanner) and possible
security flaws is found!
Please, anybody can check if this is real problem of security?
Thanks.
Ranier Vilela RC Software Ltda.
------------------------------------------------------------------------------------------------------------------------------------------------
[EMAIL PROTECTED] pscan]# ./pscan -vv -w -p wu-ftpd.pscan /usr/src/httpd-2.0.47/server/*.c
Scanning /usr/src/httpd-2.0.47/server/buildmark.c ...
Scanning /usr/src/httpd-2.0.47/server/config.c ...
/usr/src/httpd-2.0.47/server/config.c:434 FUNC printf format string with 1 parameters: OK
/usr/src/httpd-2.0.47/server/config.c:1485 FUNC fprintf format string with 2 parameters: OK
/usr/src/httpd-2.0.47/server/config.c:1491 FUNC fprintf format string with 2 parameters: OK
/usr/src/httpd-2.0.47/server/config.c:1497 FUNC fprintf format string with 2 parameters: OK
/usr/src/httpd-2.0.47/server/config.c:1511 FUNC fprintf format string with 3 parameters: OK
/usr/src/httpd-2.0.47/server/config.c:1894 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/config.c:1898 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/config.c:1901 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/config.c:1904 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/config.c:1911 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/config.c:1914 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/config.c:1917 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/config.c:1920 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/config.c:1924 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/config.c:1926 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/config.c:1931 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/config.c:1933 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/config.c:1938 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/config.c:1940 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/config.c:1945 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/config.c:1947 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/config.c:1952 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/config.c:1954 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/config.c:1959 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/config.c:1973 FUNC printf format string with 2 parameters: OK
/usr/src/httpd-2.0.47/server/config.c:1976 FUNC printf format string with 1 parameters: OK
/usr/src/httpd-2.0.47/server/config.c:1988 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/config.c:1990 FUNC printf format string with 1 parameters: OK
Scanning /usr/src/httpd-2.0.47/server/connection.c ...
Scanning /usr/src/httpd-2.0.47/server/core.c ...
Scanning /usr/src/httpd-2.0.47/server/error_bucket.c ...
Scanning /usr/src/httpd-2.0.47/server/exports.c ...
Scanning /usr/src/httpd-2.0.47/server/gen_test_char.c ...
/usr/src/httpd-2.0.47/server/gen_test_char.c:83 FUNC printf format string with 5 parameters: OK
/usr/src/httpd-2.0.47/server/gen_test_char.c:105 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/gen_test_char.c:150 FUNC printf format string with 2 parameters: OK
/usr/src/httpd-2.0.47/server/gen_test_char.c:153 FUNC printf Last argument is variable or reference: BAD
Scanning /usr/src/httpd-2.0.47/server/listen.c ...
Scanning /usr/src/httpd-2.0.47/server/log.c ...
/usr/src/httpd-2.0.47/server/log.c:559 FUNC syslog format string with 1 parameters: OK
Scanning /usr/src/httpd-2.0.47/server/main.c ...
/usr/src/httpd-2.0.47/server/main.c:91 FUNC printf format string with 1 parameters: OK
/usr/src/httpd-2.0.47/server/main.c:92 FUNC printf format string with 1 parameters: OK
/usr/src/httpd-2.0.47/server/main.c:93 FUNC printf format string with 2 parameters: OK
/usr/src/httpd-2.0.47/server/main.c:101 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:103 FUNC printf format string with 1 parameters: OK
/usr/src/httpd-2.0.47/server/main.c:107 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:111 FUNC printf format string with 1 parameters: OK
/usr/src/httpd-2.0.47/server/main.c:115 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:119 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:123 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:127 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:131 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:135 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:139 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:141 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:143 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:148 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:152 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:156 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:160 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:164 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:168 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:172 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:176 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:180 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:184 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:188 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:190 FUNC printf format string with 1 parameters: OK
/usr/src/httpd-2.0.47/server/main.c:195 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:199 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:203 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:207 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:212 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:216 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:220 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:224 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:228 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:232 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:236 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:240 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:244 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/main.c:522 FUNC printf format string with 1 parameters: OK
/usr/src/httpd-2.0.47/server/main.c:523 FUNC printf format string with 1 parameters: OK
Scanning /usr/src/httpd-2.0.47/server/mpm_common.c ...
/usr/src/httpd-2.0.47/server/mpm_common.c:794 FUNC printf format string with 1 parameters: OK
/usr/src/httpd-2.0.47/server/mpm_common.c:801 FUNC printf format string with 1 parameters: OK
/usr/src/httpd-2.0.47/server/mpm_common.c:811 FUNC printf Last argument is variable or reference: BAD
/usr/src/httpd-2.0.47/server/mpm_common.c:821 FUNC printf Last argument is variable or reference: BAD
Scanning /usr/src/httpd-2.0.47/server/protocol.c ...
/usr/src/httpd-2.0.47/server/protocol.c:689 FUNC sscanf format string with 3 parameters: OK
Scanning /usr/src/httpd-2.0.47/server/provider.c ...
Scanning /usr/src/httpd-2.0.47/server/request.c ...
Scanning /usr/src/httpd-2.0.47/server/rfc1413.c ...
/usr/src/httpd-2.0.47/server/rfc1413.c:253 FUNC sscanf format string with 3 parameters: OK
Scanning /usr/src/httpd-2.0.47/server/scoreboard.c ...
Scanning /usr/src/httpd-2.0.47/server/util.c ...
Scanning /usr/src/httpd-2.0.47/server/util_cfgtree.c ...
Scanning /usr/src/httpd-2.0.47/server/util_charset.c ...
Scanning /usr/src/httpd-2.0.47/server/util_debug.c ...
Scanning /usr/src/httpd-2.0.47/server/util_ebcdic.c ...
Scanning /usr/src/httpd-2.0.47/server/util_filter.c ...
Scanning /usr/src/httpd-2.0.47/server/util_md5.c ...
Scanning /usr/src/httpd-2.0.47/server/util_script.c ...
Scanning /usr/src/httpd-2.0.47/server/util_time.c ...
Scanning /usr/src/httpd-2.0.47/server/util_xml.c ...
Scanning /usr/src/httpd-2.0.47/server/vhost.c ...
Warnings: 0
Total problems identified: 59
[EMAIL PROTECTED] pscan]#
--- config_old.c 2003-08-31 06:06:49.000000000 -0300 +++ config.c 2003-08-31 06:09:16.000000000 -0300 @@ -1891,72 +1891,72 @@ { int n = 0; - printf("\tAllowed in *.conf "); + printf("%s\t", "Allowed in *.conf "); if ((pc->req_override & (OR_OPTIONS | OR_FILEINFO | OR_INDEXES)) || ((pc->req_override & RSRC_CONF) && ((pc->req_override & (ACCESS_CONF | OR_AUTHCFG | OR_LIMIT))))) { - printf("anywhere"); + printf("%s", "anywhere"); } else if (pc->req_override & RSRC_CONF) { - printf("only outside <Directory>, <Files> or <Location>"); + printf("%s", "only outside <Directory>, <Files> or <Location>"); } else { - printf("only inside <Directory>, <Files> or <Location>"); + printf("%s", "only inside <Directory>, <Files> or <Location>"); } /* Warn if the directive is allowed inside <Directory> or .htaccess * but module doesn't support per-dir configuration */ if ((pc->req_override & (OR_ALL | ACCESS_CONF)) && !pm->create_dir_config) - printf(" [no per-dir config]"); + printf("%s", " [no per-dir config]"); if (pc->req_override & OR_ALL) { - printf(" and in .htaccess\n\twhen AllowOverride"); + printf("%s", " and in .htaccess\n\twhen AllowOverride"); if ((pc->req_override & OR_ALL) == OR_ALL) { - printf(" isn't None"); + printf("%s", " isn't None"); } else { - printf(" includes "); + printf("%s", " includes "); if (pc->req_override & OR_AUTHCFG) { if (n++) - printf(" or "); + printf("%s", " or "); - printf("AuthConfig"); + printf("%s", "AuthConfig"); } if (pc->req_override & OR_LIMIT) { if (n++) - printf(" or "); + printf("%s", " or "); - printf("Limit"); + printf("%s", "Limit"); } if (pc->req_override & OR_OPTIONS) { if (n++) - printf(" or "); + printf("%s", " or "); - printf("Options"); + printf("%s", "Options"); } if (pc->req_override & OR_FILEINFO) { if (n++) - printf(" or "); + printf("%s", " or "); - printf("FileInfo"); + printf("%s", "FileInfo"); } if (pc->req_override & OR_INDEXES) { if (n++) - printf(" or "); + printf("%s", " or "); - printf("Indexes"); + printf("%s", "Indexes"); } } } - printf("\n"); + printf("%s", "\n"); } /* Show the preloaded configuration directives, the help string explaining @@ -1985,7 +1985,7 @@ { int n; - printf("Compiled in modules:\n"); + printf("%s\n", "Compiled in modules:"); for (n = 0; ap_loaded_modules[n]; ++n) printf(" %s\n", ap_loaded_modules[n]->name); }
--- gen_test_char.c 2003-08-31 06:10:35.000000000 -0300 +++ gen_teste_char_old.c 2003-08-31 06:09:46.000000000 -0300 @@ -102,7 +102,7 @@ for (c = 1; c < 256; ++c) { flags = 0; if (c % 20 == 0) - printf("%s", "\n "); + printf("\n "); /* escape_shell_cmd */ #if defined(WIN32) || defined(OS2) @@ -150,7 +150,7 @@ printf("%u%c", flags, (c < 255) ? ',' : ' '); } - printf("%s", "\n};\n"); + printf("\n};\n"); return 0; }
--- main_old.c 2003-08-31 05:56:46.000000000 -0300 +++ main.c 2003-08-31 06:11:54.000000000 -0300 @@ -98,13 +98,13 @@ * consistent */ printf("Architecture: %ld-bit\n", 8 * (long)sizeof(void *)); - printf("Server compiled with....\n"); + printf("%s\n", "Server compiled with...."); #ifdef BIG_SECURITY_HOLE - printf(" -D BIG_SECURITY_HOLE\n"); + printf("%s\n", " -D BIG_SECURITY_HOLE"); #endif #ifdef SECURITY_HOLE_PASS_AUTHORIZATION - printf(" -D SECURITY_HOLE_PASS_AUTHORIZATION\n"); + printf("%s\n", " -D SECURITY_HOLE_PASS_AUTHORIZATION"); #endif #ifdef APACHE_MPM_DIR @@ -112,136 +112,136 @@ #endif #ifdef HAVE_SHMGET - printf(" -D HAVE_SHMGET\n"); + printf("%s\n", " -D HAVE_SHMGET"); #endif #if APR_FILE_BASED_SHM - printf(" -D APR_FILE_BASED_SHM\n"); + printf("%s\n", " -D APR_FILE_BASED_SHM"); #endif #if APR_HAS_SENDFILE - printf(" -D APR_HAS_SENDFILE\n"); + printf("%s\n", " -D APR_HAS_SENDFILE"); #endif #if APR_HAS_MMAP - printf(" -D APR_HAS_MMAP\n"); + printf("%s\n", " -D APR_HAS_MMAP"); #endif #ifdef NO_WRITEV - printf(" -D NO_WRITEV\n"); + printf("%s\n", " -D NO_WRITEV"); #endif #ifdef NO_LINGCLOSE - printf(" -D NO_LINGCLOSE\n"); + printf("%s\n", " -D NO_LINGCLOSE"); #endif #if APR_HAVE_IPV6 - printf(" -D APR_HAVE_IPV6 (IPv4-mapped addresses "); + printf("%s", " -D APR_HAVE_IPV6 (IPv4-mapped addresses "); #ifdef AP_ENABLE_V4_MAPPED - printf("enabled)\n"); + printf("%s\n", "enabled)"); #else - printf("disabled)\n"); + printf("%s\n", "disabled)"); #endif #endif #if APR_USE_FLOCK_SERIALIZE - printf(" -D APR_USE_FLOCK_SERIALIZE\n"); + printf("%s\n", " -D APR_USE_FLOCK_SERIALIZE"); #endif #if APR_USE_SYSVSEM_SERIALIZE - printf(" -D APR_USE_SYSVSEM_SERIALIZE\n"); + printf("%s\n", " -D APR_USE_SYSVSEM_SERIALIZE"); #endif #if APR_USE_POSIXSEM_SERIALIZE - printf(" -D APR_USE_POSIXSEM_SERIALIZE\n"); + printf("%s\n", " -D APR_USE_POSIXSEM_SERIALIZE"); #endif #if APR_USE_FCNTL_SERIALIZE - printf(" -D APR_USE_FCNTL_SERIALIZE\n"); + printf("%s\n", " -D APR_USE_FCNTL_SERIALIZE"); #endif #if APR_USE_PROC_PTHREAD_SERIALIZE - printf(" -D APR_USE_PROC_PTHREAD_SERIALIZE\n"); + printf("%s\n", " -D APR_USE_PROC_PTHREAD_SERIALIZE"); #endif #if APR_USE_PTHREAD_SERIALIZE - printf(" -D APR_USE_PTHREAD_SERIALIZE\n"); + printf("%s\n", " -D APR_USE_PTHREAD_SERIALIZE"); #endif #if APR_PROCESS_LOCK_IS_GLOBAL - printf(" -D APR_PROCESS_LOCK_IS_GLOBAL\n"); + printf("%s\n", " -D APR_PROCESS_LOCK_IS_GLOBAL"); #endif #ifdef SINGLE_LISTEN_UNSERIALIZED_ACCEPT - printf(" -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT\n"); + printf("%s\n", " -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT"); #endif #if APR_HAS_OTHER_CHILD - printf(" -D APR_HAS_OTHER_CHILD\n"); + printf("%s\n", " -D APR_HAS_OTHER_CHILD"); #endif #ifdef AP_HAVE_RELIABLE_PIPED_LOGS - printf(" -D AP_HAVE_RELIABLE_PIPED_LOGS\n"); + printf("%s\n", " -D AP_HAVE_RELIABLE_PIPED_LOGS"); #endif #ifdef BUFFERED_LOGS - printf(" -D BUFFERED_LOGS\n"); + printf("%s\n", " -D BUFFERED_LOGS"); #ifdef PIPE_BUF printf(" -D PIPE_BUF=%ld\n",(long)PIPE_BUF); #endif #endif #if APR_CHARSET_EBCDIC - printf(" -D APR_CHARSET_EBCDIC\n"); + printf("%s\n", " -D APR_CHARSET_EBCDIC"); #endif #ifdef APACHE_XLATE - printf(" -D APACHE_XLATE\n"); + printf("%s\n", " -D APACHE_XLATE"); #endif #ifdef NEED_HASHBANG_EMUL - printf(" -D NEED_HASHBANG_EMUL\n"); + printf("%s\n", " -D NEED_HASHBANG_EMUL"); #endif #ifdef SHARED_CORE - printf(" -D SHARED_CORE\n"); + printf("%s\n", " -D SHARED_CORE"); #endif /* This list displays the compiled in default paths: */ #ifdef HTTPD_ROOT - printf(" -D HTTPD_ROOT=\"" HTTPD_ROOT "\"\n"); + printf("%s\n", " -D HTTPD_ROOT=\"" HTTPD_ROOT "\""); #endif #ifdef SUEXEC_BIN - printf(" -D SUEXEC_BIN=\"" SUEXEC_BIN "\"\n"); + printf("%s\n", " -D SUEXEC_BIN=\"" SUEXEC_BIN "\""); #endif #if defined(SHARED_CORE) && defined(SHARED_CORE_DIR) - printf(" -D SHARED_CORE_DIR=\"" SHARED_CORE_DIR "\"\n"); + printf("%s\n", " -D SHARED_CORE_DIR=\"" SHARED_CORE_DIR "\""); #endif #ifdef DEFAULT_PIDLOG - printf(" -D DEFAULT_PIDLOG=\"" DEFAULT_PIDLOG "\"\n"); + printf("%s\n", " -D DEFAULT_PIDLOG=\"" DEFAULT_PIDLOG "\""); #endif #ifdef DEFAULT_SCOREBOARD - printf(" -D DEFAULT_SCOREBOARD=\"" DEFAULT_SCOREBOARD "\"\n"); + printf("%s\n", " -D DEFAULT_SCOREBOARD=\"" DEFAULT_SCOREBOARD "\""); #endif #ifdef DEFAULT_LOCKFILE - printf(" -D DEFAULT_LOCKFILE=\"" DEFAULT_LOCKFILE "\"\n"); + printf("%s\n", " -D DEFAULT_LOCKFILE=\"" DEFAULT_LOCKFILE "\""); #endif #ifdef DEFAULT_ERRORLOG - printf(" -D DEFAULT_ERRORLOG=\"" DEFAULT_ERRORLOG "\"\n"); + printf("%s\n", " -D DEFAULT_ERRORLOG=\"" DEFAULT_ERRORLOG "\""); #endif #ifdef AP_TYPES_CONFIG_FILE - printf(" -D AP_TYPES_CONFIG_FILE=\"" AP_TYPES_CONFIG_FILE "\"\n"); + printf("%s\n", " -D AP_TYPES_CONFIG_FILE=\"" AP_TYPES_CONFIG_FILE "\""); #endif #ifdef SERVER_CONFIG_FILE - printf(" -D SERVER_CONFIG_FILE=\"" SERVER_CONFIG_FILE "\"\n"); + printf("%s\n", " -D SERVER_CONFIG_FILE=\"" SERVER_CONFIG_FILE "\""); #endif }