Package: release.debian.org
Severity: normal
Tags: jessie
User: release.debian....@packages.debian.org
Usertags: pu

I'd like to upload an update to kildclient to fix
bug #885007 / CVE-2017-17511:
| KildClient 3.1.0 does not validate strings before launching the program
| specified by the BROWSER environment variable, which might allow remote
| attackers to conduct argument-injection attacks via a crafted URL,
| related to prefs.c and worldgui.c.

This issue is of minimal impact, and the security team considered that a DSA is
not necessary, but there is a simple fix that avoids the use of a user-
specified command or $BROWSER, and I'd like to include it in the next point
release. The debdiff is attached.

-- System Information:
Debian Release: buster/sid
  APT prefers testing
  APT policy: (900, 'testing'), (50, 'unstable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.13.0-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8),
LANGUAGE=en_US:en (charmap=UTF-8)
diff -Nru kildclient-3.0.0/debian/changelog kildclient-3.0.0/debian/changelog
--- kildclient-3.0.0/debian/changelog   2014-12-09 20:20:51.000000000 -0200
+++ kildclient-3.0.0/debian/changelog   2017-12-23 08:39:43.000000000 -0200
@@ -1,3 +1,10 @@
+kildclient (3.0.0-2+deb8u1) jessie; urgency=low
+
+  * Fix for CVE-2017-17511. New dependency 'gvfs' required in order to use
+    GTK+ function for opening URLs. Closes: #885007
+
+ -- Eduardo M Kalinowski <edua...@kalinowski.com.br>  Sat, 23 Dec 2017 
08:39:39 -0200
+
 kildclient (3.0.0-2) unstable; urgency=medium
 
   * Added work-around to enable scroll-to-end feature to work with
diff -Nru kildclient-3.0.0/debian/control kildclient-3.0.0/debian/control
--- kildclient-3.0.0/debian/control     2014-12-09 20:20:51.000000000 -0200
+++ kildclient-3.0.0/debian/control     2017-12-16 17:56:28.000000000 -0200
@@ -10,7 +10,7 @@
 
 Package: kildclient
 Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, liblocale-gettext-perl, 
libjson-perl
+Depends: ${shlibs:Depends}, ${misc:Depends}, liblocale-gettext-perl, 
libjson-perl, gvfs
 Suggests: kildclient-doc, libgtk3-perl
 Description: powerful MUD client with a built-in Perl interpreter
  KildClient is a MUD Client written with the GTK+ windowing toolkit.
diff -Nru kildclient-3.0.0/debian/NEWS.Debian 
kildclient-3.0.0/debian/NEWS.Debian
--- kildclient-3.0.0/debian/NEWS.Debian 2014-12-09 20:20:51.000000000 -0200
+++ kildclient-3.0.0/debian/NEWS.Debian 2017-12-16 18:09:46.000000000 -0200
@@ -1,3 +1,10 @@
+kildclient (3.0.0-2+deb8u1) jessie-security; urgency=high
+
+  * The option to define the command used to run a web browser has been
+    removed; the default browser (as selected by gvfs) is now used.
+
+ -- Eduardo M Kalinowski <edua...@kalinowski.com.br>  Sat, 16 Dec 2017 
17:57:34 -0200
+
 kildclient (2.8.1-1) experimental; urgency=low
 
   The HTML manual is now in the package kildclient-doc.
diff -Nru kildclient-3.0.0/debian/patches/cve-2017-17511.patch 
kildclient-3.0.0/debian/patches/cve-2017-17511.patch
--- kildclient-3.0.0/debian/patches/cve-2017-17511.patch        1969-12-31 
21:00:00.000000000 -0300
+++ kildclient-3.0.0/debian/patches/cve-2017-17511.patch        2017-12-16 
18:22:25.000000000 -0200
@@ -0,0 +1,221 @@
+Description: Fix for CVE-2017-17511
+ Uses a GTK+ function to open URLs, instead of using a command
+ supplied by the user or $BROWSER.
+Author: Eduardo M KALINOWSKI <edua...@kalinowski.com.br>
+Last-Update: 2017-12-16
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- a/src/kildclient.h
++++ b/src/kildclient.h
+@@ -633,7 +633,6 @@
+   GtkPositionType  tab_position;
+   gboolean         hide_single_tab;
+   gboolean         urgency_hint;
+-  char            *browser_command;
+   char            *audio_player_command;
+   char            *last_open_world;
+   gboolean         no_plugin_help_msg;
+--- a/src/prefs.c
++++ b/src/prefs.c
+@@ -92,7 +92,6 @@
+   GObject          *txtProxyUser;
+   GObject          *txtProxyPassword;
+ #ifndef __WIN32__
+-  GObject          *txtBrowserCommand;
+   GObject          *txtAudioPlayerCommand;
+ #else
+   GtkWidget        *tabPrograms;
+@@ -178,12 +177,6 @@
+ 
+ #ifndef __WIN32__
+     /* Load commands */
+-    txtBrowserCommand = gtk_builder_get_object(main_builder, 
"txtBrowserCommand");
+-    gtk_entry_set_text(GTK_ENTRY(txtBrowserCommand),
+-                       globalPrefs.browser_command);
+-    g_signal_connect(txtBrowserCommand, "focus_out_event",
+-                     G_CALLBACK(txt_cmd_focus_out_cb),
+-                     &globalPrefs.browser_command);
+     txtAudioPlayerCommand
+       = gtk_builder_get_object(main_builder, "txtAudioPlayerCommand");
+     gtk_entry_set_text(GTK_ENTRY(txtAudioPlayerCommand),
+@@ -319,9 +312,6 @@
+   }
+ 
+   /* Has the commands been set? */
+-  if (!globalPrefs.browser_command) {
+-    globalPrefs.browser_command = g_strdup("${BROWSER} \"%s\" &");
+-  }
+   if (!globalPrefs.audio_player_command) {
+     globalPrefs.audio_player_command = g_strdup("play \"%s\" &");
+   }
+@@ -380,8 +370,6 @@
+       globalPrefs.hide_single_tab = atoi(line + pos + 1);
+     } else if (strcmp(first_word, "urgencyhint") == 0) {
+       globalPrefs.urgency_hint = atoi(line + pos + 1);
+-    } else if (strcmp(first_word, "browsercommand") == 0) {
+-      globalPrefs.browser_command = g_strdup(line + pos + 1);
+     } else if (strcmp(first_word, "audioplayercommand") == 0) {
+       globalPrefs.audio_player_command = g_strdup(line + pos + 1);
+     } else if (strcmp(first_word, "lastopenworld") == 0) {
+@@ -475,8 +463,6 @@
+   g_string_append_printf(str, "urgencyhint %d\n", globalPrefs.urgency_hint);
+ 
+   g_string_append_printf(str,
+-                         "browsercommand %s\n", globalPrefs.browser_command);
+-  g_string_append_printf(str,
+                          "audioplayercommand %s\n",
+                          globalPrefs.audio_player_command);
+ 
+--- a/src/worldgui.c
++++ b/src/worldgui.c
+@@ -1120,13 +1120,15 @@
+ void
+ menu_url_open(GtkMenuItem *menu, char *url)
+ {
+-  char *to_run;
++  GError *err = NULL;
+ 
+-  to_run = g_strdup_printf(globalPrefs.browser_command, url);
++  gtk_show_uri(NULL, url, GDK_CURRENT_TIME, &err);
++  if (err != NULL) {
++    fprintf(stderr, "Error opening URL: %s\nCheck if gvfs is installed\n",
++            err->message);
++    g_error_free(err);
++  }
+ 
+-  system(to_run);
+-
+-  g_free(to_run);
+   g_free(url);
+ }
+ #else /* defined __WIN32__ */
+--- a/src/dlgPreferences.ui
++++ b/src/dlgPreferences.ui
+@@ -627,99 +627,6 @@
+                 <property name="orientation">vertical</property>
+                 <property name="spacing">18</property>
+                 <child>
+-                  <object class="GtkBox" id="vbox_browser">
+-                    <property name="visible">True</property>
+-                    <property name="can_focus">False</property>
+-                    <property name="orientation">vertical</property>
+-                    <property name="spacing">6</property>
+-                    <child>
+-                      <object class="GtkLabel" id="label46">
+-                        <property name="visible">True</property>
+-                        <property name="can_focus">False</property>
+-                        <property name="xalign">0</property>
+-                        <property name="yalign">0</property>
+-                        <property name="label" 
translatable="yes">&lt;b&gt;Web Browser&lt;/b&gt;</property>
+-                        <property name="use_markup">True</property>
+-                      </object>
+-                      <packing>
+-                        <property name="expand">False</property>
+-                        <property name="fill">False</property>
+-                        <property name="position">0</property>
+-                      </packing>
+-                    </child>
+-                    <child>
+-                      <object class="GtkBox" id="hbox_ident_browser">
+-                        <property name="visible">True</property>
+-                        <property name="can_focus">False</property>
+-                        <child>
+-                          <object class="GtkLabel" id="label_ident_browser">
+-                            <property name="visible">True</property>
+-                            <property name="can_focus">False</property>
+-                            <property name="label">    </property>
+-                          </object>
+-                          <packing>
+-                            <property name="expand">False</property>
+-                            <property name="fill">False</property>
+-                            <property name="position">0</property>
+-                          </packing>
+-                        </child>
+-                        <child>
+-                          <object class="GtkBox" id="vbox_int_browser">
+-                            <property name="visible">True</property>
+-                            <property name="can_focus">False</property>
+-                            <property name="orientation">vertical</property>
+-                            <property name="spacing">6</property>
+-                            <property name="homogeneous">True</property>
+-                            <child>
+-                              <object class="GtkEntry" id="txtBrowserCommand">
+-                                <property name="visible">True</property>
+-                                <property name="can_focus">True</property>
+-                                <property name="tooltip_text" 
translatable="yes">Specify the command used to launch a web browser</property>
+-                                <property name="invisible_char">●</property>
+-                                <property 
name="activates_default">True</property>
+-                              </object>
+-                              <packing>
+-                                <property name="expand">False</property>
+-                                <property name="fill">False</property>
+-                                <property name="position">0</property>
+-                              </packing>
+-                            </child>
+-                            <child>
+-                              <object class="GtkLabel" id="label49">
+-                                <property name="visible">True</property>
+-                                <property name="can_focus">False</property>
+-                                <property name="xalign">0</property>
+-                                <property name="label" 
translatable="yes">Enter the command to run a web browser. %s will be 
substituted by the web page address.</property>
+-                                <property name="wrap">True</property>
+-                              </object>
+-                              <packing>
+-                                <property name="expand">False</property>
+-                                <property name="fill">False</property>
+-                                <property name="position">1</property>
+-                              </packing>
+-                            </child>
+-                          </object>
+-                          <packing>
+-                            <property name="expand">True</property>
+-                            <property name="fill">True</property>
+-                            <property name="position">1</property>
+-                          </packing>
+-                        </child>
+-                      </object>
+-                      <packing>
+-                        <property name="expand">True</property>
+-                        <property name="fill">True</property>
+-                        <property name="position">1</property>
+-                      </packing>
+-                    </child>
+-                  </object>
+-                  <packing>
+-                    <property name="expand">False</property>
+-                    <property name="fill">False</property>
+-                    <property name="position">0</property>
+-                  </packing>
+-                </child>
+-                <child>
+                   <object class="GtkBox" id="vbox_player">
+                     <property name="visible">True</property>
+                     <property name="can_focus">False</property>
+--- a/doc/C/kildclient.xml
++++ b/doc/C/kildclient.xml
+@@ -1260,20 +1260,16 @@
+   </mediaobject>
+ </figure>
+ 
+-<para>In this section you can configure the command that will be run
+-when you right-click in a URL that appears in the MUD window and
+-select <guilabel>Open Link</guilabel>. The command will be executed,
+-with <literal>%s</literal> replaced with the URL's address. The
+-ampersand (<literal>&amp;</literal>) in the end means that the command
+-is to be executed in the background, so that you can continue using
+-KildClient while browsing the URL.</para>
+-
+-<para>You can also set a command used to play audio files (see <xref
++<para>In this section you can set a command used to play audio files (see 
<xref
+ linkend="sec:sounds"/>). Enter the command, with <literal>%s</literal>
+ in the place of the file path. The default should work (it uses the
+ SOX program, which is usually installed), but you can use other
+ commands if you use ALSA, ARTS, ESD, JACK, etc.</para>
+ 
++<para>Previously it was also possible to define a command to run a web
++browser. This option has been removed, and the default browser is now
++used instead.</para>
++
+ </sect1>
+ 
+ 
diff -Nru kildclient-3.0.0/debian/patches/series 
kildclient-3.0.0/debian/patches/series
--- kildclient-3.0.0/debian/patches/series      2014-12-09 20:20:51.000000000 
-0200
+++ kildclient-3.0.0/debian/patches/series      2017-12-16 17:55:48.000000000 
-0200
@@ -1 +1,2 @@
 fix-scroll-to-end.patch
+cve-2017-17511.patch

Reply via email to