[liberationtech] Using Gajim Instead of Pidgin for More Secure OTR Chat
Jacob Appelbaum
jacob at appelbaum.net
Wed Feb 20 23:20:48 PST 2013
Micah Lee:
> I just wrote a blog post that people here might find interesting about
> using Gajim, a chat client written in python, and Gajim's OTR plugin, a
> purely python implementation of the OTR standard, instead of Pidgin and
> libotr.
>
> https://micahflee.com/2013/02/using-gajim-instead-of-pidgin-for-more-secure-otr-chat/
>
> Also, I wrote a script called pidgin2gajim that takes the OTR keys from
> Pidgin and reformats them to work in Gajim, so you can keep your old
> Pidgin key.
>
> https://github.com/micahflee/pidgin2gajim
A few people, myself included, had an audit (drinking) game with gajim a
while back - they were quite responsive. There were a number of rather
insecure design issues that I would strongly caution rechecking - one of
them was that the Python OTR module was not included in the default
Gajim release. If I remember correctly, one had to download it and
install it from within a plugin wizard of sorts over http:
https://trac.gajim.org/ticket/7024
I think they fixed that by adding HTTPS - in python - which well, hrm.
Looks like a fun thing to follow up on, eh?
I think their HTTPS code is here:
http://hg.gajim.org/gajim/file/47df356614cc/src/common/check_X509.py
They wrote some DH code here:
http://hg.gajim.org/gajim/file/47df356614cc/src/common/dh.py
Other bugs for OTR are interesting to read:
https://trac.gajim.org/ticket/7025
https://trac.gajim.org/ticket/7030
Here are a few other bugs I reported including remote code execution issues:
https://trac.gajim.org/query?status=assigned&status=closed&status=needinfo&status=new&status=reopened&reporter=ioerror&order=priority
A friend's bug reports:
https://trac.gajim.org/query?status=assigned&status=closed&status=needinfo&status=new&status=reopened&reporter=buymebeer&order=priority
A few days ago, I also managed to remotely crash a friend using the most
recent Gajim in an OTR session. His Gajim client sent me this in response:
<message to="me" type="chat" id="30" from="myfriend/Gajim">
<body>18:37:16 (E) gajim.c.ged Error while running an even handler:
<bound method OtrPlugin.handle_incoming_msg o
f <gotr.otrmodule.OtrPlugin object at 0x1845750>>Traceback
(most recent call last): File "/usr/share/gajim/src/common/ged.py",
line 91, in raise_event if handler(
*args, **kwargs): File
"/home/user/.local/share/gajim/plugins/gotr/otrmodule.py", line 521, in
handle_incoming_msg appdata={'session':event.session}) File
"/home/user/.lo
cal/share/gajim/plugins/gotr/potr/context.py", line 219, in
receiveMessage plaintext, tlvs =
self.crypto.handleDataMessage(message) File
"/home/user/.local/share/gajim/plugins/gotr/potr/crypt.py", line 195, in
handleDataMessage tlvs = proto.TLV.parse(tlvData) File
"/home/user/.local/share/gajim/plugins/gotr/potr/proto.py", line 318, in
parse return [tlvClasses[typ].parsePayload(data[:length])] \KeyError:
0 </body><thread>xxxx</thread><nos:x value="enabled"
xmlns:nos="google:nosave"/><arc:record otr="true"
xmlns:arc="http://jabber.org/protocol/archive"/></message>
I didn't report it and I'm not sure if my friend did either. I'd guess not.
I think this was the message that I sent to my friend that caused the
above stack trace to be sent over jabber to me:
<message to='myfriend' from='me'
type='chat'><body>?OTR:AAIDAAAAAAUAAAACAAAAwKAOQK5DZercq54LCaVQaSzz23rYwDrTXyUMaaSjUUXo435D8p4kg9e8WJ/o
XxRgXt7DzFqRhckMSchtiKn3Z18crsO+KVwmlmDBzAk4mW0PL3SSbEeVCnNuixySOXbBWtohxqxwc/3yBsm2ki0Sac8fvdJfw3f5UdYBCJezM4gVEfe2UEyDyenT3TMT5TOpAtu7TVh6IgKjy0hvYsTpYKbhD6t/IojJKu55eK20QZN
qRYoYV+c5SS17mVWy8OvBWgAAAAAAAAAHAAABALaP77xkbaBybuXXtaoMU2mA0m3LIgHAKLhI8/bPtsyv+CUlnZZoqoLdlp67icTFvzUeUU3jFW/RSAa63d5mnzvb21zmhydE2i/U3hvwCyP6OHthfV8/PkBP/uq8bWfHEqJ/8yyWRM
VS/1L7uauQdDBXuORV0iYQnRBxkwVmIV5KfqKlUR0KEYza3urw5wdsOqOSIU0W9fa5ksZBDyuZxvG6d9NSJa7FRnN7aqpAzxDWGfWTg5FLSCQFMd22BxXOsS4UalkYQVxAmfLAYpv8Nw0Dw4PZfLDObpvXBx89g9nuenOAZWGtCsm24
u6xFNIHQGdxYSd93zhZV1kU7gsdcK051Lgx2h1EYbEHP2hKZxGk4AEwlgAAAAA=.</body><nos:x
xmlns:nos='google:nosave' value='enabled'/><arc:record
xmlns:arc='http://jabber.org/protocol/archive' otr='require'/></message>
Anyway, Gajim isn't free of issues and the OTR plugin is written in
Python. That may be good news but I admit, I haven't seen if there are
any test vectors that compare all of the functionality. At one point the
potr library author had considered unit testing their inputs/outputs
against the expected libotr inputs/outputs. I'm not sure if that happened.
They are at least Tor (support) friendly which is nice of them:
https://trac.gajim.org/ticket/7026
All the best,
Jake
More information about the liberationtech
mailing list