<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc compact="yes"?>
<rfc category="info" docName="draft-levine-mailbomb-header-01" ipr="trust200902" updates="6376">
 <front>
   <title abbrev="">A Message Header to Identify Subscription Form Mail</title>

   <author initials="J.R." surname="Levine"
	   fullname="John Levine">
      <organization>Taughannock Networks</organization>

      <address>
	 <postal>
	    <street>PO Box 727</street>
	    <city>Trumansburg</city>
	    <region>NY</region>
	    <code>14886</code>
	 </postal>
	    
	 <phone>+883.5100.01196712</phone>
	 <email>standards@taugh.com</email>
      </address>
   </author>

   <date month="October" year="2017" />

   <abstract>
     <t>Many organizations have web forms that provoke an e-mail confirmation to the e-mail address
	provided in the form.  Malicious entities do bulk form submissions with forged addresses,
	resulting in mail floods to the holders of those addresses.
	This document defines a message header to identify mail sent in response to web forms,
	so that recipient mail systems can better recognize and mitigate the mail floods.
	</t>
   </abstract>
 </front>

 <middle>
   <section anchor="intro" title="Introduction">
      <t><list
               style="hanging">
               <t hangText="Discussion Venue:  ">For the time being,
		  discussion about this draft is directed to the
                     <eref target="mailto:collaboration@mailman.m3aawg.org">collaboration@mailman.m3aawg.org</eref> mailing
                  list.</t>
	 </list></t>
     <t>
	Many organizations have web forms that provoke an e-mail confirmation to the e-mail address
	provided in the form.  Malicious entities submit multiple forms with forged addresses,
	resulting in mail floods to those addresses.
	We define a message header that identifies mail sent in response to web forms,
	so that recipient mail systems can better recognize and mitigate the mail floods.
     </t><t>
	Mail systems that recognize a mail flood may defer or reject the mail.
	We also define an SMTP enhanced status code that a mail system can use in
	a message rejection SMTP reponse to alert the sending system that the message
	was rejected due to being part of a mail flood.
     </t>
   </section>
   
   <section title="Conventions">
      <t>The terms Message Submission Agent (MSA) and Message Transfer Agent (MTA) are
	 defined as in <xref target="RFC5598" />.
      </t>
      <t>The <xref target="RFC5234">ABNF</xref> terms CRLF, FWS, and fields
	 are imported from <xref target="RFC5322" />.
      </t>
   </section>

   <section title="The Form-Sub header field">
      <t>
	 A MSA or an initial MTA adds a Form-Sub header field to indicate that the message was
	 sent in response to a web form submission.
	 The header consists of a semicolon-separated list of tag=value pairs.
	 The first tag-value pair is "v=1" to indicate that the header uses the initial
	 version of this specification.
	 Receivers should ignore Form-Sub headers with a v= tag that indicates an unknown version.
	 Subsequent tag-value pairs are optional, and receivers should ignore pairs with unknown tags.
      </t><t>
	 The tags ip4 or ip6 contain the IPv4 or IPv6 address, respectively, from which the web form
	 was submitted.
	 The address may be partially redacted for privacy reasons, by replacing groups of digits with
	 the letter "x", for example, 198.51.x.x or 2001:DB8::x or x::1234:abcd:5678:ef01.
	 If the sender cannot determine the submitting IP address, it can include "ip=none".
	 The goal of including the IP address is to help receiving mail systems recognize when a
	 cluster of messages was provoked by the same submitter.
	 Using "x" rather than a hash of the the address provides a redaction that cannot be reversed
	 but still can be correlated among multiple messages.
      </t>
	 	      <figure>
          <artwork><![CDATA[
    ABNF:

    fields =/ "Form-Sub:" FWS "v=1" *(FWS ";" FWS fsarg) CRLF

    fsarg = "ip4=" ip4redacted
    ip4redacted = IPv4 address with parts optionally replaced by "x"

    fsarg =/ "ip6=" ip6redacted 
    ip6redacted = IPv6 address with parts optionally replaced by "x"

    fsarg =/ "ip=none"

    fsarg =/ x-fsarg
    
    x-fsarg =/ ALPHA *(ALPHA / DIGIT) "=" tagdata
    tagdata = string of VCHAR excluding quote and semicolon]]></artwork>
        </figure>
	<t>
	   The Form-Sub header should be included within the set of the headers
	   signed by any <xref target="RFC6376">DKIM</xref> signature headers.
	</t>
   </section>

   <section title="Mail flood enhanced status code">
      <t>
	 A mail receiver may choose to defer or reject mail that it recognizes as part of a mail
	 flood.
	 It can include the enhanced status code X.7.28 to indicate that the rejection is due
	 to the message being part of a mail flood that includes Form-Sub headers.
      </t><t>
	 A sender would typically interpret the code as a strong hint that their systems are
	 being abused, so they should mitigate the abuse to stop the mail flood.
      </t>
   </section>

   <section title="Security Considerations">
      <t>
	 IP addresses are sometimes considered to be personally identifable information.  This
	 specification allows partially redacted addresses as a compromise to avoid identifying
	 individual persons, while still providing receivers a hint to recognize bulk submissions
	 by the same party.
      </t><t>
	 The Form-Sub header discloses information from a sender to a receiver, and the X.7.28
	 enhanced status code discloses information from a receiver to a sender that they would
	 not otherwise have.
	 If one party suspects the other is malicious, e.g., a receiver fears that a sender is
	 probing to see what its mail volume limits are, it might not include the header or
	 the status code for the possibly malicious other party.
      </t>
   </section>

   <section title="IANA Considerations">
     <t>IANA has updated registries as follows.
     </t>
     <section title="Provisional Message Header Registry">
	<t>The following value has been added to the Provisional Message Header Registry</t>
      <texttable anchor="provisional"
                 title="Provisional Message Header Registry Added Value">
        <ttcol align="center">Header Field name</ttcol>
        <ttcol align="left">Template</ttcol>
        <ttcol align="left">Protocol</ttcol>
        <ttcol align="left">Status</ttcol>
        <ttcol align="left">Reference</ttcol>

        <c>Form-Sub</c>
        <c>.</c>
	<c>mail</c>
        <c>.</c>
        <c>(this document)</c>
      </texttable>
     </section>
     <section title="Enhanced Status Codes">
	<t>The following value has been added to the Enhanced Status Codes Enumerated Status Codes Registry</t>
      <texttable anchor="enhcode"
                 title="Enunerated Status Codes Registry Added Value">
        <ttcol align="center">Code</ttcol>
        <ttcol align="left">Sample Text</ttcol>
        <ttcol align="left">Associated Basic Status Code</ttcol>
        <ttcol align="left">Description</ttcol>
        <ttcol align="left">Reference</ttcol>
        <ttcol align="left">Submitter</ttcol>
        <ttcol align="left">Change Controller</ttcol>

        <c>X.7.28</c>
	<c>Mail flood detected</c>
	<c>.</c>
	<c>The message appears to be part of a mail flood of similar abusive messages.</c>
        <c>[this document]</c>
        <c>J. Levine</c>
	<c>standards@taugh.com</c>
      </texttable>
     </section>
   </section>

   <section title="Acknowledgments">
      <t>
	 Kurt Andersen and the M3AAWG Collaboration Committee provided the good parts.
      </t>
   </section>
 </middle>

 <back>
   <references title="Normative References">
      <?rfc include="reference.RFC.5322" ?>
      <?rfc include="reference.RFC.5234" ?>
      <?rfc include="reference.RFC.5598" ?>
      <?rfc include="reference.RFC.6376" ?>
   </references>
   <!-- delete this next section before publication -->
   <section title="Change log">
      <t><list
               style="hanging">
               <t hangText="00 to 01:">Fix ABNF to allow arbitrary tags.  Fix typos.
		  .</t>
	 </list></t>
   </section>

 </back>
</rfc>
