Email header injection

Laatst bijgewerkt: 14/02/2025

Email Header Injection is een beveiligingskwetsbaarheid waarbij een aanvaller kwaadaardige e-mailheaders injecteert in een webformulier dat e-mails verstuurt, zoals een contactformulier of registratieformulier.

Hierdoor kan de aanvaller:

  • SPAM versturen vanuit jouw server naar andere ontvangers.
  • Phishing-aanvallen uitvoeren door vervalste e-mails te sturen.
  • De inhoud van de e-mail manipuleren, zoals het wijzigen van het onderwerp of het toevoegen van CC- en BCC-ontvangers.

Hoe werkt Email Header Injection?

Wanneer een webformulier gebruikersinvoer direct opneemt in de e-mailheaders (zoals het onderwerp, de ontvanger of de afzender), kan een aanvaller speciale tekens zoals newline-karakters (\n of \r\n) gebruiken om nieuwe headers toe te voegen.

Voorbeeld van kwetsbare PHP-code:

<?php
$naam = $_POST['naam'];
$email = $_POST['email'];
$onderwerp = "Contactformulier";
$headers = "From: $email";

mail("[email protected]", $onderwerp, "Bericht van: $naam", $headers);
?>

Als een aanvaller het e-mailadres als volgt invult:

[email protected]\r\nCC: [email protected]

Dan wordt de header:

From: [email protected]
CC: [email protected]

Hierdoor krijgt [email protected] ook een kopie van het bericht, wat kan worden misbruikt voor spamming.


Gevolgen van Email Header Injection:

  • SPAM- en phishingcampagnes: Aanvallers kunnen jouw mailserver misbruiken om spam te versturen, waardoor je domein op een blacklist kan belanden.
  • Vertrouwensschade: Ontvangers kunnen denken dat kwaadaardige e-mails afkomstig zijn van jouw domein.
  • Datalekken: Kopieën van berichten kunnen naar ongeautoriseerde ontvangers worden verzonden.

Hoe voorkom je Email Header Injection?

  • Inputvalidatie en -sanitatie:

    • Sta alleen geldige e-mailtekens toe (letters, cijfers, @, punten en koppeltekens).
    • Verwijder of blokkeer newline-karakters (\n, \r\n), aangezien deze gebruikt kunnen worden voor headerinvoegingen.
  • Gebruik van ingebouwde validatiefuncties:

    • In PHP:
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die("Ongeldig e-mailadres.");
}
  • Geen directe invoer in e-mailheaders:

    • Plaats gebruikersinvoer nooit direct in de From, CC of BCC-headers.
    • Stel deze statisch in of gebruik vooraf gedefinieerde e-mailadressen.
  • Gebruik van beveiligde mailbibliotheken:

    • Zoals PHPMailer of SwiftMailer. Deze ontsmetten automatisch de headers.
    • Voorbeeld met PHPMailer:
use PHPMailer\PHPMailer\PHPMailer;
$mail = new PHPMailer();
$mail->setFrom('[email protected]', 'Website');
$mail->addAddress('[email protected]');
$mail->Subject = 'Contactformulier';
$mail->Body = "Bericht van: $naam";
$mail->send();

Bescherm tegen newline-karakters:

  • Verwijder newline-karakters uit invoervelden:
$email = str_replace(array("\r", "\n"), '', $email);
  • Rate Limiting en CAPTCHA:

    • Beperk het aantal e-mails dat per IP-adres kan worden verzonden.
    • Voeg CAPTCHA's toe om te voorkomen dat bots massaal formulieren indienen.

Voorbeeld van veilige implementatie:

<?php
$naam = strip_tags(trim($_POST['naam']));
$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);

// Controleer op een geldig e-mailadres
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die("Ongeldig e-mailadres.");
}

// Verwijder newline-karakters
$naam = str_replace(array("\r", "\n"), '', $naam);
$email = str_replace(array("\r", "\n"), '', $email);

$onderwerp = "Contactformulier";
$headers = "From: [email protected]";

mail("[email protected]", $onderwerp, "Bericht van: $naam", $headers);
?>
  • Waarom veilig? Alle gebruikersinvoer wordt gesanitiseerd, newline-karakters worden verwijderd, en de From-header is statisch ingesteld.

Conclusie:

Email Header Injection is een gevaarlijke kwetsbaarheid die kan leiden tot SPAM, phishing-aanvallen en vertrouwensschade voor jouw domein. Door inputvalidatie, het vermijden van directe invoer in headers en het gebruik van veilige mailbibliotheken kun je deze vorm van aanval effectief voorkomen.

Kiyoh

9.9

gebaseerd op 465 beoordelingen

Beoordeel >

Mediawax werkt met o.a.

Installatron Partner Imunify 360 Secured PHP 8 op alle servers Kernelcare Sectio ssl-certificaten Gratis Let's Encrtypt certificaten