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.