TUCoPS :: Web :: Apps :: web5031.htm

FormMail anonymous mail forwarding
25th Jan 2002 [SBWID-5031]
COMMAND

	FormMail anonymous mail forwarding

SYSTEMS AFFECTED

	FormMail 1.9

PROBLEM

	From Ronald F. Guilmette  <rfg@monkeys.com>  &  Infinite  Monkeys
	&  Co.  Justin  Mason   <jm+fma@jmason.org>   -   maintainer   of
	SpamAssassin                                                  whitepaper
	http://www.monkeys.com/anti-spam/formmail-advisory.ps] :
	

	This advisory describes various methods and mechanisms  for  the  remote
	abuse of the widely-used FormMail script, version 1.9, to send  arbitrary
	e-mail messages to arbitrary recipients  without  the  consent  of,  and
	against the wishes and intentions of those who have  installed  the  script
	on their web servers. Essentially all of the exploits  described  herein
	are also applicable to  ear- lier (pre-1.9) versions of FormMail.
	

	General information on the widely-used free FormMail CGI script  may  be
	found at the following URL:
	

	     http://worldwidemart.com/scripts/formmail.shtml

	

	

	Impact

	

	By manipulating inputs to the FormMail CGI script, remote users  may  abuse
	the functionality provided by FormMail to cause the local mail server  on
	the same (web) server system to send arbi- trary e-mail messages  to  arbitrary
	e-mail destination addresses. Such e-mail messages may contain  real  or
	forged sender e-mail  addresses  (in  the  From:  headers)  entirely  of
	the attacker\'s choosing. In some cases, the envelope  sender  addresses
	of  such messages may also be set to arbitrary values by the attacker.
	

	When and if the vulnerabilities described below do exist (which is  dependent,
	in some cases, upon script installation configura- tion choices  and  web
	server  configuration  choices)  and  when  and  if  they  are  in  fact
	exploited by an outside attacker,  message  recipients  will  have  only
	incomplete e-mail tracing information available in  the  message  e-mail
	headers. This incomplete tracing information  will  lead  back  only  as
	far as the web server that hosts the FormMail  script.  The  IP  address
	actually used to ini- tiate the messages will not  be  available  to  these
	recipients. The originating IP address of the attacker may  or  may  not
	be available (in local web server logs)  to  the  administrator  of  the
	exploited web server, depending on local web server logging, log file  retention
	policies, and the length of time that elapses between  exploitation  and
	the time the local administrator becomes aware of the  exploitation.  (Of
	course, even in cases where  web  server  logs  are  available,  tracing
	information contained therein may perhaps allow  tracing  of  the  attacker
	only as far back as whatever anonymizing HTTP proxy the attacker used.)
	

	

	Notification

	

	We have followed the notification guidelines laid out in:
	

	     http://www.wiretrip.net/rfp/policy.html

	

	with respect to this advisory.  Both  authors  of  the  present  advisory
	attempted to contact the FormMail maintainer via  the  e-  mail  address
	given on the FormMail home  page  more  than  five  working  days  prior
	to publication of this advisory. No response  from  the  maintainer  was
	forthcoming. Attempt were also made to contact the maintainer  via  telephone
	but were unsuccessful.
	

	

	Background

	

	The FormMail script has a  long  and  unenviable  history  with  regards
	to security issues. Originally intended as a  helpful  free  CGI  script,
	usable in the construction of simple interactive `contact us\' type  web
	forms, it was  originally  created  and  distributed  July  9,  1995  and
	subsequently underwent several  revisions  culminating  in  version  1.6
	which was released May 2, 1997. The  1.6  version  became  widely  used,
	and copies of the 1.6 version are still installed  and  publicly  accessible
	in  many locations at the present time.
	

	Sometime between the release of the 1.6 version of FormMail  and  March,
	2001, various Internet users became aware that  spammers  were  exploiting
	the relatively modest and weak security checks within  the  1.6  version
	to send large quantities of  unsolicited  `spam\'  e-mail  to  large  numbers
	of recipients via exploited FormMail scripts. In effect,  spammers  were
	using  the  exploited  FormMail  scripts  in  ways  that  rendered  them
	functionally  equivalent  to  anonymizing  open  e-mail  relay  servers.
	Eventually,  someone  filed  a  public  security  advisory  regarding  these
	exploitations and the now evident security  problems  with  the  FormMail
	script.[1] Later reports indicated a  belief  that  spammers  were  actively
	searching the net for exploitable FormMail scripts.[2] At least two  different
	parties have apparently been motivated (by FormMail\'s evident  security
	problems) to create and  distribute  their  own  independently-developed
	versions of FormMail which allegedly close the security loopholes.[3]
	

	Subsequent to the release of the 1.6 version of the script, 1.7  and  1.8
	versions were also released.  On  his  web  site,  the  FormMail  author
	himself  notes  that  these  versions  have  unspecified   (and   perhaps
	different; see footnotes) security vulnerabilities, and that  all  users
	should upgrade to version 1.9 ``IMMEDIATELY\'\'.
	

	Version 1.9 of FormMail was released by its author on  or  about  August
	3, 2001, according to the comments  in  the  script.  This  version  has
	been alleged to rectify the various  previously  identified  security  issues
	with FormMail, including its prior ability to  be  manipulated  into  behaving
	like an anonymizing open mail relay.[4]
	

	

	Pre-1.9 Exploitation

	

	Exploitation of FormMail versions prior to 1.9  for  the  forwarding  of
	e-mail messages which have been effectively anonymized[5]  was  rendered
	trivial by the script\'s total reliance on  information  transmitted  by
	the web client to the web server (and hence to the FormMail CGI  script)
	for both authentication of the request and  for  specification  of  recipient
	e-mail  address(es)  for  each message.
	

	FormMail\'s authentication of incoming requests, such  as  it  was  (and
	is, in version 1.9), is limited to the following  rather  rudimentary  check
	on the HTTP_REFERER environment variable passed to the script  from  the
	local web server. (The web server, in its turn, obtains this value  from
	the Referer: HTTP  header  supplied by the HTTP client.)
	

	

	if ($ENV{\'HTTP_REFERER\'}) {

	    foreach $referer (@referers) {

	        if ($ENV{\'HTTP_REFERER\'} =~ m|https?://([^/]*)$referer|i) {

	            $check_referer = 1;

	            last;

	        }

	    }

	}

	else {

	    $check_referer = 1;

	}

	

	

	Note that further up in the script, the  original  script  installer  is
	required to have defined the @referers  array  to  a  list  of  strings,
	each of which is supposed to be a domain name or  IP  address.  These  domain
	names and/or IP addresses are, by  their  inclusion  in  the  installer-supplied
	definition of @referers, effectively authorized to run web servers  that
	will serve up HTML pages containing HTML forms that  may  work  with  this
	specific locally-installed copy of FormMail.  So,  for  example,  if  the
	local FormMail installer had wanted to limit the script\'s usage so  that
	it could only be  used  in  conjunction  with  HTML  forms  resident  on
	the web servers  known  as  www.example.com  and  www.example2.com  then
	the installer would have previous defined the @referers array as  follows:
	

	     @referers = (\"www.example.com\", \"www.example2.com\");

	

	There exist several ways to easily bypass  and  circumvent  the  HTTP_REFERER
	checking code shown above. The most obvious way,  and  the  way  that  most
	attackers will certainly  use  is  simply  to  decline  to  provide  any
	Referer: header at all as part of the HTTP request. In such  cases,  the
	attacker  will  effectively  ``pass\'\'  the   HTTP_REFERER   validation
	test[6], and the remainder of the FormMail script will  then  be  executed.
	

	Even though it is clear that  the  simplest  and  easiest  way  to  cir-
	cumvent the HTTP_REFERER check in FormMail is simply  to  avoid  including
	any Referer: header in the HTTP request, for the  sake  of  completeness
	we would also like to note some other methods whereby  this  same  check
	could be circumvented even in programming contexts[7] where omission  of
	Referer: headers may  be  difficult or impossible to achieve.
	

	Specifically, it should  be  noted  that  the  Perl  regular  expression
	matching attempt:
	

	     $ENV{\'HTTP_REFERER\'} =~ m|https?://([^/]*)$referer|i

	

	is not left-anchored prior to the https?: scheme  specification  nor  is
	it right-anchored after the $referer domain name.
	

	The lack of left-anchoring prior to the https?: scheme  specifica-  tion
	portion of the regular  expression  allows  an  attacker  to  ``pass\'\'
	this  simple-minded  HTTP_REFERER  validation  test  as  long   as   the
	HTTP_REFERER value (set from the HTTP Referer: header) is some  URL  containing
	a match for the regular expression anywhere within its entire length.
	

	An attacker may easily exploit this lack  of  left-anchoring  by  simply
	loading, and then submitting an HTML form to the  desired  FormMail  CGI
	from the attacker\'s own local web server using a  extended  `spoof\'  URL
	which contains a substring matching the reg- ular  expression  somewhere
	within the entire URL string.  The  matching  substring  may  be  presented
	as part of the right context  of  the  complete  URL,  and  specifically
	within a portion of the URL that will, by convention, be  ignored  by  many/most
	web servers when loading a page corresponding  to  the  given  URL.  For
	example, the following URL:
	

	     http://www.attacker.tld/myform.html?http://www.victim.com/

	

	if included as the URL in an HTTP  GET  request  will  typically  result
	in the HTTP client receiving a copy of the same web page that would  have
	been obtained if the requested URL had been just:
	

	     http://www.attacker.tld/myform.html

	

	because a typical web server will simply ignore the trailing  por-  tion
	of the URL past the question mark.[8] Typical HTTP clients on the  other
	hand, if asked to perform such a GET operation, will do so (with  the  help
	of the relevant web server) but will then preserve the  entire  original
	request URL and will later present that  as  the  Referer:  value,  when
	and if some HTML form on the page is the subject of a submit operation.
	

	The HTTP client\'s preservation of the entire URL, including the  trailing
	`spoof\' substring, allows most typical HTTP clients to  trivially  pass
	FormMail\'s simple-minded HTTP_REFERER validation test even if the  attacker
	has neither built nor obtained any HTTP client software that allows  for
	suppression of Referer: head- ers[9], and even if he is writing  his  own
	attack software in some language (e.g. Javascript) that otherwise  makes
	the implementa- tion of  attacks  on  web  CGIs  particularly  easy  and
	convenient.
	

	The lack of right-anchoring after the $referer portion  of  the  regular
	expression may also be exploited by an  attacker  wishing  to  create  a
	modified FormMail HTML submission form on a web server of his  own  choosing.
	This may be more  difficult  than  exploiting  the  lack  of  left-anchoring
	however, and may perhaps  only  be  achievable  with  the  aid  of  some
	cooperative DNS server. Given the availability of such a server  however,
	a DNS `A\' record could easily be defined for an fully-qualified  domain
	name  such as:
	

	     www.victim.com.attacker.tld

	

	and that `A\' record could be defined with an IP address of  the  attacker\'s
	choosing. In this case, the  attacker  could  easily  load  his  malevolent
	locally-installed HTML exploit form (which has its  ACTION=  clause  set
	to point to the victim\'s FormMail) into his browser via a  URL  such  as:
	

	     http://www.victim.com.attacker.tld/myform.html

	

	The attacker could then simply submit the  form  and  it  would  `pass\'
	the simple FormMail HTTP_REFERER validation check.
	

	Note  that  all  three  methods  for  circumventing  FormMail\'s  HTTP_REFERER
	validation remain present in the current (1.9) ver- sion of the  script,
	i.e. (1) complete  omission/suppression  of  Referer:  headers  and  (2)
	exploitation of the lack of right- anchoring and (3) exploitation of  the
	lack of left-anchoring.
	

	Once  an  attacker  has  passed  the   easily   circumventable   HTTP_REFERER
	validation check, he then has a mostly free  hand  to  manipulate  other
	CGI (form input) variables in order to direct an e-mail message  of  his
	choice to some selected destination address or addresses.
	

	FormMail  obtains  the  desired  destination  e-mail  address  for  each
	transmitted e-mail message  from  the  HTTP  client.  The  HTTP  client,
	in turn, is expected to obtain it from the pre-defined  value  of  a  hidden
	HTML form field (recipient) within a form  (or  forms)  associated  with
	the specific web site/server where  a  given  instance  of  FormMail  is
	installed. Obviously however, if (as we have seen above) it  is  trivial
	to trick FormMail into believing that  some  attacker-created  form  which
	actually resides  on  some  arbitrary  web  server  of  the  attacker\'s
	choosing is a valid ref-  erer,  then  attackers  can  certainly  manufacture
	(or simulate) forms with the recipient form field set to  any  e-mail  address
	desired.
	

	These are the conditions which led to earlier reports of FormMail  being
	exploited, generally by bulk e-mail spammers, as if it were  a  kind  of
	anonymizing open e-mail relay server. The fundamental problem  was  that
	the HTTP_REFERER checking could be  easily  spoofed,  and  that  the  pre-1.9
	versions of FormMail performed no validation checking  of  any  kind  on
	the recipient CGI parameter. Attackers were thus allowed to set  this  parameter
	to any desired value.
	

	Version 1.9 of FormMail incorporated changes whose purpose was to  allow
	the actual destination e-mail addresses (i.e. the value  given  for  the
	recipient CGI parameter) for any submitted message to  be  restricted  by
	checkingthem against  an  installer-supplied  list  of  ``acceptable\'\'
	recipient e-mail addresses and/or recipi- ent domains. As noted below  however,
	these changes did not fully achieve their goal. That  unfortunate  fact,
	together with the multiple flaws in HTTP_REFERER checking  (all  of  which
	are still present in the 1.9 version) imply that even  the  current  1.9
	ver- sion of FormMail can still be used and abused for spamming, for  e-mail
	harassment, or other  purposes  neither  condoned  or  intended  by  the
	FormMail installer.
	

	

	Anonymous Mail Forwarding Exploits in FormMail 1.9

	

	As noted above, versions  of  FormMail  up  to  and  including  1.8  are
	believed to be vulnerable to various security  exploits,  including  but
	not limited to creative generation of  HTTP  header  and  message  data,
	leading to an installed FormMail CGI script at a targeted site  behaving
	like  an  anonymizing  open  e-mail  relay.  At  present,  spammers  are
	continuing and increasing their abuse of  such  ear-  lier  versions  of
	FormMail, especially the widely deployed 1.6 version, at  various  sites
	where these earlier versions are,  unfortunately,  still  installed.[10]
	

	This advisory describes various vulnerabilities in version  1.9  of  the
	FormMail script that may also lead to misuse and abuse of the script  by
	remote attackers to achieve an effect functionally equivalent to  an  anonymizing
	open e-mail relay server.
	

	Note that many, if not most of these exploits were also present in  versions
	of FormMail prior to the 1.9 version, and thus it  may  be  fairly  said
	that the exploits described herein are not in any sense new to  the  1.9
	version. For the sake of brevity however, we report  these  problems  as
	vulnerabilities in the 1.9 version.
	

	The vulnerabilities described herein may be broadly  separated  into  the
	following   categories:   (1)   creative   recipient   addressing,   (2)
	exploitation of the email and realname CGI parameters, (3)  other  regular
	expression  matching  issues,  and  (4)  mail-bombing  by  proxy   using
	FormMail. These vulnerability categories are each  described  in  separate
	sections below.
	

	

	Creative Recipient Addressing

	

	The preceding section noted that FormMail 1.9 suffers from the  same  HTTP_REFERER
	validation flaws as earlier versions of the  script,  thus  forcing  the
	prevention of unauthorized use/misuse of the script to rely entirely  on
	the code added in 1.9 which  attempts  to  validate  client-supplied  recipient
	e-mail addresses. These added checks contain a number of subtle and  not-so-subtle
	flaws however, any one of which, if exploited, renders  the  check-  ing
	code useless and ineffective.
	

	Briefly, the  recipient  address  checking  code  added  in  1.9  merely
	attempts to ensure that each comma-separated substring  of  the  client-specified
	recipient string matches (with right-anchoring only, and without case  sensitivity)
	one of a set of strings spec- ified  by  the  person  who  installs  the
	FormMail script. The array called @recipients is used to hold these  (valid
	recipient address or domain) strings and each  comma-delimited  substring
	of the client-supplied recipient CGI parameter string is checked to  see
	that it matches  (right-anchored)  at  least  one  of  these  installer-
	specified ``approved\'\' recipient address or domain strings.
	

	As long as this check `passes\', for any  given  comma-separated  substring
	of the recipient value, that substring will be saved in yet another  array
	(@send_to), and later on, all elements of the  ``validated\'\'  @send_to
	array are join\'d back together, with comma separators, and  the  resulting
	string replaces the old, unvali- dated recipient  CGI  parameter  value.
	That value is then later used (when writing  e-mail  headers  to  the  local
	mail server) in the following Perl statement:
	

	     print MAIL \"To: $Config{\'recipient\'}\\n\";

	

	So, for example, if the installer of the script had provided  a  definition
	of @recipients like:
	

	     @recipients = (\'pres\\@elsewhere.tld\', \'ourdomain.tld\');

	

	then all of the following client-supplied recipient addresses, if  given
	by the HTTP client, either alone or as elements of  a  comma-  separated
	list of recipient addresses, would ``match\'\' some  ele-  ment  of  the
	@recipients array definition shown above, and would thus be  allowed  as
	valid recipient addresses:
	

	     pres@elsewhere.tld

	     PRES@elsewhere.tld (See note #1)

	     vice-pres@elsewhere.tld  (See note #2)

	     Professor.Plum@ourdomain.tld

	     Norma.Desmond@nostalgia.ourdomain.tld

	     user%somewhere.tld@ourdomain.tld  (See note #3)

	     user@somewhere.tld(ourdomain.tld  (See note #4)

	     user@somewhere.tld(pres@elsewhere.tld  (See notes #2, #4)

	     <user@somewhere.tld>ourdomain.tld (See note #5)

	     <user@somewhere.tld>user@ourdomain.tld (See note #6)

	     <user@somewhere.tld>pres@elsewhere.tld (See notes #2, #6)

	

	Unfortunately, some of the  ``acceptable\'\'  strings  shown  above,  if
	crafted by an attacker and then used within a spoofed/fraudulent HTTP  request
	may lead to undesirable  consequences,  i.e.  the  for-  warding  of  an
	associated e-mail message  to  some  recipient  (or  recipients)  having
	e-mail addresses that the installer never intended to allow  as  FormMail
	message recipients.
	

	Several notes regarding the example strings shown above  are  in  order:
	

	

	  1.  Comparison  of each comma-separated sub-part of the client-

	      supplied recipient string is performed without case  sensi-

	      tivity.   On systems where the initial (user ID) portion of

	      e-mail addresses is  considered  case-sensitive,  this  may

	      allow  misuse  of FormMail to send e-mail messages to unin-

	      tended recipients having e-mail addresses with  alternative

	      case  on  the same system.  Worse however, this possibility

	      opens up a hole that might perhaps allow a remote  attacker

	      to misuse an installed FormMail script in a way that avoids

	      immediate detection by any local user or administrator.  We

	      will return to this point below.

	

	  2.  In  fairness  to  the FormMail author, the README file sup-

	      plied with FormMail version  1.9  explicitly  and  strongly

	      suggests  that installers should prefix any and all full e-

	      mail addresses they include within the  definition  of  the

	      @recipients  array with the up-caret (^) character, thereby

	      causing subsequent regular expression  matching  for  those

	      strings  to  be anchored both on the left and on the right.

	      Following that suggestion  would  certainly  eliminate  the

	      potential  exploits  noted  above  that refer to this note.

	      Anyone following the FormMail author\'s advice  with  regard

	      to  1.9  installation  would have written their @recipients

	      definition as follows:

	

	      @recipients = (\'^pres\\@elsewhere.tld\', \'ourdomain.tld\');

	

	      rather than the way it  was  written  further  above,  thus

	      eliminating  such  obvious potential problems as being able

	      to trick FormMail into sending unauthorized e-mail messages

	      to  vice-pres@elsewhere.tld.  As we have already noted how-

	      ever, even when each and every element  of  the  installer-

	      defined  @recipients  array is set to a full e-mail address

	      (as opposed to merely a domain name) and even when each  of

	      the  e-mail  addresses  in  question  is left-anchored, the

	      check for correspondence between client-supplied  recipient

	      addresses  and the installer-defined set of allowed recipi-

	      ent addresses is performed in a  case  insensitive  manner.

	      We will return to this issue below.

	

	  3.  Although  the  recipient  parameter provided to FormMail by

	      the HTTP client will  have  newlines  and  carriage  return

	      characters,  if  present, removed by FormMail, and although

	      the recipients string is separated into a set of comma-sep-

	      arated  substrings  before the recipient address validation

	      occurs, no other validation of the form, format, or  syntax

	      of  the  recipient  address(es)  is performed.  This leaves

	      open the possibility of  using  the  old  and  widely-known

	      Sendmail  percent  hack[11]  form  of e-mail addressing, at

	      least in cases where one or more of  the  elements  of  the

	      @recipients array are just domain names, as opposed to full

	      e-mail addresses.

	

	      To understand fully why use of the percent hack  is  almost

	      guaranteed to work in such cases, one must understand that:

	

	         o FormMail is  designed  to  work  in  conjunction  with

	           either  Sendmail or with some work-alike program, such

	           as Postfix, and we may thus assume that whatever  mail

	           server  FormMail is hooked up to will almost certainly

	           be one that does support  the  percent  hack  form  of

	           addressing.

	

	         o In  normal  (non-exploit)  operation,  the mail server

	           resident on the  same  host  as  the  FormMail  script

	           itself  will  (unless  the  administrator  has botched

	           either his Sendmail configuration or his FormMail con-

	           figuration)  accept  all  ``locally generated\'\' e-mail

	           messages  coming  out  of  the  FormMail  script   and

	           addressed  to any e-mail address whose @domain part is

	           the same as of any one of the domains  listed  in  the

	           @recipients  array.   Thus, in the preceding examples,

	           we can usually be sure that the local mail  server  on

	           the FormMail host will not disallow or reject any such

	           ``locally-generated\'\' e-mail message that is addressed

	           to  user%somewhere.tld@ourdomain.tld  because  it will

	           see  that  the  domain  portion  of  this  address  is

	           ourdomain.tld.   That alone will probably be enough to

	           satisfy Sendmail that it should accept (and, if neces-

	           sary,  forward) the mail message in question.  Also, a

	           typical Sendmail installation, even a modern one, will

	           usually not itself object to any kind of forwarding of

	           any ``locally-generated\'\' e-mail message to any  other

	           domain  or site, because it is typical to assume (when

	           configuring Sendmail) that ``local\'\'  e-mail  origina-

	           tors  can  be fully trusted, at least to send outgoing

	           e-mail to other sites.  (Note that FormMail is  acting

	           in  the  role  of a ``local\'\' and trusted user in this

	           case.)  So an attacker really only needs to  get  past

	           FormMail\'s  check  on  HTTP_REFERER (which, as we have

	           seen, is trivial to do) and then, if he can  also  get

	           past  FormMail\'s  check  of the right-most part of the

	           recipient  address  string(s)  against  the  @referers

	           array  he  will  be  able  to  send e-mail messages to

	           essentially any e-mail address anywhere on the  Inter-

	           net.   As illustrated by the example above, use of the

	           percent hack form  of  e-mail  addressing  allows  the

	           attacker to get past the latter check.

	

	  4.  RFC 2822, like RFC 822 before it, specifies that within the

	      text of so-called structured mail headers (e.g.   To:)  any

	      string  enclosed within matching left and right parenthesis

	      shall be taken as being  purely  commentary  material,  and

	      shall  be ignored.  Thus, if an attacker provides a recipi-

	      ent string of the form:

	

	           user@somewhere.tld(ourdomain.tld

	

	      and if that  string  passes  the  (right-anchored)  regular

	      expression  matching check (i.e. matching at least one ele-

	      ment of the @recipients array),  then  a  To:  header  line

	      like:

	

	           To: user@somewhere.tld(ourdomain.tld

	

	      will  be  generated by FormMail and passed to Sendmail.  In

	      such a case, Sendmail should take  everything  between  the

	      left parenthesis and the corresponding right parenthesis as

	      a comment, thus leaving it with only the user@somewhere.tld

	      address to act on.  However in this case, there is no clos-

	      ing right parenthesis before the end of the header line, so

	      this would appear to be a case where the actual behavior of

	      the mail server cannot be predicted.  In practice  however,

	      both  Sendmail  and Postfix helpfully and implicitly supply

	      the missing closing right parenthesis themselves, with  the

	      result  being  that  the  (ourdomain.tld portion of the To:

	      header   is   in   fact   ignored,   leaving    only    the

	      user@somewhere.tld part to define the actual e-mail recipi-

	      ent address.

	

	  5.  For a client-supplied recipient string of the form:

	

	           <user@somewhere.tld>ourdomain.tld

	

	      Sendmail will subsequently be fed  the  corresponding  mail

	      header:

	

	           To: <user@somewhere.tld>ourdomain.tld

	

	      and  when  such a header is supplied to Sendmail along with

	      Sendmail\'s -t  (take  recipient  address(es)  from  message

	      headers) option, reports indicate that Sendmail will send a

	      copy of the message to user@somewhere.tld, and that it will

	      then ignore the remainder of the header line, i.e. the part

	      past the right (closing) angle bracket.  (This is  in  fact

	      entirely consistent with what the mail header parsing rules

	      contained in RFC 822 and 2822 would indicate  should  actu-

	      ally happen in such a case.)

	

	  6.  For a client supplied recipient string of the form:

	

	           <user@somewhere.tld>user@ourdomain.tld

	

	      it  would appear clear that if ourdomain.tld is included in

	      @recipients, then such a string will pass FormMail\'s recip-

	      ient  address acceptability check, and later, when Sendmail

	      is fed:

	

	           To: <user@somewhere.tld>user@ourdomain.tld

	

	      then Sendmail will most certainly send a copy of the  asso-

	      ciated    e-mail    message    at   the   very   least   to

	      user@somewhere.tld,     but      possibly      also      to

	      user@ourdomain.tld.   Reports suggest however that Sendmail

	      will ``parse out\'\' the latter e-mail address and  send  the

	      message only to the former address.  Even if the local mail

	      server used on a given victim server is one taht will parse

	      the  header  shown  above  and  then  send  to  both e-mail

	      addresses, an attacker could potentially choose some infre-

	      quently-  or  never-monitored  e-mail  address (such as the

	      traditional nobody user ID) within the targeted domain  and

	      use  that  e-mail  address to provide the right context for

	      his (spoof) recipient string.  That also will allow him  to

	      get past FormMail\'s recipient address acceptability checks.

	

	

	Exploitation of email and realname CGI Parameters

	

	As noted in the preceding section, clever manipulation  of  the  recipient
	CGI parameter when invoking  FormMail  1.9  can  allow  an  attacker  to
	bypass the recipient address checks imposed by  the  installer\'s  definition
	of the @recipients array, at least in cases where the installer  has  failed
	to define elements of this array  to  complete  e-mail  addresses  (i.e.
	when one or more ele- ments of the array is  just  a  domain  name)  and
	when and if the installer has failed to  left-anchor  (with  `^\')  each
	full e-mail address within the @recipients array definition. Even  in  cases
	where all elements of the @recipients  array  are  full  e-mail  addresses
	and where these are all left-anchored, an attacker may perhaps  still  be
	able to bypass FormMail\'s recipient address checks by exploiting  various
	weaknesses in FormMail\'s regular expression matching code, as  we  will
	show in the next section.
	

	Clever bypassing of the checks applied to  the  comma-separated  substrings
	of the recipient CGI parameter may however not even be necessary so  long
	as the attacker is willing to supply  cleverly  constructed  values  for
	the email and/or realname CGI parameters, and so long  as  the  attacker
	is willing to allow one copy  of  his  e-mail  message  to  go  to  some
	``permitted\'\'  recipient  address,   in   addition   to   some   other
	attacker-specified list of addresses.
	

	The email and realname CGI parameters  may  undergo  even  less  scrutiny
	by  FormMail  than  the   comma-separated   recipient   substrings.   In
	fact the email and realname CGI parameters  may  undergo  no  validation
	whatsoever. (The realname parameter  most  certainly  does  not  undergo
	any validation whatsoever within FormMail, and the email parameter  will
	not undergo any validation as long as it is not listed as a  required  field
	in the list of required form fields that is itself initialized from  the
	client- supplied value of yet another hidden form field. Given  that  an
	attacker, either a determined one or a hurried and careless one, will  most
	probably set the value of the required hidden form field to null  or  no
	value, we will just  simplify  the  remainder  of  our  presentation  by
	assuming, from here forward, that neither the email  CGI  parameter  nor
	the realname CGI  parameter  undergo  any validation.)
	

	One critical additional point to note here is that neither the  email  CGI
	parameter value nor the realname CGI parameter value are in any  way  ``cleaned
	up\'\' by FormMail before they are printed to the local mail server.  Specifically,
	the values of these variable do not have carriage  returns  or  newlines
	removed before they are given to the mail server.
	

	Once they have been supplied by the HTTP client, both the email and  realname
	CGI parameter values are printed, verbatim and with- out  filtering,  to
	the local mail server via  the  following  Perl statement:
	

	     print MAIL \"From: $Config{\'email\'} ($Config{\'realname\'})\\n\";

	

	One\'s first thought upon seeing this statement is that the lack  of  filtering
	or validation applied to the email and realname  CGI  parameters  cannot
	possibly be harmful, given the benign  context  (i.e.  a  From:  header)
	within which these values will appear. That thought would be  misleading
	however, because of the lack of  newline  removal  for  these  parameter
	values.
	

	Because an attacker can embed newlines in either or both  of  these  CGI
	variable values, he can also effectively change  the  context  in  which
	the remaining (rightward) characters of either value appear to the  local
	mail server. Specifically, an attacker could set the value of the  email
	parameter to some string such as:
	

	     IGNORED\\nCc: user@somewhere.tld,...

	

	where \\n represents a  newline  character.  This  rather  simple  trick
	provides the attacker with access to a self-generated Cc:, Bcc:,  or  (secondary)
	To: header context which, once achieved, provides the attacker  with  an
	avenue to direct the local mail server  to  send  the  attached  message
	to some arbitrary set of e- mail  addresses,  in  addition  to  whatever
	address may have been specified (via the recipient  CGI  parameter)  for
	inclusion in the earlier To: header.
	

	As should be apparent from the Perl print statement shown above, this  same
	context shift (achievable via embedded newlines) may  also  and  equally
	be exploited via clever construction of a suit-  able  attacker-supplied
	value for  the  realname  CGI  parameter.  In  this  case  however,  the
	attacker would need to take care to also  escape  from  the  confines  of
	the paired parentheses that  the  script  will  supply  to  enclose  the
	realname value. Given that the  realname  parameter  value  will  appear
	in  the  mail  headers  sur-  rounded  by  a  pair  of  open  and  close
	parenthesis, the ``smuggling in\'\'  of  additional  recipient  addresses
	via the realname CGI parameter requires the  attacker  to  include  some
	strategically- placed parenthesis of his own in the value he  passes  to
	the vic- tim web server for the  realname  parameter.  For  example,  the
	value:
	

	     IGNORED)\\nCc: user@somewhere.tld\\nX-Ignore: (

	

	could be supplied by an attacker as the realname  CGI  parameter  value,
	thus closing  the  already-opened  SMTP  header  comment,  escaping  to,
	and creating a new (Cc:) e-mail header context  (which  is  then  filled
	with victim e-mail addresses), escaping again to another  new  e-mail  header
	context, and then finally sup- plying a open parenthesis  to  match  the
	closing one that will be supplied by the Perl print statement within  FormMail.
	

	Last but by no means least, it should be noted that  vulnerable  FormMail
	installations may be less than ideal as a vehicles for  distributing  e-mail
	messages, either unsolicited or otherwise,  due  to  FormMail\'s  rather
	inconvenient (for the spammers) habit of appending its own  unique  legend
	just ahead of the body text of any given  mail  message  that  it  forwards.
	FormMail always prepends a set of body text lines  having  the  following
	general form to each e-mail message it passes to the local mail server:
	

	  Below is the result of your feedback form.  It was submitted by

	  (sender address) on date/time stamp

	  ---------------------------------------------------------------

	

	This additional leading  body  text  would  appear  to  be  annoying  to
	spammers who would much prefer to have the text of their own mes-  sages
	appear at the very start of the  message  body  text.  (We  assume  that
	this spammer-annoying aspect of FormMail is one of the reasons,  if  not
	the primary reason that spammers have gener-  ally  shown  a  preference
	for using open mail relays, as opposed to  open  FormMail  scripts,  for
	sending their messages.)
	

	Unfortunately however, given that the email  and  realname  CGI  parameters
	of FormMail may contain embedded newlines, it  is  apparent  that  either
	of these parameters may be set, by an  attacker,  to  a  value  which  includes
	not only  additional  recipient  addresses,  but  also  additional  mail
	headers and additional ini- tial message body text  of  the  attacker\'s
	choosing.  For example, the email parameter could be set to:
	

	     \\nCc: user@somewhere.tld\\nSubject: $$$\\n\\nMAKE MONEY FAST!!!

	

	thus causing the text \"MAKE MONEY  FAST!!!\"  to  appear  in  the  out-
	going message as the very  first  line  of  the  message\'s  body  text.
	Furthermore, a value such as the one shown just above could  be  followed
	by arbitrarily many additional newline characters, thus pushing  the  FormMail
	supplied legend text far down below the attacker\'s desired subject  header
	and initial message text (and perhaps even entirely off  the  `front  page\'
	of what the messages recipient will see  when  he  first  looks  at  the
	received  message).
	

	This tactic may of course  be  applied  with  essentially  equal  effect
	to either the email or realname parameters, except that the  caveats  mentioned
	above concerning the balancing of parenthe- sis would apply in the  case
	of  manipulation  of  the  realname parameter.
	

	These possible tactics for ``hiding\'\'  the  otherwise  spammer-  annoying
	FormMail leading body text are not, unfortunately, the only  ones  possible.
	As  one  careful  early  reviewer  of  this  advi-   sory   noted,   the
	vulnerability which allows an attacker to include newlines in  the  email
	an/or realname CGI parameters might also open up an avenue  whereby  the
	FormMail-supplied leading body text could be  effectively  removed  from
	the view of a message recipient via the  careful  construction  of  MIME
	e-mail headers which achieve that  exact  effect.  (This  design  of  an
	exploit making use of this approach is  left  as  an  exercise  for  the
	reader.)
	

	

	Other Regular Expression Matching Issues
	

	We have noted above several ways of bypassing  FormMail\'s  attempts  to
	validate a client-supplied recipient string, where most of  these  methods
	rely on various obscure  and  not  widely  known  aspects  of  e-mail  address
	parsing rules. These are by no means the only ways to  circumvent  these
	recipient address validation checks however. These  checks  may  also  be
	bypassed via at least three different exploits relating  to  FormMail\'s
	use of regular expressions for e-mail  address  matching/validation.  These
	addi- tional exploit techniques are described below.
	

	The first regular  expression  exploit  we  present  offers  an  attacker
	an easy opportunity to get past FormMail\'s recipient  address  checking
	tests, although perhaps in a  way  that  will  be  quickly  detected  by
	an alert local administrator (of the  exploited  server).  Note  that  due
	to the flow-of-control logic used  within  FormMail,  an  attacker  must
	get past these tests at least once, or else no e-mail messages  will  be
	sent at all.
	

	Consider the case  where  the  local  FormMail  installer  provided  the
	following definition for the @recipients array:
	

	     @recipients = (\"^john\\@our-server.tld\");

	

	Given that the string enclosed within the double  quotation  marks  will
	in fact be used,  verbatim,  as  a  regular  expression  within  a  Perl
	regular  expression  match,  and  given   that   within   such   regular
	expressions,  each  period  character  actually  stands  for  a  single-
	character wild card character, an attacker could supply a value for  the
	recipient CGI parameter such as:
	

	     john@our-serverXtld

	

	In such a case, unless by some extremely remote  chance,  there  happens
	to be another server on the same  local  network  whose  non-  qualified
	node name is our-serverXtld, the mail message sent by the  attacker  through
	FormMail to the specified recipient address (and perhaps  also  to  some
	additional set of recipient addresses smuggled in  via  the  email  and/or
	realname CGI parameters) will almost certainly generate a  undeliverable
	bounce message for the non-existent john@our-serverXtld  address.  Where
	will this bounce message go?
	

	We would hope that the undeliverable bounce  message  would  be  directed
	to some responsible local administrator who would then  quickly  realize
	that the game is afoot, and that somebody some-  where  is  presently  attempting
	to exploit the locally-installed copy of FormMail, but in point of  fact
	this is unlikely to occur.
	

	What is clear is the the bounce message, by convention and  by  SMTP  standards,
	will be sent to the envelope sender address that  was  attached  to  the
	original e-mail  message  that  generated  the  bounce.  What  will  the
	original envelope sender address be?
	

	Because FormMail itself generated  the  original  message,  and  because
	FormMail itself was executed as a child process of the local web  server,
	the original envelope sender address will typi- cally be  whatever  local
	user-ID the local web server is run under, or rather, whatever local  user-ID
	it changes to  after  it starts up.
	

	For typical Apache installations, the account in question  is,  quite  often,
	the local nobody account. That account name is, in turn, quite  often  and
	quite typically aliased (in the local mail server\'s  aliases  file)  to
	/dev/null, in other words to the obliv- ion black hole.
	

	The implications here  should  be  apparent.  An  attacker  who  attempts
	to  exploit  FormMail  may  be  easily  able  to  escape  immedi-  ately
	detection by local administrators simply by  exploiting  FormMail\'s  inattention
	to the important detail that within the context  of  Perl  regular  expression
	matching,  periods  mean  some-  thing  other  than   literal   periods.
	Exploitation of this inatten- tion  to  detail  may  allow  an  attacker
	to ``pass\'\' FormMail\'s recipient address check in a very stealthy  fashion.
	Once the attacker has gotten past the recipient check,  at  least  once,
	then he may exploit the email  and/or  realname  vulnerabilities  of  FormMail
	(described above) to also direct copies of his mail mes- sage  to  other
	targeted e-mail addresses.
	

	Other, perhaps even more interesting variations on this theme  are  also
	possible, and are perhaps even more directly dangerous. A FormMail  installer
	who had defined his @recipients array to:
	

	     @recipients = (\"ourdomain.tld\");

	

	in order to allow FormMail to be employed to send mail to  any  user  of
	the ourdomain.tld domain might later  be  unpleasantly  sur-  prised  to
	begin receiving spam  complaints  from  somewhere.tld  users  when  some
	miscreant finally figures out that a recipient address such as:
	

	     user@somewhere.(ourdomain)tld

	

	passes  the  (right-anchored  only)  regular  expression  match  against
	ourdomain.tld with flying colors, only to subsequently have its  parenthesized
	portion treated as a (non-significant) comment by the local  RFC-conforming
	mail server.[14]
	

	Yet another aspect of the weakness of FormMail\'s  regular-expres-  sion
	based attempts to validate recipient address strings is its total  insensitivity
	to important lexical aspects of domain names themselves, in  particular,
	domain label boundaries.
	

	FormMail installers who have elected to use one  or  more  domain  names
	in their definition of the @recipients array may be dis- mayed to  learn
	that the lack of left-anchoring  in  FormMail\'s  reg-  ular  expression
	matching, together with FormMail\'s inattention to  the  importance  and
	significance of domain label boundaries may lead to  exploitation  of  a
	locally-installed FormMail, by outside spammers, to spam users in  other
	domains whose own domain names have right-anchored substrings which  just
	happen to exactly match the local domain  name,  even  though  there  is
	otherwise no rela- tionship between those other domains and the local  domain.
	

	For example, the following @recipients array definition:
	

	     @recipients = (\"x.biz\");

	

	clearly allows the local FormMail script which  contains  it  to  direct
	FormMail-generated  e-mail  messages  to  various  users  having  e-mail
	addresses directly within the x.biz domain. However  what  may  be  less
	clear is that it also allows FormMail-generated mes- sages to  be  directed
	to  persons  having  e-mail   addresses   within,   for   example,   the
	department-y.x.biz domain. More troubling is that it  also  allows  FormMail-generated
	messages to be directed to any  person  having  an  account  in  the  (clearly
	unrelated)  generation-x.biz  domain.  This   problem   arises   because
	FormMail is not astute enough to understand that, for  example,  the  domain
	name generation.x.biz is related to the x.biz domain  while  the  domain
	name generation-x.biz is entirely unrelated. Thus,  an  instance  of  FormMail
	installed on a web server belonging to x.biz could potentially  be  used
	to spam users in  the  generation-x.biz domain.
	

	Lastly, as  we  noted  earlier,  one  method  of  circumventing  FormMail\'s
	attempt  to  validate  the  recipient  CGI  parameter  against  elements
	of  the  installer-supplied  @recipients  array   is   to   simply   use
	alternative case for the user ID portion  of  the  client-supplied  recipient
	e-mail address. At the very least, this might allow an attacker  to  use
	FormMail to send  an  e-mail  message  to,  for  example,  a  user  whose
	e-mail address is JOHN@localhost.tld  even  though  the  installer  only
	intended to allow FormMail messages to  go  to  the  user  whose  e-mail
	address is john@localhost.tld.[12]
	

	This fact alone may be properly  viewed  as  being  essentially  insignificant.
	At worst, the case  insensitivity  of  the  FormMail  recipient  address
	checks would seem to allow misdirection of  FormMail  messages  to  different
	(and unintended) users of the same target recipient  system  where  some
	other valid and authorized FormMail message recipient also has  an  account.
	

	Recall however that the logic of FormMail demands that at least  one  of
	the comma-separated substrings  of  the  client-supplied  recipient  CGI
	parameter value must in fact `pass\' the  recipient  address  validation
	check. Otherwise no e-mail message  will  be  sent,  regardless  of  whatever
	other  clever  manipulations  an attacker might have undertaken.
	

	Exploitation of the case-insensitivity of the recipient address  checking
	code may provide yet another means for an attacker to pass the  recipient
	address check, at least once, thus insuring that his desired  e-mail  message
	will in fact be sent by FormMail. Furthermore, it may allow the  recipient
	address check to be bypassed even as it  also  allows  the  attacker  to
	avoid immediate detection of his activities, either  by  any  authorized
	FormMail message recipient or by any local administrator.
	

	For example, let us suppose that the @recipients array was previ-  ously
	defined by the installer as follows:
	

	     @recipients = (\"^john\\@our-server.tld\");

	

	Based on the  other  vulnerabilities  noted  above,  an  attacker  could
	easily spoof his way past the HTTP_REFERER check and he  could  then  provide
	some clever values for either the email CGI parame- ter or  the  realname
	CGI parameter, or both. Those values could induce  FormMail  to  send  a
	desired e-mail message to some  addi-  tional  e-mail  recipient  addresses,
	above and  beyond  whatever  address  may  have  been  provided  by  the
	attacker as the client-sup- plied recipient  CGI  parameter  value.  But
	even if he  does  all  this,  the  attacker  must  still  get  past  the
	script\'s checks on the recipient value, at least once, in order  to  induce
	FormMail to send any e-mail messages at all.
	

	To get past the checks on the validity  of  the  recipient  CGI  parameter,
	the attacker might set this parameter to the  value  JOHN@our-server.tld.
	This would cause the recipient check to pass, once,  and  that  in  turn
	would enable the script to continue further in  its  processing  of  the
	HTTP request, whereupon  any  of  the  several  other  FormMail  vulnerabilities
	could then be exploited. In such a case however, the  local  mail  server
	would also attempt to send a copy of the attacker\'s message to  the  e-
	mail address JOHN@our-server.tld.  What then?
	

	In the most common case, i.e. where our-server.tld is in fact the  local
	domain, and where the mail server providing mail service for  the  local
	domain is either Sendmail or Postfix, the attacker  will  typically  not
	be able to  hide  his  activities  via  this  sort  of  case-sensitivity
	exploitation because the local mail server (- Sendmail or Postfix)  will
	actually treat the user ID portion  of  a  local  e-mail  address  in  a
	case-insensitive manner. Thus, even if the attacker tricks  the  FormMail
	script into attempting to send an e-mail message to  JOHN@our-server.tld
	that message will still be delivered to the john@our-server.tld  mailbox.
	The local john user will thus be alerted that the local FormMail  script
	is being used, and possibly abused, and quick remedial action  may  then
	be taken to halt further abuse.
	

	If however the specific mail server that provides mail  service  for  the
	our-server.tld domain  treats  local  user  IDs  in  a  case-  sensitive
	manner, then the user  ID  john  may  exist,  and  may  accept  incoming
	e-mail, even though the user ID JOHN does not exist and does not  accept
	e-mail.
	

	In this case, any message sent to the JOHN@our-server.tld  account  will
	bounce as undeliverable.  Where will it bounce to?
	

	As noted previously, the  message  should  be,  and  typically  will  be
	bounced back (along  with  an  undeliverable  notice)  to  its  envelope
	sender address. And as was also previously noted,  the  envelope  sender
	address will almost invariably be the local user  ID  under  which  both
	the local web server and any CGIs that it  invokes  run.  That  account,
	quite often, is the local nobody account, and e- mail for the  local  nobody
	account is, as often as not, aliased to /dev/null. Thus,  if  the  attacker
	arranges to ``pass\'\' the FormMail  recipient  address  validation  test
	by changing the case of the user ID portion  of  some  known  authorized
	recipient e-mail  address,  and  if  the  alternatively-cased  recipient
	address is itself undeliverable, then this may represent an  opportunity
	for the attacker. Specifically, it may allow the attacker to  trick  FormMail
	into believing that it has received at least one valid  recipient  address
	even though the message sent to that address will first  be  bounced  as
	undeliverable  and  then,  subsequently,  will  disappear,  quietly  and
	conveniently, down a black hole, without alerting  any  local  end-users
	or any local administrators on the exploited  system  that  exploitation
	is occurring.
	

	It should additionally be noted that even in cases where the web  server
	itself is run under some account other  than  the  nobody  account,  the
	account that the web server is in fact run under will  often  and  typically
	be one for which incoming e-mail  messages,  including  bounces,  are  dumped
	into a black hole. Fur- thermore, even for web server execution  accounts
	that are not aliased to /dev/null, local administrators may  not  be  expecting
	any incoming e-mail for the web  server  execution  account,  and  thus,
	any e-mail that does arrive for that account may  be  moni-  tored  only
	rarely or perhaps never. Such a situation is exactly  what  an  attacker
	wishing  to  escape immediate detection would desire.
	

	In summary, it may safely be said that the case insensitivity of the  FormMail
	recipient address checking code may open up addi-  tional  possibilities
	for quietly covering up abuse and exploita- tion of the  other  FormMail
	security flaws detailed herein.[13]
	

	

	Mail-Bombing by Proxy Using FormMail

	

	Although  exploitation  of  installed  FormMail  scripts  for   spamming
	purposes is far and away the most likely scenario involving mis- use  and
	abuse of FormMail, a desire for completeness compels  us  to  note  some
	additional ways in which typical FormMail installa- tions may be  abused
	to cause harm or annoyance to others, even if only indirectly.
	

	In general, any Internet miscreant may easily flood any Internet  e-mail
	account of his choosing by simply sending a flood of e- mail messages  directly
	to that target account. This direct approach  is  however  known  to  be
	a good way to have  one\'s  outbound  e-mailing  privileges  revoked  in
	short order.
	

	Being aware of this fact, many Internet miscreants bent on per-  forming
	an act of mail bombing against a given target e-mail  account  will  instead
	elect to do so only indirectly, employing  some  intermediary  agent  or
	system that can be  induced  to  send  e-  mail  messages  to  arbitrary
	attacker-specified e-mail addresses. To the extent that  the  intermediary
	prevents the final victim of the mail bombing from easily  learning  the
	identity and/or IP address of the mail bomb originator it  will  be  seen
	as a poten- tially useful tool for a stealth mail bomb attack.[15]
	

	Given these facts, together with the multiple FormMail vulnera-  bilities
	described above, it  should  be  immediately  seen  that  any  installed
	instance of the FormMail script may be  employed,  in  various  ways,  as
	part of a stealth mail bombing attack directed  against  an  arbitrarily
	selected target e-mail address.
	

	It has certainly been shown above that FormMail may be induced  to  send
	arbitrary messages to arbitrary target addresses in a way which  prevents
	the final recipient from being able to  easily  determine  the  IP  address
	of the actual message originator. This  fact  alone  could  provide  the
	basis for  a  stealth  mail  bombing  attack.  Additional  possibilities
	for  such attacks, involving FormMail, may also exist however.
	

	For example, if FormMail is being  employed  on  a  given  web  site  in
	conjunction with an e-mail auto-responder of some kind, then it  may  be
	possible for an attacker to repeatedly  invoke  FormMail  while  setting
	the email CGI parameter to the e-mail address of his intended victim.  The
	victim in this case will receive  a  flood  of  ``auto-responses\'\'  for
	messages that he himself did not  originate,  and  these  auto-responses
	may (and quite often will) contain no indication of the  IP  address  that
	originated   whatever   message   or   messages   have   triggered   the
	auto-responder to send a response message. Note also that even for  a  relatively
	``smart\'\' auto-responder that makes it a point to  attach  the  e-mail
	headers of each original triggering e-mail message to each of the  auto-
	response messages it generates, the trace information provided  by  such
	headers will lead back only as far as the web server on the system  that
	hosts the FormMail script. That information will of  course  be  insufficient
	to determine the IP address used by the actual instigator  of  the  mail
	bomb.
	

	Because of the above scenario, it is strongly recommended  that  FormMail
	never be intentionally employed in conjunction with any kind  of  e-mail
	auto-responder.
	

	

	

	------------------------------------------------------------   [1]   The
	canonical reference for the original `FormMail spamming\' advisory is:
	

	     http://www.securityfocus.com/archive/1/168177

	

	Note that even earlier, reports had surfaced regarding FormMail and  environment
	variable information leakage:
	

	     http://packetstorm.decepticons.org/advisories/blackwatchlabs/BWL-00-06.txt

	     http://www.securityfocus.com/bid/1187

	

	and a fix was developed for this problem:
	

	     http://www.securityfocus.com/archive/1/62033

	

	A remote command execution vulnerability was also reported  (Aug,  1995)
	for the 1.0 version of FormMail:
	

	     http://www.securityfocus.com/bid/2079

	

	[2] The original report of possible widespread scanning of the  net  for
	vulnerable FormMail scripts may be found at:
	

	     http://www.extremetech.com/article/0,3396,s%253D25124%2526a%253D18236,00.asp#story4

	

	[3] The home page for one allegedly ``fixed\'\' version of FormMail  may
	be found at:
	

	        http://www.mailvalley.com/formmail/

	

	An  entirely  separate ``fixed\'\' version of FormMail may be found at:
	

	     http://nms-cgi.sourceforge.net

	

	Unfortunately, neither of these security-enhanced  versions  of  FormMail
	address all of the security issues raised herein.
	

	[4] Inexplicably, even though versions of FormMail prior to 1.9 are  known
	to be exploitable (as what amounts to anonymizing open mail  relays)  the
	author of this script continues to distribute several  of  his  earlier,
	insecure versions of the script (for use with/on various versions of  MS
	Windows) via his  web  site  and  the  FormMail  home  page.  This  will
	naturally tend to contribute to a worsening of  the  existing  global  problem
	of insecure FormMail installations, over time.
	

	[5] We use the term anonymized herein to indicate that  the  IP  address
	of the actual message origination point will not be pre- sent in any  of
	the e-mail Received: headers contained in the mes- sage  themselves.  This
	lack of tracing information makes it essentially impossible for  a  message
	recipient to determine the actual origination  point,  at  least  not  without
	the aid of the administrator of the server that hosts the FormMail  script
	and not  without a careful search of log files by that administrator.
	

	[6] The lynx web browser provides the  -noreferer  command  line  option
	to achieve this exact effect.
	

	[7] Javascript, in particular, implements a  submit()  built-in  primitive
	that can be used to simplify attacks on web CGIs. The authors  have  found
	no way to induce Javascript\'s submit()  primi-  tive  to  suppress  the
	inclusion of a Referer: header in the HTTP request generated by  a  call
	to submit() however.
	

	[8] There are, of course, other ways to cause  typical  web  servers  to
	ignore some rightward part of a complete URL.  The  forward  slash  character
	(`/\') can also be used to achieve the same effect when the  portion  of
	the URL to the right of the relevant forward slash can be located  by  the
	relevant web servers and when it is an ordinary file (as  opposed  to  a
	directory).
	

	[9] There are, of course, other ways by which one could arrange  for  Referer:
	HTTP headers to be suppressed, the most obvious of which is to make  use
	of any of the  Internet\'s  many  anonymizing HTTP proxy servers.
	

	[10] One of the  authors  of  this  advisory  (Guilmette)  is  currently
	maintaining a list of the IP addresses of such sites  for  spam  blocking
	purposes.
	

	[11] Please see:
	

	     http://web.nps.navy.mil/~miller/percent-hack.html

	

	for a brief description of the traditional (if non-standard)  per-  cent
	hack e-mail addressing notation.
	

	[12] Of course, different operating systems have different con-  ventions
	and  practices  with  regards  to  the  case  sensitivity...   or   lack
	thereof... of local user IDs. It should be  noted  however  that  FormMail
	is most frequently installed on UNIX  or  UNIX-like  systems,  and  that
	these systems do, in virtually all cases, treat local user  IDs  as  being
	case sensitive, thus allowing for the possibility that there might be  a
	user whose ID is john and also another user whose ID is  JOHN,  both  on
	the same single system.
	

	[13] Webmasters may also wish to reconsider the advisability of  running
	web servers under accounts whose  incoming  e-mail  is  either  sent  to
	/dev/null or ignored. It may actually be wiser to  select  some  account
	other than the nobody account to  run  a  web  server  under,  and  then
	to alias that other account to root or some  other  frequently-monitored
	local administrator address. The nobody account should more probably  be
	preserved as an effective e-mail alias for  /dev/null  however,  as  there
	are certainly instances in which you really don\'t want any  bounces,  no
	matter what.
	

	[14] See RFC 2822, especially its discussion  of  parenthesized  comments
	and e-mail address syntax.
	

	[15] An indirect mail bomb attack against a given e-mail address may  be
	easily undertaken simply by sending a large number of e-  mail  messages
	to some non-existent and/or otherwise undeliverable  e-mail  address  on
	some specific third-party intermediary system with the  envelope  sender
	(i.e. bounce back) e-mail address set  to  the  e-mail  address  of  the
	intended victim. Such an indirect mail bombing  via  bounces  attack  is
	not at all stealthy however, because in the vast majority of  cases  the
	attacker\'s IP address will be shown clearly  in  the  Received:  headers
	of the messages that triggered the  bounces,  and  these  in  turn  will
	typically be included in the  bounce  messages  received  by  the  final
	victim.

SOLUTION

	A revised version of FormMail 1.9 (which I am  calling  1.9s)  which  is
	believed to be free of any and all of the security  flaws  described  in
	the advisory below is now available at:
	

	ftp://ftp.monkeys.com/pub/formmail/1.9s/

	

TUCoPS is optimized to look best in Firefox® on a widescreen monitor (1440x900 or better).
Site design & layout copyright © 1986-2024 AOH