<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Louis-Philippe Véronneau - irc</title><link href="https://veronneau.org/" rel="alternate"></link><link href="https://veronneau.org/feeds/tags/irc.atom.xml" rel="self"></link><id>https://veronneau.org/</id><updated>2021-06-24T00:00:00-04:00</updated><entry><title>Hardening Weechat Relays Against RCE on Bullseye</title><link href="https://veronneau.org/hardening-weechat-relays-against-rce-on-bullseye.html" rel="alternate"></link><published>2021-06-24T00:00:00-04:00</published><updated>2021-06-24T00:00:00-04:00</updated><author><name>Louis-Philippe Véronneau</name></author><id>tag:veronneau.org,2021-06-24:/hardening-weechat-relays-against-rce-on-bullseye.html</id><summary type="html">&lt;p&gt;I've been using &lt;code&gt;weechat&lt;/code&gt; to connect to IRC &lt;a href="https://veronneau.org/goodbye-pidginznc-hello-weechatrelay.html"&gt;since late 2016&lt;/a&gt; and one
of its killer feature is relays. They let use other frontends like the &lt;a href="https://f-droid.org/en/packages/com.ubergeek42.WeechatAndroid/"&gt;Weechat
Android app&lt;/a&gt; or the amazing &lt;a href="https://github.com/glowing-bear/glowing-bear"&gt;Glowing Bear&lt;/a&gt; (packaged in
Debian Bullseye by yours truly).&lt;/p&gt;
&lt;p&gt;Sadly, relays also used to be somewhat of a …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I've been using &lt;code&gt;weechat&lt;/code&gt; to connect to IRC &lt;a href="https://veronneau.org/goodbye-pidginznc-hello-weechatrelay.html"&gt;since late 2016&lt;/a&gt; and one
of its killer feature is relays. They let use other frontends like the &lt;a href="https://f-droid.org/en/packages/com.ubergeek42.WeechatAndroid/"&gt;Weechat
Android app&lt;/a&gt; or the amazing &lt;a href="https://github.com/glowing-bear/glowing-bear"&gt;Glowing Bear&lt;/a&gt; (packaged in
Debian Bullseye by yours truly).&lt;/p&gt;
&lt;p&gt;Sadly, relays also used to be somewhat of a security risk: anyone with access to
a relay&lt;sup id="fnref:phone"&gt;&lt;a class="footnote-ref" href="#fn:phone"&gt;1&lt;/a&gt;&lt;/sup&gt; could run scripts on the machine running &lt;code&gt;weechat&lt;/code&gt; by using
commands such as &lt;code&gt;/exec&lt;/code&gt; or &lt;code&gt;/script&lt;/code&gt;. Not great.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/weechat/weechat/commit/80b980b2af71faa9a2d825c61a5d41d7ace0dc60"&gt;Since version 2.5&lt;/a&gt; (Buster had version 2.3), you can mitigate this
risk by setting a command allowlist for relays. Later versions &lt;a href="https://github.com/weechat/weechat/commit/dd44c1db16d0ec9359f6403337bbff59f98a389b#diff-34e6cf0f77c92bfba0a773c866cfd4333128eeb31cbe25731f04a0eb89bc48a8R1032-R1038"&gt;implemented a
sane default&lt;/a&gt; by blocking the following commands:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/exec&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/fset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/set&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/unset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/plugin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/script&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/python&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/perl&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/ruby&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/lua&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/tcl&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/guile&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/javascript&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/php&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/secure&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/upgrade&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/quit&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sadly, this default &lt;a href="https://salsa.debian.org/kolter/weechat/-/blob/debian/3.0.1-1/src/plugins/relay/relay-config.c#L1274-1288"&gt;didn't make in into Bullseye&lt;/a&gt;. If you are
running &lt;code&gt;weechat&lt;/code&gt; and are using the relays feature, after upgrading to
Bullseye, I would recommend you run the following commands in the &lt;code&gt;weechat&lt;/code&gt;
TUI:&lt;/p&gt;
&lt;pre&gt;
/set relay.weechat.commands *,!exec,!fset,!set,!unset,!plugin,!script,!python,!perl,!ruby,!lua,!tcl,!guile,!javascript,!php,!secure,!upgrade,!quit
/save
&lt;/pre&gt;

&lt;div class="footnote"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:phone"&gt;
&lt;p&gt;For example, someone steals your phone and connects to IRC via the
  Weechat app...&amp;#160;&lt;a class="footnote-backref" href="#fnref:phone" title="Jump back to footnote 1 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content><category term="blog"></category><category term="debian"></category><category term="irc"></category></entry><entry><title>Goodbye Pidgin+ZNC, hello Weechat+relay!</title><link href="https://veronneau.org/goodbye-pidginznc-hello-weechatrelay.html" rel="alternate"></link><published>2016-10-16T00:00:00-04:00</published><updated>2016-10-16T00:00:00-04:00</updated><author><name>Louis-Philippe Véronneau</name></author><id>tag:veronneau.org,2016-10-16:/goodbye-pidginznc-hello-weechatrelay.html</id><summary type="html">&lt;p&gt;Recently my neighbor moved and I lost my LAN access to his server. That also
