<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type='text/xsl' href='xep.xsl'?>
<xep xmlns="">
    <header>
        <title>Improving Baseline Security in XMPP</title>
        <abstract>This document describes a number of concrete and effective mechanisms for offering significant security enhancements to XMPP, with broad applicability.</abstract>
        
<legal>
<copyright>This XMPP Extension Protocol is copyright © 1999 – 2024 by the <link url="https://xmpp.org/">XMPP Standards Foundation</link> (XSF).</copyright>
<permissions>Permission is hereby granted, free of charge, to any person obtaining a copy of this specification (the "Specification"), to make use of the Specification without restriction, including without limitation the rights to implement the Specification in a software program, deploy the Specification in a network service, and copy, modify, merge, publish, translate, distribute, sublicense, or sell copies of the Specification, and to permit persons to whom the Specification is furnished to do so, subject to the condition that the foregoing copyright notice and this permission notice shall be included in all copies or substantial portions of the Specification. Unless separate permission is granted, modified works that are redistributed shall not contain misleading information regarding the authors, title, number, or publisher of the Specification, and shall not claim endorsement of the modified works by the authors, any organization or project to which the authors belong, or the XMPP Standards Foundation.</permissions>
<warranty>## NOTE WELL: This Specification is provided on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. ##</warranty>
<liability>In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall the XMPP Standards Foundation or any author of this Specification be liable for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising from, out of, or in connection with the Specification or the implementation, deployment, or other use of the Specification (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if the XMPP Standards Foundation or such author has been advised of the possibility of such damages.</liability>
<conformance>This XMPP Extension Protocol has been contributed in full conformance with the XSF's Intellectual Property Rights Policy (a copy of which can be found at &lt;<link url="https://xmpp.org/about/xsf/ipr-policy">https://xmpp.org/about/xsf/ipr-policy</link>&gt; or obtained by writing to XMPP Standards Foundation, P.O. Box 787, Parker, CO 80134 USA).</conformance>
</legal>
        <number>0419</number>
        <status>Active</status>
        <type>Humorous</type>
        <sig>Standards</sig>
        <approver>Editor</approver>
        <dependencies>
            <spec>XMPP Core</spec>
        </dependencies>
        <supersedes/>
        <supersededby/>
        <shortname>security-theatre</shortname>
        <author>
            <firstname>Chris</firstname>
            <surname>Davidland</surname>
            <email>chris.davidland@crap-security.example</email>
            <jid>chris.davidland@crap-security.example</jid>
        </author>
        <author>
            <firstname>Lucas</firstname>
            <surname>George</surname>
            <email>lucas.george@shiteam.example</email>
            <jid>lucas.george@shiteam.example</jid>
        </author>
  <revision>
    <version>1.0.0</version>
    <date>2019-04-01</date>
    <initials>XEP Editor (jsc)</initials>
    <remark>Acceptance as XEP-0419; Light editing.</remark>
  </revision>
        <revision>
            <version>0.0.1</version>
            <date>2019-04-01</date>
            <initials>cd/lg</initials>
            <remark>
                <ul>
                    <li>Initial Revision</li>
                </ul>
            </remark>
        </revision>
    </header>

    <section1 topic="Introduction" anchor="intro">
        <p>During the early part of 2019, the Security High Intelligence Team (SHITeam) at the Centre for Research and Promotion of Security (CRaP Security) conducted a detailed survey of existing security practises within XMPP deployments, and observed a number of areas where improvements could be made.</p>
        <p>After a period of intensive development, we present our findings, along with concrete, proven mechanisms for dramatically uplifting security within XMPP software and deployments, to the community.</p>
    </section1>

    <section1 topic="Requirements" anchor="reqs">
        <p>As general aims, we wish to ensure:</p>
        <ul>
            <li>All communication should occur over properly encrypted links.</li>
            <li>Data should be encrypted using industry-standard ciphers across both links and end-to-end.</li>
        </ul>
    </section1>

    <section1 topic="Particulars">
        <section2 topic="Legacy Namespaces">
            <p>XMPP has a great many XML namespaces (See <span class="ref"><link url="http://www.w3.org/TR/REC-xml-names/">Namespaces in XML</link></span> <note>Namespaces in XML &lt;<link url="http://www.w3.org/TR/REC-xml-names/">http://www.w3.org/TR/REC-xml-names/</link>&gt;.</note>) which are used as the mechanism by which the core protocol has been extended. Many of the older namespaces are, however, denoted by URIs with an "http" scheme (See <span class="ref"><link url="http://tools.ietf.org/html/rfc2616">RFC 2616</link></span> <note>RFC 2616: Hypertext Transport Protocol -- HTTP/1.1 &lt;<link url="http://tools.ietf.org/html/rfc2616">http://tools.ietf.org/html/rfc2616</link>&gt;.</note> et passim). Clearly these are insecure, as the namespace would be served in the clear, and could easily be subverted by a malicious third party. Therefore, we propose that these XML namespaces are replaced with upgraded ones running over TLS, by using the "https" scheme (See <span class="ref"><link url="http://tools.ietf.org/html/rfc2818">RFC 2818</link></span> <note>RFC 2818: HTTP Over TLS &lt;<link url="http://tools.ietf.org/html/rfc2818">http://tools.ietf.org/html/rfc2818</link>&gt;.</note>).</p>
            <p>While somewhat disruptive to existing deployments, the clear security benefits outweigh any such concerns.</p>
        </section2>
        <section2 topic="New-style Namespaces">
            <p>Newer extensions have used URNs within the "urn:xmpp" namespace. Pursuant to <span class="ref"><link url="https://xmpp.org/extensions/xep-0368.html">SRV records for XMPP over TLS (XEP-0368)</link></span> <note>XEP-0368: SRV records for XMPP over TLS &lt;<link url="https://xmpp.org/extensions/xep-0368.html">https://xmpp.org/extensions/xep-0368.html</link>&gt;.</note>, the previously legacy "xmpps" would offer immediate security benefits to such namespaces. Traditional "urn:xmpp" namespaces, while often capable of TLS transports, can only offer such security in a feature advertisement, and as such a naive namespace client can be the target of a downgrade attack.</p>
            <p>There is a clear temptation to suggest we should concentrate on ensuring namespace clients are simply more security aware, but reviving XMPPS, just as <span class="ref"><link url="https://xmpp.org/extensions/xep-0368.html">SRV records for XMPP over TLS (XEP-0368)</link></span> <note>XEP-0368: SRV records for XMPP over TLS &lt;<link url="https://xmpp.org/extensions/xep-0368.html">https://xmpp.org/extensions/xep-0368.html</link>&gt;.</note> has done, offers a straightforward mechanism for promoting a step increase in security.</p>
        </section2>
        <section2 topic="Stanza Encryption">
            <p>A pressing limitation of existing deployed end-to-end encryption techniques is a lack of full stanza encryption. While <span class="ref"><link url="https://xmpp.org/extensions/xep-0374.html">OpenPGP for XMPP Instant Messaging (XEP-0374)</link></span> <note>XEP-0374: OpenPGP for XMPP Instant Messaging &lt;<link url="https://xmpp.org/extensions/xep-0374.html">https://xmpp.org/extensions/xep-0374.html</link>&gt;.</note> does encrypt much of the stanza, although not all, <span class="ref"><link url="https://xmpp.org/extensions/xep-0384.html">OMEMO Encryption (XEP-0384)</link></span> <note>XEP-0384: OMEMO Encryption &lt;<link url="https://xmpp.org/extensions/xep-0384.html">https://xmpp.org/extensions/xep-0384.html</link>&gt;.</note> encrypts only the &lt;body/&gt; element's contents.</p>
            <p>Clearly neither is sufficient for high security applications, and therefore we propose encrypting the stanza heavily. A detailed survey of supported encryption algorithms suggests that Double ROT-13 is widely supported and available on all platforms. This cipher has the signficant benefit that encryption is entirely transparent, providing excellent interoperability benefits with older implementations that may not have been upgraded.</p>
            <p>We therefore recommend that all stanzas on the wire are fully encrypted with Double ROT-13. Given the following stanza:</p>
            <example caption="Original unencrypted stanza"><![CDATA[
  <message from='chris.davidland@crap-security.example' to='lucas.george@shiteam.example' type='chat' id='12345'>
    <some-metadata xmlns='urn:xmpps:example:metadata'/>
    <body>Hey, Lucas!</body>
  </message>
]]>
            </example>
            <p>The following shows a correctly encrypted stanza:</p>
            <example caption="Stanza with encrypted meta-data and payload"><![CDATA[
  <message from='chris.davidland@crap-security.example' to='lucas.george@shiteam.example' type='chat' id='12345'>
    <some-metadata xmlns='urn:xmpps:example:metadata'/>
    <body>Hey, Lucas!</body>
  </message>
]]>
            </example>
            <p>The following, however, has only encrypted the body text - this is NOT valid encryption, and an attacker can easily read the remaining metadata!</p>
            <example caption="Stanza with encrypted body payload"><![CDATA[
  <message from='chris.davidland@crap-security.example' to='lucas.george@shiteam.example' type='chat' id='12345'>
    <some-metadata xmlns='urn:xmpps:example:metadata'/>
    <body>Hey, Lucas!</body>
  </message>
]]>
            </example>
            <p>In the following example, while the entire contents of the stanza have been correctly encrypted, the outer stanza tag itself remains in the clear. An attacker could, therefore, trivially discover key metadata such as the sender, type, and id of the message.</p>
            <example caption="Stanza with encrypted elements"><![CDATA[
  <message from='chris.davidland@crap-security.example' to='lucas.george@shiteam.example' type='chat' id='12345'>
    <some-metadata xmlns='urn:xmpps:example:metadata'/>
    <body>Hey, Lucas!</body>
  </message>
]]>
            </example>
        </section2>
    </section1>
    <section1 topic="Security Considerations" anchor="security">
        <p>The entirely of this document is concerned with security.</p>
    </section1>

    <section1 topic="IANA Considerations" anchor="iana">
        <p>If adopted into the Standards Track, the URN "urn:xmpps" is required to be registered with the <span class="ref"><link url="http://www.iana.org/">Internet Assigned Numbers Authority (IANA)</link></span> <note>The Internet Assigned Numbers Authority (IANA) is the central coordinator for the assignment of unique parameter values for Internet protocols, such as port numbers and URI schemes. For further information, see &lt;<link url="http://www.iana.org/">http://www.iana.org/</link>&gt;.</note>. </p>
    </section1>

    <section1 topic="XMPP Registrar Considerations" anchor="registrar">
        <p>If adopted into the Standards Track, every protocol's namespace is required to be changed, and this should be reflected in the registry.</p>
    </section1>

    <section1 topic="Acknowledgements" anchor="ack">
        <p>The authors wish to acknowledge the great efforts being made elsewhere to improve the security of XMPP, and hope this specification complements those efforts suitably.</p>
    </section1>

</xep>
