Your message dated Sun, 12 Oct 2014 21:41:26 +0200
with message-id <[email protected]>
and subject line 
has caused the Debian Bug report #463600,
regarding elog: CVE-2008-044{4,5} multiple minor security issues
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
463600: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=463600
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Source: elog
Severity: important
Tags: security patch

Hi,
the following CVE (Common Vulnerabilities & Exposures) id was
published for elog.

CVE-2008-0444[0]:
| Cross-site scripting (XSS) vulnerability in Electronic Logbook (ELOG)
| before 2.7.0 allows remote attackers to inject arbitrary web script or
| HTML via subtext parameter to unspecified components.

CVE-2008-0445[1]:
| The replace_inline_img function in elogd in Electronic Logbook (ELOG)
| before 2.7.1 allows remote attackers to cause a denial of service
| (infinite loop) via crafted logbook entries.  NOTE: some of these
| details are obtained from third party information.

The attached patch contains the upstream fixes extracted 
from a diff between the old and the new upstream version.

If you fix this vulnerability please also include the CVE id
in your changelog entry.

For further information:
[0] http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-0444
[1] http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-0445

Kind regards
Nico

-- 
Nico Golde - http://www.ngolde.de - [email protected] - GPG: 0x73647CFF
For security reasons, all text in this mail is double-rot13 encrypted.
diff -Nurad elog-2.7.1/src/elogd.c elog-2.7.2/src/elogd.c
--- elog-2.7.1/src/elogd.c	2008-01-23 17:02:36.000000000 +0100
+++ elog-2.7.2/src/elogd.c	2008-01-30 12:26:48.000000000 +0100
@@ -435,7 +435,7 @@
 int setuser(char *str);
 int setegroup(char *str);
 int seteuser(char *str);
-void strencode2(char *b, char *text, int size);
+void strencode2(char *b, const char *text, int size);
 void load_config_section(char *section, char **buffer, char *error);
 void remove_crlf(char *buffer);
 time_t convert_date(char *date_string);
@@ -8177,7 +8177,7 @@
 
 /*------------------------------------------------------------------*/
 
-void strencode2(char *b, char *text, int size)
+void strencode2(char *b, const char *text, int size)
 {
    int i;
 
@@ -8909,10 +8909,10 @@
        format_flags[MAX_N_ATTR], year, month, day, hour, min, sec, n_attr, n_disp_attr, n_lines,
        attr_index[MAX_N_ATTR], enc_selected, show_smileys, show_text, n_moptions, display_inline,
        allowed_encoding;
-   char str[2 * NAME_LENGTH], preset[2 * NAME_LENGTH], *p, *pend, star[80], comment[10000], reply_string[256],
-       list[MAX_N_ATTR][NAME_LENGTH], file_name[256], *buffer, format[256], date[80], script_onload[256],
-       script_onfocus[256], script_onunload[256], attrib[MAX_N_ATTR][NAME_LENGTH], *text, orig_tag[80],
-       reply_tag[MAX_REPLY_TO * 10], att[MAX_ATTACHMENTS][256], encoding[80],
+   char str[2 * NAME_LENGTH], str2[NAME_LENGTH], preset[2 * NAME_LENGTH], *p, *pend, star[80], comment[10000],
+       reply_string[256], list[MAX_N_ATTR][NAME_LENGTH], file_name[256], *buffer, format[256], date[80],
+       script_onload[256], script_onfocus[256], script_onunload[256], attrib[MAX_N_ATTR][NAME_LENGTH], *text,
+       orig_tag[80], reply_tag[MAX_REPLY_TO * 10], att[MAX_ATTACHMENTS][256], encoding[80],
        slist[MAX_N_ATTR + 10][NAME_LENGTH], svalue[MAX_N_ATTR + 10][NAME_LENGTH], owner[256], locked_by[256],
        class_value[80], class_name[80], ua[NAME_LENGTH], mid[80], title[256], login_name[256], full_name[256],
        cookie[256], orig_author[256], attr_moptions[MAX_N_LIST][NAME_LENGTH], ref[256], file_enc[256],
@@ -9238,7 +9238,8 @@
        && atoi(str) == 1) {
       if (!is_author(lbs, attrib, owner)) {
          sprintf(str, loc("Only user <i>%s</i> can edit this entry"), owner);
-         show_error(str);
+         strencode2(str2, str, sizeof(str2));
+         show_error(str2);
          xfree(text);
          return;
       }
@@ -9893,6 +9894,19 @@
             else
                my_strftime(str, sizeof(str), format, pts);
 
+         } else if (attr_flags[index] & AF_DATETIME) {
+
+            if (!getcfg(lbs->name, "Time format", format, sizeof(format)))
+               strcpy(format, DEFAULT_TIME_FORMAT);
+
+            ltime = atoi(attrib[index]);
+            pts = localtime(&ltime);
+            assert(pts);
+            if (ltime == 0)
+               strcpy(str, "-");
+            else
+               my_strftime(str, sizeof(str), format, pts);
+
          } else
             strlcpy(str, attrib[index], sizeof(str));
 