meant I got my own ports 80 &amp;amp; 443 though (we shared internet access).&lt;/p&gt;
&lt;p&gt;I use IRC a lot, so one of the first things I did was to move from using his
ZNC bouncer with …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Recently my neighbor moved and I lost my LAN access to his server. That also
meant I got my own ports 80 &amp;amp; 443 though (we shared internet access).&lt;/p&gt;
&lt;p&gt;I use IRC a lot, so one of the first things I did was to move from using his
ZNC bouncer with Pidgin to a more "modern" setup using
&lt;a href="https://weechat.org/"&gt;Weechat&lt;/a&gt;,
&lt;a href="https://github.com/glowing-bear/glowing-bear"&gt;Glowing Bear&lt;/a&gt; and the Weechat
&lt;a href="https://github.com/ubergeek42/weechat-android"&gt;android app&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I have to say I'm happy with this setup, but there are a few caveats, especially
on the security side:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Weechat relays send OTR conversations in plain-text to the client&lt;/li&gt;
&lt;li&gt;Having access to Weechat means you can pwn the server, since you can use the
&lt;code&gt;/exec&lt;/code&gt; command.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I guess I can live with those for now. I don't see a way to fix the OTR problem
other than to have the clients use local OTR keys, and in my opinion, having my
private key on Android is way worse.&lt;/p&gt;
&lt;p&gt;As for the &lt;code&gt;/exec&lt;/code&gt; command, I could always set up a chroot for Weechat to be
sure it's not able to run anything, but I'm sure it's a lot of trouble since
the relay needs to bind ports, and do other stuff.&lt;/p&gt;
&lt;h2&gt;Setting up Weechat&lt;/h2&gt;
&lt;p&gt;There's a tons of good guides on how to set Weechat on the internet and I won't
be trying to replace them. I recommand you start with Weechat's &lt;a href="https://www.weechat.org/files/doc/devel/weechat_quickstart.en.html"&gt;Quickstart
guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The only thing I had a little trouble finding info on was how to set my relay
behind Apache. Yes, Weechat does webserver and TLS, but I trust the Apache
people much more on that side. Crypto is hard.&lt;/p&gt;
&lt;p&gt;So yeah, to achieve that I recommend reading &lt;a href="https://weblog.lkiesow.de/20160226-nginx-weechat-relay/"&gt;this&lt;/a&gt;
and adapt it to Apache using &lt;a href="https://github.com/glowing-bear/glowing-bear/wiki/Proxying-WeeChat-relay-with-a-web-server"&gt;that&lt;/a&gt;.
The result is a relay opened on a firewalled port so no one can connect to it
directly and Apache proxying to it on port 443. That's even better than a simple
relay configuration, since you can now access your relay everywhere without
bothering with closed ports.&lt;/p&gt;
&lt;p&gt;In the end, my Apache VHost looks like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;VirtualHost&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;*:443&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;ServerName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;foobar.org
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;ServerAdmin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;foo@foobar.org

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;ErrorLog&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;${APACHE_LOG_DIR}/error.log

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;ProxyPass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;ws://127.0.0.1:$port/
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;ProxyPassReverse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;ws://127.0.0.1:$port/

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;Header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;always&lt;span class="w"&gt; &lt;/span&gt;set&lt;span class="w"&gt; &lt;/span&gt;Strict-Transport-Security&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;max-age=15768000; includeSubDomains; preload&amp;quot;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;SSLEngine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;SSLCertificateFile&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="sx"&gt;/etc/letsencrypt/live/foobar.org/cert.pem&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;SSLCertificateKeyFile&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="sx"&gt;/etc/letsencrypt/live/foobar.org/privkey.pem&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;SSLCertificateChainFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sx"&gt;/etc/letsencrypt/live/foobar.org/chain.pem&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;SSLProtocol&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="k"&gt;all&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-SSLv2&lt;span class="w"&gt; &lt;/span&gt;-SSLv3&lt;span class="w"&gt; &lt;/span&gt;-TLSv1&lt;span class="w"&gt; &lt;/span&gt;-TLSv1.1
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;SSLCipherSuite&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;SSLHonorCipherOrder&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;SSLCompression&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="k"&gt;off&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c"&gt;# OCSP Stapling&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;SSLUseStapling&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;SSLStaplingResponderTimeout&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;SSLStaplingReturnResponderErrors&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;off&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;SSLStaplingCache&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;shmcb:/var/run/ocsp(128000)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;With that configuration, you can now connect to Weechat with your clients on 
&lt;code&gt;foobar.org&lt;/code&gt;, port 443. Make sure you use an SSL Websocket connection!&lt;/p&gt;
&lt;h2&gt;Glowing Bear&lt;/h2&gt;
&lt;p&gt;Glowing Bear is &lt;strong&gt;awsome&lt;/strong&gt; but the code does a few things I did not want, such
as importing bootstrap and fonts from Cloudflare. Lucky for me, it's just a
bunch of JavaScript and HTML, so it's really easy to do local modifications.&lt;/p&gt;
&lt;p&gt;I also hardcoded a few things, like the relay hostname and the port my server
is on and a few configurations not to have to redo them manually each time.&lt;/p&gt;
&lt;p&gt;One of the things I disliked from the switch from Pidgin to a web client like
Glowing Bear was that IRC is now part of my browser. Sometimes I have trouble
finding my Glowing Bear instance in-between tabs I have opened.&lt;/p&gt;
&lt;p&gt;I struggled a lot on this side, but after a few hours of work I got a neat
replacement solution. I'm using:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A new Firefox profile just for Glowing Bear&lt;/li&gt;
&lt;li&gt;A custom Firefox plugin to change the Firefox icon to the Glowing Bear one&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This way, I can disable NoScript and save my password on this profile and use
my more secured profile for everything else.&lt;/p&gt;
&lt;p&gt;Most of the time I spent on this was used trying to understand how to change
Firefox's icon. I really wanted to use Glowing Bear's icon instead to easily
distinguish my browser from IRC and had never written a Firefox add-on before.&lt;/p&gt;
&lt;p&gt;Using &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/profile-win-icons-to-aurora"&gt;this&lt;/a&gt;
add-on, I was able to boil down a custom add-on using &lt;em&gt;very&lt;/em&gt; little files. Only
2 files in fact: a config file and the logo. Here a &lt;code&gt;tree&lt;/code&gt; of the add-on:&lt;/p&gt;
&lt;pre&gt;
└── glowing-bear-icon@veronneau.org
    ├── chrome
    │   └── icons
    │       └── default
    │           └── main-window.png
    └── install.rdf
