[Secure-testing-team] Bug#618026: ibid: Ibid 0.1.1 contains 3 security fixes

Stefano Rivera stefanor at debian.org
Sun Mar 13 14:55:00 UTC 2011


Package: ibid
Version: 0.1.0+dfsg-2
Severity: serious
Tags: security upstream patch

Ibid 0.1.1 fixes 3 security issues [0]. They aren't particularly serious, but
should probably be addressed.

[0]: http://ibid.omnia.za.net/docs/0.1.0/changes.html#release-0-1-1-pimpernel-2011-02-24

Remote Execution:
  http://bugs.launchpad.net/bugs/705860
    Permissions were ignored for handlers not using @match. This allowed users
    to perform actions they were not authorised to.

    However, no included plugins were exposed by this, all
    access-restricted handlers had match patterns.

Information Disclosure:

  http://bugs.launchpad.net/bugs/567576
    Occasionally insecure permissions on log files. When the bot spoke
    first (creating a new log file), the log file would be publicly
    readable, even if the message was sent in private.

    Example: If the bot delivered a privmsg memo to a user at the
    beginning of the month, it would create the logfile with public
    readable permissions. If the logfile directory was published by a
    web server, this would make this private conversation log accessible
    to the public.

    Resolution: Now channels must be explicitly configured to have
    publicly readable logs.

  http://bugs.launchpad.net/649383
    If someone received a private message from the bot during a public
    meeting, the message could appear in the meeting minutes.

    Example: a privmsg memo received during a meeting would appear in
    the minutes.

Proposed debdiff with backported fixes attached.

SR