@@ -12159,8 +12173,8 @@
 int save_user_config(LOGBOOK * lbs, char *user, BOOL new_user, BOOL activate)
 {
    char file_name[256], str[256], *pl, user_enc[256], new_pwd[80], new_pwd2[80], smtp_host[256],
-       email_addr[256], mail_from[256], mail_from_name[256], subject[256], mail_text[2000];
-   char admin_user[80], enc_pwd[80], url[256], error[2000];
+       email_addr[256], mail_from[256], mail_from_name[256], subject[256], mail_text[2000],
+       str2[256], admin_user[80], enc_pwd[80], url[256], error[2000];
    int i, self_register;
    PMXML_NODE node, subnode;
 
@@ -12381,7 +12395,8 @@
                sprintf(str, loc("Cannot send email notification to \"%s\""), getparam("new_user_email"));
                strlcat(str, " : ", sizeof(str));
                strlcat(str, error, sizeof(str));
-               show_error(str);
+               strencode2(str2, str, sizeof(str2));
+               show_error(str2);
                return 0;
             }
          }
@@ -12474,7 +12489,8 @@
                              getparam("new_user_email"));
                      strlcat(str, " : ", sizeof(str));
                      strlcat(str, error, sizeof(str));
-                     show_error(str);
+                     strencode2(str2, str, sizeof(str2));
+                     show_error(str2);
                      return 0;
                   };
                }
@@ -12516,7 +12532,7 @@
 
 int remove_user(LOGBOOK * lbs, char *user)
 {
-   char file_name[256], str[1000];
+   char file_name[256], str[1000], str2[1000];
    PMXML_NODE node;
 
    if (lbs->pwd_xml_tree == NULL) {
@@ -12528,7 +12544,8 @@
    node = mxml_find_node(lbs->pwd_xml_tree, str);
    if (node == NULL) {
       sprintf(str, loc("User \"%s\" not found in password file"), user);
-      show_error(str);
+      strencode2(str2, str, sizeof(str2));
+      show_error(str2);
       return FALSE;
    }
 
@@ -12777,7 +12794,7 @@
 void show_forgot_pwd_page(LOGBOOK * lbs)
 {
    int i;
-   char str[1000], login_name[256], full_name[256], user_email[256],
+   char str[1000], str2[1000], login_name[256], full_name[256], user_email[256],
        name[256], pwd[256], redir[256], pwd_encrypted[256], smtp_host[256],
        mail_from[256], mail_from_name[256], subject[256], mail_text[1000], url[1000], error[1000];
 
@@ -12797,7 +12814,8 @@
              || strieq(name, user_email)) {
             if (user_email[0] == 0) {
                sprintf(str, loc("No Email address registered with user name <i>\"%s\"</i>"), name);
-               show_error(str);
+               strencode2(str2, str, sizeof(str2));
+               show_error(str2);
                return;
             }
 
@@ -12899,7 +12917,8 @@
       else
          sprintf(str, loc("User name <i>\"%s\"</i> not registered"), name);
 
-      show_error(str);
+      strencode2(str2, str, sizeof(str2));
+      show_error(str2);
 
       return;
    } else {
@@ -12986,7 +13005,7 @@
 void show_elog_delete(LOGBOOK * lbs, int message_id)
 {
    int i, status, reply = 0, next, nsel;
-   char str[256], in_reply_to[80], reply_to[MAX_REPLY_TO * 10], owner[256];
+   char str[256], str2[256], in_reply_to[80], reply_to[MAX_REPLY_TO * 10], owner[256];
    char attrib[MAX_N_ATTR][NAME_LENGTH], mode[80];
 
    /* redirect if confirm = NO */
@@ -13068,7 +13087,8 @@
 
          if (!is_author(lbs, attrib, owner)) {
             sprintf(str, loc("Only user <i>%s</i> can delete this entry"), owner);
-            show_error(str);
+            strencode2(str2, str, sizeof(str2));
+            show_error(str2);
             return;
          }
       }
@@ -17826,7 +17846,7 @@
 time_t retrieve_date(char *index, BOOL bstart)
 {
    int year, month, day, hour, min, sec, current_year, current_month, current_day;
-   char pm[10], py[10], pd[10], ph[10], pn[10], ps[10], str[NAME_LENGTH];
+   char pm[10], py[10], pd[10], ph[10], pn[10], ps[10], str[NAME_LENGTH], str2[NAME_LENGTH];
    struct tm tms;
    time_t ltime;
 
@@ -17853,7 +17873,8 @@
       year = atoi(getparam(py));
    if (year < 1970) {
       sprintf(str, "Error: Year %s out of range", getparam(py));
-      show_error(str);
+      strencode2(str2, str, sizeof(str2));
+      show_error(str2);
       return -1;
    }
 
@@ -18681,7 +18702,8 @@
          strlcat(line, ": ", sizeof(line));
          regerror(status, re_buf, str, sizeof(str));
          strlcat(line, str, sizeof(line));
-         show_error(line);
+         strencode2(str, line, sizeof(str));
+         show_error(str);
          return;
       }
    }
@@ -18713,7 +18735,8 @@
             strlcat(line, ": ", sizeof(line));
             regerror(status, re_buf + i + 1, str, sizeof(str));
             strlcat(line, str, sizeof(line));
-            show_error(line);
+            strencode2(str, line, sizeof(str));
+            show_error(str);
             return;
          }
       }