&lt;/pre&gt;

&lt;p&gt;Here's what the &lt;code&gt;install.rdf&lt;/code&gt; file looks like:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version=&amp;#39;1.0&amp;#39; encoding=&amp;#39;utf-8&amp;#39;?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;RDF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;xmlns:em=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://www.mozilla.org/2004/em-rdf#&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Description&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;about=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;urn:mozilla:install-manifest&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;em:id&amp;gt;&lt;/span&gt;glowing-bear-icon@veronneau.org&lt;span class="nt"&gt;&amp;lt;/em:id&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;em:version&amp;gt;&lt;/span&gt;1.1.0&lt;span class="nt"&gt;&amp;lt;/em:version&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;em:name&amp;gt;&lt;/span&gt;Glowing&lt;span class="w"&gt; &lt;/span&gt;Bear&lt;span class="w"&gt; &lt;/span&gt;Icon&lt;span class="nt"&gt;&amp;lt;/em:name&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;em:description&amp;gt;&lt;/span&gt;Changes&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;main&lt;span class="w"&gt; &lt;/span&gt;icon&lt;span class="w"&gt; &lt;/span&gt;for&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;Glowing&lt;span class="w"&gt; &lt;/span&gt;Bear&lt;span class="w"&gt; &lt;/span&gt;one.&lt;span class="nt"&gt;&amp;lt;/em:description&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;em:creator&amp;gt;&lt;/span&gt;pollo&lt;span class="nt"&gt;&amp;lt;/em:creator&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;em:unpack&amp;gt;&lt;/span&gt;true&lt;span class="nt"&gt;&amp;lt;/em:unpack&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;em:type&amp;gt;&lt;/span&gt;2&lt;span class="nt"&gt;&amp;lt;/em:type&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;em:multiprocessCompatible&amp;gt;&lt;/span&gt;true&lt;span class="nt"&gt;&amp;lt;/em:multiprocessCompatible&amp;gt;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;em:targetApplication&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="cm"&gt;&amp;lt;!--Firefox--&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Description&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;em:id&amp;gt;&lt;/span&gt;{ec8030f7-c20a-464f-9b0e-13a3a9e97384}&lt;span class="nt"&gt;&amp;lt;/em:id&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;em:minVersion&amp;gt;&lt;/span&gt;3.0a1&lt;span class="nt"&gt;&amp;lt;/em:minVersion&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;em:maxVersion&amp;gt;&lt;/span&gt;*&lt;span class="nt"&gt;&amp;lt;/em:maxVersion&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/Description&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/em:targetApplication&amp;gt;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/Description&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/RDF&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Make sure the &lt;code&gt;id&lt;/code&gt; is the same as the main directory of your add-on and then put
the directory in your Firefox profile under
&lt;code&gt;/home/$user/.mozilla/firefox/$profile_name/extensions&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Firefox will bug you about the add-on not being signed:
 &lt;a href="https://support.mozilla.org/en-US/kb/add-on-signing-in-firefox#w_override-add-on-signing-advanced-users"&gt;disable that feature&lt;/a&gt;.
It's OK to do this since you won't be installing any other add-on on this
profile or use it for anything else than IRC.&lt;/p&gt;
&lt;p&gt;If you want to be sure to use this profile for Glowing Bear only, one trick is
to set a bogus proxy in Firefox's network settings and whitelist your domain
name in the "No proxy for" box.&lt;/p&gt;</content><category term="blog"></category><category term="irc"></category></entry></feed>