In the IETF-DKIM mailing list, it came to light that an attacker could send a properly signed email with the attacker's domain, but prepend a second From: header that says it's from some...@ebay.com, and MUA's will show the second From. It doesn't screw up the signature because the original From: is what is used to verify the signature. At issue is that RFC 5532 requires that an email have only one From: header.
To enforce this within exim, I have a simple ACL and perl function that will count whatever headers you ask it to. 1. Put this somewhere in your data ACL, preferably before the first accept verb: deny set acl_m_h_from_count = ${perl{count_headers}{from}} message = Rejected: RFC 5322 limits an email to one >From header, yours had $acl_m_h_from_count condition = ${if >{$acl_m_h_from_count}{1}} 2. Put this in your perl file: sub count_headers { my $name = shift() || return('0'); my @headers = split(/\n/, Exim::expand_string('$message_headers')); my $count = 0; foreach my $line ( @headers ) { $count++ if ( $line =~ m/^\Q$name\E/i ); } return("$count"); } If you don't have exim configured to use the built in perl interpreter, enabling it is easy. The way I did it was to create an /etc/exim/mod_exim.pl file with the contents being the perl function above. Then in /etc/exim/exim.conf, I put: perl_startup = do '/etc/exim/mod_exim.pl' perl_at_start Restart exim and VOILA, rejection of emails with more than one From: header. Exim for great justice! BTW, this function can be used to count any headers. In the same way, you could limit the number of received headers, or date headers, or require a minimum number of received headers, etc. Imagination is your only limitation. -- Regards... Todd I seek the truth...it is only persistence in self-delusion and ignorance that does harm. -- Marcus Aurealius -- ## List details at http://lists.exim.org/mailman/listinfo/exim-users ## Exim details at http://www.exim.org/ ## Please use the Wiki with this list - http://wiki.exim.org/