@@ -21364,7 +21387,8 @@
                  sizeof(str));
          strlcat(str, ".", sizeof(str));
 
-         show_error(str);
+         strencode2(str2, str, sizeof(str2));
+         show_error(str2);
          return;
       }
    }
@@ -24324,7 +24348,7 @@
    char exp[80], list[1000], section[256], str[NAME_LENGTH], str1[NAME_LENGTH], str2[NAME_LENGTH],
        edit_id[80], enc_pwd[80], file_name[256], command[256], enc_path[256], dec_path[256], uname[80],
        logbook[256], logbook_enc[256], *experiment, group[256], css[256], *pfile, attachment[MAX_PATH_LENGTH],
-       full_name[256];
+       full_name[256], str3[NAME_LENGTH];
    BOOL global;
    LOGBOOK *lbs;
    FILE *f;
@@ -24361,7 +24385,7 @@
             break;
       }
       if (!strieq(logbook, str)) {
-         sprintf(str, "Error: logbook \"%s\" not defined in %s", logbook, CFGFILE);
+         sprintf(str, "Error: logbook \"%s\" not defined in %s", logbook_enc, CFGFILE);
          show_error(str);
          return;
       }
@@ -24846,8 +24870,10 @@
          strlcpy(full_name, getparam("full_name"), sizeof(full_name));
       else
          full_name[0] = 0;
-      sprintf(str, loc("Error: Command \"<b>%s</b>\" is not allowed for user \"<b>%s</b>\""),
-              command, full_name);
+
+      strencode2(str2, command, sizeof(str2));
+      strencode2(str3, full_name, sizeof(str3));
+      sprintf(str, loc("Error: Command \"<b>%s</b>\" is not allowed for user \"<b>%s</b>\""), str2, str3);
       show_error(str);
       return;
    }
@@ -24860,7 +24886,8 @@
          return;
       }
 
-      sprintf(str, loc("Error: Command \"<b>%s</b>\" not allowed"), command);
+      strencode2(str2, command, sizeof(str3));
+      sprintf(str, loc("Error: Command \"<b>%s</b>\" not allowed"), str2);
       show_error(str);
       return;
    }
@@ -25343,7 +25370,7 @@
    const char *pinit, *p, *pctmp, *pbody;
    char *buffer, *ptmp;
    char file_name[MAX_PATH_LENGTH], full_name[MAX_PATH_LENGTH],
-       str[NAME_LENGTH], line[NAME_LENGTH], item[NAME_LENGTH];
+       str[NAME_LENGTH], str2[NAME_LENGTH], line[NAME_LENGTH], item[NAME_LENGTH];
 
    n_att = 0;
    pinit = string;
@@ -25450,7 +25477,8 @@
                      eprintf("decode_post: Found attachment %s\n", file_name);
                   /* check filename for invalid characters */
                   if (strpbrk(file_name, ",;")) {
-                     sprintf(str, "Error: Filename \"%s\" contains invalid character", file_name);
+                     strencode2(str2, file_name, sizeof(str2));
+                     sprintf(str, "Error: Filename \"%s\" contains invalid character", str2);
                      show_error(str);
                      return;
                   }
