Plage PHP SMTP-Injection

In den letzten Wochen haben sich wieder die PHP SMTP-Injection Angriffe (auch bekannt als „mail injection“ oder „command injection“) auf meinen Webservern gehäuft. Dieses Mal konzentrierten sich die Angriffe auf osCommerce Installationen. Das Skript contact_us.php selbst und damit vermutlich auch die darin verwendete tep_mail Funktion sind für SMTP-Injection anfällig. Ich habe für contact_us.php folgenden Patch benutzt um die Sicherheitslücke in allen osCommerce Installationen zu schließen und war hoffentlich erfolgreich.

Hinter der Zeile

    if (isset($HTTP_GET_VARS['action']) && ($HTTP_GET_VARS['action'] == 'send')) {

habe ich noch eingefügt:

    if (! (
      (strpos($HTTP_POST_VARS['name'], "\n") === false) &&
      (strpos($HTTP_POST_VARS['name'], "\r") === false) &&
      (strpos($HTTP_POST_VARS['email'], "\n") === false) &&
      (strpos($HTTP_POST_VARS['email'], "\r") === false)
    ) )
    {
      header("Location: http://[Domainname]/catalog/contact_us.php");
      exit;
    }

Der Patch testet einfach, ob in der eMail-Adresse oder im Betreff ein Zeilenumbruch oder Zeilenrücklauf vorkommt. Mit Hilfe dieser Zeichen innerhalb der eMail-Adresse oder des Betreff ist das Einschleusen von eigenen Headerzeilen wie To: oder Bcc: inkl. einem eigenen Mailtext möglich. Der Patch macht bei einem Injection-Versuch eine HTTP-Umleitung zurück zum Kontaktformular.

Hintergrundinformationen zu diesem Thema gibt es in meinem Blog-Artikel PHP mail() anfällig für SMTP-Injection aus der Security Corner.