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.