@@ -25484,7 +25512,8 @@
                   if (stristr(file_name, "http://";)) {
                      size = retrieve_url(file_name, &buffer, NULL);
                      if (size <= 0) {
-                        sprintf(str, loc("Cannot retrieve file from URL \"%s\""), file_name);
+                        strencode2(str2, file_name, sizeof(str2));
+                        sprintf(str, loc("Cannot retrieve file from URL \"%s\""), str2);
                         show_error(str);
                         return;
                      }
@@ -25503,7 +25532,8 @@
                      if (strchr(buffer, ' ')) {
                         status = atoi(strchr(buffer, ' ') + 1);
                         if (status != 200) {
-                           sprintf(str, loc("File not found at URL \"%s\""), file_name);
+                           strencode2(str2, file_name, sizeof(str2));
+                           sprintf(str, loc("File not found at URL \"%s\""), str2);
                            show_error(str);
                            return;
                         }
@@ -25514,7 +25544,8 @@
                      sprintf(str, "attachment%d", n_att++);
                      setparam(str, full_name);
                   } else {
-                     sprintf(str, loc("Attachment file <b>\"%s\"</b> empty or not found"), file_name);
+                     strencode2(str2, file_name, sizeof(str2));
+                     sprintf(str, loc("Attachment file <b>\"%s\"</b> empty or not found"), str2);
                      show_error(str);
                      return;
                   }
@@ -25596,7 +25627,7 @@
 int process_http_request(const char *request, int i_conn)
 {
    int i, n, authorized, header_length, content_length;
-   char str[1000], url[256], pwd[256], cl_pwd[256], format[256],
+   char str[1000], str2[1000], url[256], pwd[256], cl_pwd[256], format[256],
        cookie[256], boundary[256], list[1000], theme[256],
        host_list[MAX_N_LIST][NAME_LENGTH], logbook[256], logbook_enc[256], global_cmd[256];
    char *p;
@@ -25759,7 +25790,8 @@
    url[i] = 0;
 
    if (strstr(url, "../..")) {
-      sprintf(str, "Invalid URL: %s", url);
+      strencode2(str2, url, sizeof(str2));
+      sprintf(str, "Invalid URL: %s", str2);
       show_error(str);
       return 1;
    }
@@ -25772,7 +25804,8 @@
 
       /* do not allow '..' in file name */
       if (strstr(url, "..")) {
-         sprintf(str, "Invalid URL: %s", url);
+         strencode2(str2, url, sizeof(str2));
+         sprintf(str, "Invalid URL: %s", str2);
          show_error(str);
          return 1;
       }
@@ -25813,7 +25846,8 @@
          url[i] = *p++;
       url[i] = 0;
       if (*(p - 1) == '/') {
-         sprintf(str, "Invalid URL: %s", url);
+         strencode2(str2, url, sizeof(str2));
+         sprintf(str, "Invalid URL: %s", str2);
          show_error(str);
          return 1;
       }
@@ -25845,7 +25879,8 @@
 
       /* do not allow '..' in file name */
       if (strstr(logbook, "..")) {
-         sprintf(str, "Invalid URL: %s", logbook);
+         strencode2(str2, logbook, sizeof(str2));
+         sprintf(str, "Invalid URL: %s", str2);
          show_error(str);
          return 1;
       }
@@ -25878,7 +25913,7 @@
          sprintf(str, "Top group %s", logbook);
          if (!getcfg("global", str, list, sizeof(list))) {
 
-            sprintf(str, "Error: logbook \"%s\" not defined in %s", logbook, CFGFILE);
+            sprintf(str, "Error: logbook \"%s\" not defined in %s", logbook_enc, CFGFILE);
             show_error(str);
             return 1;
          }
@@ -26111,7 +26146,8 @@
          else
             decode_post(logbook, &lb_list[i], request + header_length, boundary, content_length);
       } else {
-         sprintf(str, "Unknown request:<p>%s", request);
+         strencode2(str2, request, sizeof(str2));
+         sprintf(str, "Unknown request:<p>%s", str2);
          show_error(str);
       }
    }
@@ -26748,8 +26784,8 @@
                   } else {
                      if (strlen(net_buffer) > 0 && verbose) {
                         strcpy(str, "Received unknown HTTP command: ");
-                        strlcat(str, net_buffer, sizeof(str));
-                        show_error(net_buffer);
+                        strencode2(str, net_buffer, sizeof(str));
+                        show_error(str);
                      }
                      break;
                   }

Attachment: pgpjVSJxoGVCj.pgp
Description: PGP signature


--- End Message ---
--- Begin Message ---
Package: elog
Version: 2.9.2+2014.05.11git44800a7-1


Both, CVE-2008-0444 and CVE-2008-0445 were fixed with elog 2.7.0/2.7.1.
The reintroduced version of elog is 2.9.2 and therefore I mark this old
bug a fixed.

--- End Message ---

Reply via email to