-- System Information:
Debian Release: wheezy/sid
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.32-5-amd64 (SMP w/8 CPU cores)
Locale: LANG=en_ZA.UTF-8, LC_CTYPE=en_ZA.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages ibid depends on:
ii  libjs-jquery            1.5.1-1          JavaScript library for dynamic web
ii  python                  2.6.6-3+squeeze5 interactive high-level object-orie
ii  python-beautifulsoup    3.2.0-1          error-tolerant HTML parser for Pyt
ii  python-chardet          2.0.1-1          universal character encoding detec
ii  python-configobj        4.7.2+ds-1       simple but powerful config file re
ii  python-dateutil         1.4.1-3          powerful extensions to the standar
ii  python-html5lib         0.90-1           HTML parser/tokenizer based on the
ii  python-jinja            1.2-3+b1         small but fast and easy to use sta
ii  python-pkg-resources    0.6.14-5         Package Discovery and Resource Acc
ii  python-soappy           0.12.0-4         SOAP Support for Python
ii  python-sqlalchemy       0.6.3-3          SQL toolkit and Object Relational 
ii  python-twisted-core     10.2.0-1         Event-based framework for internet
ii  python-twisted-web      10.2.0-1         An HTTP protocol implementation to
ii  python-twisted-words    10.2.0-1         Chat and Instant Messaging
ii  python-zope.interface [ 3.5.3-1+b1       Interfaces for Python
ii  python2.5               2.5.5-11         An interactive high-level object-o
ii  python2.6               2.6.6-8+b1       An interactive high-level object-o

Versions of packages ibid recommends:
ii  fortune-mod [fortune]       1:1.99.1-4   provides fortune cookies on demand
ii  ipcalc                      0.41-2       parameter calculator for IPv4 addr
ii  iputils-ping                3:20101006-1 Tools to test the reachability of 
ii  iputils-tracepath           3:20101006-1 Tools to trace the network path to
ii  man-db                      2.5.9-4      on-line manual pager
ii  python-dictclient           1.0.3.1      Python client library for DICT (RF
ii  python-dnspython            1.8.0-1      DNS toolkit for Python
ii  python-feedparser           4.1-14       Universal Feed Parser for Python
pn  python-html2text            <none>       (no description available)
ii  python-imdbpy               4.7.0-1      Python package to access the IMDb'
ii  python-twisted-mail         10.2.0-1     An SMTP, IMAP and POP protocol imp
ii  python-wokkel               0.6.3-2      collection of enhancements for Twi
ii  units                       1.87-2       converts between different systems

Versions of packages ibid suggests:
ii  apt-file                   2.4.2         search for files within Debian pac
ii  aptitude                   0.6.3-3.2     terminal-based package manager (te
ii  bc                         1.06.95-2     The GNU bc arbitrary precision cal
ii  bzr                        2.3.0-6       easy to use distributed version co
ii  caca-utils                 0.99.beta17-1 text mode graphics utilities
ii  dictd                      1.12.0+dfsg-3 dictionary server
ii  nmap                       5.21-1        The Network Mapper
ii  python-aalib               0.2-1         Python interface to AAlib, an ASCI
ii  python-dbus                0.83.1-1      simple interprocess messaging syst
ii  python-imaging             1.1.7-2       Python Imaging Library
ii  python-matplotlib          0.99.3-1      Python based plotting system in a 
ii  python-mysqldb             1.2.2-10+b1   A Python interface to MySQL
ii  python-numpy               1:1.4.1-5     Numerical Python adds a fast array
ii  python-objgraph            1.7.0-1       Module for exploring Python object
ii  python-psycopg2            2.2.1-1       Python module for PostgreSQL
ii  python-pyfiglet            0.4+dfsg-2    Python port of the FIGlet specific
ii  python-silc                0.5-1         Python bindings for SILC
ii  python-svn                 1.7.2-4       A(nother) Python interface to Subv
-------------- next part --------------
diff -Nru ibid-0.1.0+dfsg/debian/changelog ibid-0.1.0+dfsg/debian/changelog
--- ibid-0.1.0+dfsg/debian/changelog	2010-06-17 19:23:31.000000000 +0200
+++ ibid-0.1.0+dfsg/debian/changelog	2011-03-13 16:02:23.000000000 +0200
@@ -1,3 +1,16 @@
+ibid (0.1.0+dfsg-2+squeeze1) stable-security; urgency=high
+
+  * Fix the following security issues. Fixes backported from 0.1.1 bugfix
+    release.
+    - perms-705860.patch: Enforce access-restriction on handlers without
+      @match patterns. (LP: #705860)
+    - logfile-visibility-567576.patch: Channels must be explicitly configured
+      to have publicly readable logs. (LP: #567576)
+    - meeting-privacy-649383.patch: Don't report private messages from the bot
+      in meeting minutes. (LP: #649383)
+
+ -- Stefano Rivera <stefanor at debian.org>  Sun, 13 Mar 2011 15:50:35 +0200
+
 ibid (0.1.0+dfsg-2) unstable; urgency=low
 
   * Don't leak uid and umask into source tarball.
diff -Nru ibid-0.1.0+dfsg/debian/patches/logfile-visibility-567576.patch ibid-0.1.0+dfsg/debian/patches/logfile-visibility-567576.patch
--- ibid-0.1.0+dfsg/debian/patches/logfile-visibility-567576.patch	1970-01-01 02:00:00.000000000 +0200
+++ ibid-0.1.0+dfsg/debian/patches/logfile-visibility-567576.patch	2011-03-13 16:19:07.000000000 +0200
@@ -0,0 +1,85 @@
+Description: Channels must be explicitly configured to have publicly readable logs.
+ Occasionally insecure permissions on log files. When the bot spoke first
+ (creating a new log file), the log file would be publicly readable, even if
+ the message was sent in private.
+ .
+ Resolution: Now channels must be explicitly configured to have publicly
+ readable logs.
+Bug-Upstream: https://bugs.launchpad.net/ibid/+bug/567576
+Origin: upstream, https://code.launchpad.net/~stefanor/ibid/logfile-visibility-567576-0.1/+merge/36937
+Last-Update: 2011-03-13
+
+--- a/ibid/plugins/log.py
++++ b/ibid/plugins/log.py
+@@ -4,6 +4,8 @@
+ """Logs messages sent and received."""
+ 
+ from datetime import datetime
++import fnmatch
++import logging
+ from os.path import dirname, join, expanduser
+ from os import chmod, makedirs
+ 
+@@ -11,9 +13,11 @@
+ 
+ import ibid
+ from ibid.plugins import Processor, handler
+-from ibid.config import Option, BoolOption
++from ibid.config import Option, BoolOption, ListOption
+ from ibid.event import Event
+ 
++log = logging.getLogger('plugins.log')
++
+ class Log(Processor):
+ 
+     addressed = False
+@@ -38,6 +42,9 @@
+     rename_format = Option('rename_format', 'Format string for rename events',
+             u'%(timestamp)s %(sender_nick)s (%(sender_connection)s) has renamed to %(new_nick)s')
+ 
++    public_logs = ListOption('public_logs',
++            u'List of source:channel globs for channels which should have public logs',
++            [])
+     public_mode = Option('public_mode',
+             u'File Permissions mode for public channels, in octal', '644')
+     private_mode = Option('private_mode',
+@@ -47,6 +54,21 @@
+ 
+     logs = {}
+ 
++    def setup(self):
++        sources = list(set(ibid.config.sources.keys())
++                       | set(ibid.sources.keys()))
++        for glob in self.public_logs:
++            if u':' not in glob:
++                log.warning(u"public_logs configuration values must follow the "
++                            u"format source:channel. \"%s\" doesn't contain a "
++                            u"colon.", glob)
++                continue
++            source_glob = glob.split(u':', 1)[0]
++            if not fnmatch.filter(sources, source_glob):
++                log.warning(u'public_logs includes "%s", but there is no '
++                            u'configured source matching "%s"',
++                            glob, source_glob)
++
+     def get_logfile(self, event):
+         when = event.time
+         if not self.date_utc:
+@@ -70,8 +92,15 @@
+ 
+             file = open(filename, 'a')
+             self.logs[filename] = file
+-            if event.get('public', True):
+-                chmod(filename, int(self.public_mode, 8))
++
++            for glob in self.public_logs:
++                if u':' not in glob:
++                    continue
++                source_glob, channel_glob = glob.split(u':', 1)
++                if (fnmatch.fnmatch(event.source, source_glob)
++                        and fnmatch.fnmatch(event.channel, channel_glob)):
++                    chmod(filename, int(self.public_mode, 8))
++                    break
+             else:
+                 chmod(filename, int(self.private_mode, 8))
+ 
diff -Nru ibid-0.1.0+dfsg/debian/patches/meeting-privacy-649383.patch ibid-0.1.0+dfsg/debian/patches/meeting-privacy-649383.patch
--- ibid-0.1.0+dfsg/debian/patches/meeting-privacy-649383.patch	1970-01-01 02:00:00.000000000 +0200
+++ ibid-0.1.0+dfsg/debian/patches/meeting-privacy-649383.patch	2011-03-13 16:20:08.000000000 +0200
@@ -0,0 +1,21 @@
+Description: Don't report private messages from the bot in meeting minutes.
+ If someone received a private message from the bot during a public meeting,
+ the message could appear in the meeting minutes.
+Origin: upstream, https://code.launchpad.net/~max-rabkin/ibid/meeting-privacy-649383-0.1/+merge/36810
+Bug-Upstream: https://bugs.launchpad.net/ibid/+bug/649383
+Last-Update: 2011-03-13
+
+--- a/ibid/plugins/meetings.py
++++ b/ibid/plugins/meetings.py
+@@ -259,7 +259,10 @@
+                 'message': message,
+                 'time': event.time,
+             })
+-            for response in event.responses:
++        for response in event.responses:
++            if (response['source'], response['target']) in meetings:
++                meeting = meetings[(response['source'], response['target'])]
++
+                 type = 'message'
+                 if response.get('action', False):
+                     type = 'action'
diff -Nru ibid-0.1.0+dfsg/debian/patches/perms-705860.patch ibid-0.1.0+dfsg/debian/patches/perms-705860.patch
--- ibid-0.1.0+dfsg/debian/patches/perms-705860.patch	1970-01-01 02:00:00.000000000 +0200
+++ ibid-0.1.0+dfsg/debian/patches/perms-705860.patch	2011-03-13 16:18:18.000000000 +0200
@@ -0,0 +1,38 @@
+Description: Enforce access-restriction on handlers without @match patterns.
+ Permissions were ignored for handlers not using @match. This allowed users to
+ perform actions they were not authorised to.
+Bug-Upstream: https://bugs.launchpad.net/ibid/+bug/705860
+Origin: upstream, https://code.launchpad.net/~max-rabkin/ibid/perms-705860/+merge/47037
+Last-Update: 2011-03-13
+
+--- a/ibid/plugins/__init__.py
++++ b/ibid/plugins/__init__.py
+@@ -131,19 +131,22 @@
+ 
+         found = False
+         for method in self._get_event_handlers():
++            args = None
+             if not hasattr(method, 'pattern'):
+                 found = True
+-                method(event)
++                args = ()
+             elif hasattr(event, 'message'):
+                 found = True
+                 match = method.pattern.search(
+                         event.message[method.message_version])
+                 if match is not None:
+-                    if (not getattr(method, 'auth_required', False)
+-                            or auth_responses(event, self.permission)):
+-                        method(event, *match.groups())
+-                    elif not getattr(method, 'auth_fallthrough', True):
+-                        event.processed = True
++                    args = match.groups()
++            if args is not None:
++                if (not getattr(method, 'auth_required', False)
++                        or auth_responses(event, self.permission)):
++                    method(event, *args)
++                elif not getattr(method, 'auth_fallthrough', True):
++                    event.processed = True
+ 
+         if not found:
+             raise RuntimeError(u'No handlers found in %s' % self)
diff -Nru ibid-0.1.0+dfsg/debian/patches/series ibid-0.1.0+dfsg/debian/patches/series
--- ibid-0.1.0+dfsg/debian/patches/series	2010-06-17 11:48:50.000000000 +0200
+++ ibid-0.1.0+dfsg/debian/patches/series	2011-03-13 16:15:03.000000000 +0200
@@ -3,3 +3,6 @@
 docs.diff
 separate-data.diff
 fortune-path.diff
+perms-705860.patch
+logfile-visibility-567576.patch
+meeting-privacy-649383.patch


More information about the Secure-testing-team mailing list