[ Spoofing und Identitätsmissbrauch ]

E-Mail-Header-Injektion der Anwendung: Warum die Authentifizierung die Eingabevalidierung nicht ersetzt

Separate Anwendungsnachrichtenkonstruktion, Empfängerautorisierung und Domänenauthentifizierung bei der Überprüfung des E-Mail-Header-Injection-Risikos.

Vom EmailAuth Forschungsteam · 7 Minuten Lesezeit

[Wichtige Punkte]

  • DMARC validiert keine Anwendungseingaben und autorisiert keine Empfänger.
  • Überprüfen Sie eingegebene Felder und Serialisierungsgrenzen, bevor Sie sich auf eine E-Mail-Bibliothek verlassen.
  • Verwenden Sie isolierte, nicht sendende Validierungsfälle und bewahren Sie tatsächliche Beweise vor der Veröffentlichung auf.
Auf dieser Seite

Trennen Sie den Nachrichtenaufbau von der Domänenauthentifizierung

Eine Anwendung kann eine korrekt authentifizierte Nachricht senden, die sie niemals hätte erstellen dürfen. SPF, DKIM Und DMARC Beantworten Sie Fragen zu Sendeberechtigungen, Signaturen usw Domänenausrichtung. Sie entscheiden nicht darüber, ob ein Kontaktformular Empfänger auswählen durfte, ob ein Betrefffeld als weiterer Header interpretiert wurde oder ob ein Workflow die Anfrage genehmigt hat. Diese Unterscheidung ist wichtig für Passwortbenachrichtigungen, Supportformulare, Rechnungen und alle Anwendungen, die E-Mails aus externen Eingaben zusammenstellen. Ein erfolgreiches DMARC Ergebnis ist kein Ersatz für die Validierung dieser Eingabe vor der Nachrichtenserialisierung.

RFC 9989 schließt Inhaltsanalyse und Authentifizierung anderer Entitäten als Domänen ausdrücklich von den Zielen von DMARC aus. Diese Grenze ist der Ausgangspunkt für dieses Bedrohungsmodell und kein Grund, die Authentifizierung zu schwächen. Sorgen Sie für eine einheitliche Authentifizierung und steuern Sie separat, wie Anwendungen Nachrichten erstellen. Dieses Manuskript schlägt defensive Überprüfungsschritte vor. Es reproduziert keinen Exploit, sendet keine Nachrichten, überprüft keine echte Anwendung und stellt keine Angriffsnutzlast bereit.

Verstehen Sie die Serialisierungsgrenze

RFC 5322, Abschnitt 2.2, beschreibt ein Header-Feld als einen Feldnamen, gefolgt von einem Doppelpunkt und einem Feldkörper, abgeschlossen durch CRLF. Die Norm beschreibt auch das Falten und Entfalten langer Felder. Das sind Regeln für das Nachrichtenformat. Sie bedeuten nicht, dass ein beliebiges Formularfeld Kopfzeilentrennzeichen oder Fortsetzungszeilen bereitstellen darf. Eine Anwendung muss Daten, die für ein Feld bestimmt sind, von der Struktur unterscheiden, die Felder trennt.

Header-Injection ist der Fehlermodus, bei dem extern gesteuerte Daten diese strukturelle Grenze überschreiten und sich auf Header auswirken, die über ihre vorgesehene Position hinausgehen. Seine praktischen Auswirkungen hängen von der Mailbibliothek, der API, dem Transport und dem Autorisierungsmodell ab. Gehen Sie nicht davon aus, dass jede von einem Webformular akzeptierte neue Zeile unverändert SMTP erreicht. Gehen Sie auch nicht davon aus, dass ein nachgelagerter Unterzeichner eine unsichere Bauentscheidung repariert. Eine Signatur kann die Nachricht abdecken, die die Anwendung tatsächlich erzeugt hat, einschließlich eines unerwünschten, aber syntaktisch gültigen Ergebnisses.

Inventareingabe und Autorität, bevor Sie sich für die Validierung entscheiden

Erstellen Sie eine Feldkarte für die Anwendung. Notieren Sie, woher ein Wert stammt, welche Komponente ihn analysiert, welchen beabsichtigten Typ er hat, wer ihn bereitstellen darf und wo er landet. Unterscheiden Sie ein Anzeigeetikett von einer Adresse, einen Betreff von einem Text und sichtbare Empfängerfelder vom Transportumschlag. Eine von einem Besucher übermittelte Kontaktadresse sollte nicht automatisch zu einer autorisierten Adresse werden Umschlagabsender. Die Kundenkennung eines Supportformulars sollte nicht als uneingeschränkte Empfängerliste behandelt werden.

Definieren Sie zunächst geschäftliche Einschränkungen. Manche Anwendungen benötigen genau einen Empfänger, der aus einer internen Zuordnung ausgewählt wird; andere unterstützen rechtmäßig mehrere zugelassene Empfänger. Freier Text ist im Hauptteil möglicherweise zulässig, in einem Routing-Feld jedoch nicht. Legen Sie Grenzen für Größe und Kardinalität fest und lehnen Sie unerwartete Strukturzeichen ab, wenn der Feldvertrag dies verbietet. Hierbei handelt es sich um vorgeschlagene Anwendungsanforderungen und nicht um die Behauptung, dass RFC 5322 eine Validierungsimplementierung für jede Sprache oder jedes Produkt vorschreibt.

Bevorzugen Sie eine strukturierte Konstruktion und überprüfen Sie dann deren Verhalten

Verwenden Sie die unterstützte strukturierte E-Mail-Schnittstelle für das ausgewählte Framework, anstatt komplette Kopfzeilen aus der Eingabe manuell zu verketten. Der Python EmailMessage-Dokumentation veranschaulicht diese Trennung: Das Objekt stellt Header und Nutzlast dar, bietet Feldoperationen an und serialisiert gemäß einer E-Mail-Richtlinie. Außerdem wird gewarnt, dass die Reduzierung Änderungen wie die Generierung MIME Grenzen auslösen kann. Diese dokumentierten Funktionen stellen nicht sicher, dass jede Anwendung, die diese Klasse verwendet, sicher ist oder dass alle Bibliotheksversionen dieselben ungültigen Eingaben ablehnen.

Überprüfen Sie die tatsächliche Bibliotheksversion und Richtlinie in der Anwendung, bevor Sie sich auf deren Handhabung verlassen. Führen Sie vor dem Erstellen der Nachricht eine Validierung durch und führen Sie eine separate Autorisierungsprüfung für Ziele durch. Vermeiden Sie eine Reparaturroutine, die verdächtige Zeichen stillschweigend entfernt und die Bedeutung eines Werts ändert. Eine vorhersehbare Ablehnung mit einem sicheren Fehler ist oft einfacher zu begründen als ein Wert, der in einen anderen Empfänger umgewandelt wird. Protokollieren Sie niemals Passwörter, setzen Sie Token zurück oder füllen Sie vertrauliche Benachrichtigungstexte aus, nur um den Aufbau zu debuggen.

Ein Arbeitsblatt zur zerstörungsfreien Abnahme

Erstellen Sie eine Arbeitsblattzeile für jeden Eingabe-zu-Ausgabe-Pfad. Geben Sie die Anwendungskomponente, das Eingabefeld, den erwarteten Typ, die zulässige Zielquelle, Parser- und Serializer-Versionen, die Validierungsentscheidung und das erwartete beobachtbare Ergebnis an. Fügen Sie eine Spalte für den Prüfer hinzu, dem der Feldvertrag gehört. Ein Geschäftsinhaber kann das beabsichtigte Empfängerverhalten genehmigen, während ein Techniker prüft, wie die Implementierung es durchsetzt. Keine der Genehmigungen sollte aus einem E-Mail-Authentifizierungs-Dashboard abgeleitet werden.

Vorgeschlagene lokale Fälle können einen normalen kurzen Betreff, einen leeren erforderlichen Wert, einen Überlängenwert, unerwartete Steuerzeichen, die als Testmetadaten dargestellt werden, und eine Anzeigebezeichnung mit Satzzeichen umfassen. Bewahren Sie die Hüllen in einem isolierten Kabelbaum auf, der keine Verbindung zu einem Postdienst herstellen kann. Überprüfen Sie die analysierte Nachrichtenstruktur, anstatt einen Exploit an einen Produktionsempfänger zu senden. Akzeptanz bedeutet, dass das vorgesehene Feld innerhalb seines Vertrags bleibt, unbefugte Empfänger über diesen Eingabepfad ausgeschlossen sind und Fehler behandelt werden, ohne dass Geheimnisse preisgegeben werden. Für dieses Manuskript wurde kein solcher Kabelbaum ausgeführt.

Fiktive Diagnose: eine Unterstützungsform mit gemischten Verantwortlichkeiten

Stellen Sie sich ein fiktives Unternehmen vor, Cedar Support, dessen Formular es einem Besucher ermöglicht, eine Antwortadresse und eine Beschreibung der Anfrage einzugeben. Ein Entwickler lässt auch einen Abfrageparameter die Ziel-Support-Warteschlange auswählen. Die Nachricht besteht DMARC , da sie vom zugelassenen Dienst von Cedar signiert wird. Das Team betrachtet dieses Ergebnis zunächst als Beweis dafür, dass das Formular sicher ist. Es ist weder ein Beweis für die Autorisierung des Empfängers noch für die Eingabevalidierungsregeln.

Die vorgeschlagene Untersuchung trennt zwei Fragen. Erstens: Ist der Warteschlangenparameter nur genehmigten internen Zielen zugeordnet? Zweitens: Kann ein beliebiger Freitextwert die Struktur der serialisierten Nachricht ändern? Das Team würde die örtlichen Bauleistungen und Genehmigungsentscheidungen überprüfen, ohne E-Mails zu versenden. Selbst wenn der Serialisierer fehlerhafte Header-Daten ablehnt, könnte ein uneingeschränkter Zielparameter ein eindeutiger Missbrauchspfad bleiben. Umgekehrt beweist eine korrekte Ziel-Zulassungsliste nicht, dass jedes Header-Feld sicher erstellt ist. Hierbei handelt es sich um ein erfundenes Diagnoseszenario, nicht um eine entdeckte Schwachstelle oder einen abgeschlossenen Test.

Freigabekriterien und Beweise sind noch erforderlich

Dokumentieren Sie, was jede Schicht beweist. Durch die Eingabevalidierung wird festgestellt, dass die übermittelten Daten dem Vertrag der Anwendung entsprechen. Durch die Autorisierung wird festgelegt, ob dieser Akteur dieses Ziel oder diese Aktion anfordern darf. Die Serialisierung erzeugt das beabsichtigte Nachrichtenformat. Die Authentifizierung hilft empfangenden Systemen bei der Bewertung der Domänennutzung. Die Zustellungsüberwachung verrät, was danach geschah. Die Kombination dieser Schichten ist gerade deshalb sinnvoll, weil keine allein die anderen beweist.

Der Katalog erfordert ein vertretbares Bedrohungsmodell und eine zerstörungsfreie Laborreproduktion, die an die ursprüngliche Forschung gebunden ist. Diese Beweise sind noch offen. Dieser Entwurf enthält ein vorgeschlagenes Modell und Arbeitsblatt, keine Originalforschung oder Laborreproduktion. Während der Recherche angeforderte OWASP-Seiten waren nicht verfügbar und werden nicht als Unterstützung zitiert; Sie wurden nicht über eine andere Route erneut versucht. Ein qualifizierter Anwendungsprüfer muss die Implementierung überprüfen, ein kontrolliertes Labor muss seine tatsächlichen Beobachtungen aufbewahren und die Anwendbarkeit der Quelle, Produktionswege, Zugänglichkeit und Eigentümerfreigabe müssen vor der Veröffentlichung überprüft werden. Es sind keine Produktionseingaben, Anmeldeinformationen oder echte Nachrichten erforderlich, um die hier beschriebene Grenze zu verstehen.

[ Wegbringen ]

E-Mails authentifizieren und unabhängig validieren, wie Anwendungen sie erstellen; Keines der Steuerelemente ersetzt das andere.

[Nach Rolle]

Was das für Sie bedeutet

Wählen Sie Ihre Rolle für praktische nächste Schritte.

Anwendungstechniker

Halten Sie Daten aus der Nachrichtenstruktur fern

Überprüfen Sie jede Eingabe-zu-Header- und Eingabe-zu-Umschlag-Zuordnung.

Nächste Schritte

  1. Verwenden Sie eine strukturierte Nachrichtenkonstruktion.
  2. Verhalten bei der Ablehnung von Dokumenten und Autorisierung des Empfängers.

Sicherheitsprüfer

Fordern Sie ein begrenztes Bedrohungsmodell

Trennen Sie Analysefehler von Geschäftsautorisierungsfehlern.

Nächste Schritte

  1. Überprüfen Sie einen isolierten Testplan.
  2. Erfordern Sie tatsächliche Beobachtungen, bevor Sie eine Sanierung in Anspruch nehmen.

Dienstinhaber

Genehmigen Sie den beabsichtigten Workflow

Eine gültige signierte Nachricht kann dennoch die Geschäftsberechtigung der Anwendung überschreiten.

Nächste Schritte

  1. Definieren Sie erlaubte Ziele.
  2. Lassen Sie den Produktionsversand während der lokalen Validierung deaktiviert.

[ FAQs ]

Häufig gestellte Fragen

Verhindert DMARC die Header-Injektion?

Nein. DMARC wertet die Domänenausrichtung aus und schließt die Inhaltsanalyse und Authentifizierung anderer Entitäten als Domänen aus. Die Verarbeitung von Anwendungseingaben ist ein separates Steuerelement.

RFC 9989: DMARC

Was macht die Header-Eingabe strukturell empfindlich?

RFC 5322 definiert Feldnamen, Doppelpunkte, Feldkörper und CRLF-Grenzen. Externe Eingaben müssen innerhalb des vorgesehenen Feldvertrags der Anwendung bleiben und dürfen diese Struktur nicht verändern.

RFC 5322 : Internet-Nachrichtenformat

Sollten Anwendungen Rohheader durch Verkettung erstellen?

Bevorzugen Sie eine unterstützte strukturierte Schnittstelle und überprüfen Sie deren tatsächliches Verhalten. Python EmailMessage veranschaulicht ein Header- und Payload-Modell, aber seine Verwendung allein beweist nicht, dass eine Anwendung sicher ist.

Python-Dokumentation: email.message.EmailMessage

Kann ein zugelassener Unterzeichner eine unerwünschte Nachricht signieren?

Eine signierende Domäne kann die ihr übermittelte Nachricht signieren; Eine Unterschrift stellt keine Zustimmung zum Antragsempfänger oder zur Geschäftsentscheidung dar.

RFC 6376: DKIM

Reicht das Entfernen verdächtiger Zeichen aus?

Nicht unbedingt. Stille Transformationen können die Bedeutung verändern. Definieren Sie explizite Feldverträge, lehnen Sie ungültige Werte vorhersehbar ab und autorisieren Sie Ziele separat.

Muss ein lokaler Validierungstest E-Mails zustellen?

Nein. Der vorgeschlagene Testplan prüft die Konstruktion in einem isolierten Kabelbaum ohne Servicekonnektivität. Für diesen Entwurf wurde kein Kabelbaum ausgeführt.

Wurden OWASP-Seiten als verifizierter Beweis verwendet?

Nein. Die angeforderten Seiten haben Zugriffsfehler zurückgegeben, wurden ausgeschlossen und nicht über eine andere Route erneut versucht. Der Artikel stützt sich auf die beibehaltene RFC- und Python-Dokumentation sowie gekennzeichnete Empfehlungen.

Welche Beweise fehlen noch?

Das im Katalog erforderliche Bedrohungsmodell und die zerstörungsfreie Laborreproduktion in Verbindung mit der Originalforschung bleiben offen. Ein vorgeschlagenes Arbeitsblatt ist keine ausgeführte Reproduktion.

[ Quellen ]

Quellen

  1. RFC 9989: DMARC

    Abschnitte §2.2 Anti-Phishing · §2.4 Außerhalb des Geltungsbereichs · §4.4 Identifier-Ausrichtung erklärt · §11.4 Anzeigenamenangriffe

  2. RFC 6376: DKIM

    Abschnitte §1. Einleitung · §3.5 DKIM-Signature Header-Feld · §8. Sicherheitsüberlegungen

  3. RFC 5322 : Internet-Nachrichtenformat

    Abschnitte §2.2 Header-Felder · §3.4 Adressspezifikation

  4. Python-Dokumentation: email.message.EmailMessage

    Abschnitte EmailMessage · as_string · as_bytes · __setitem__

[ Glossar ]

Glossar

Header-Feld
Ein benanntes Nachrichtenfeld mit einem Feldkörper und definierten syntaktischen Grenzen.

RFC 5322 : Internet-Nachrichtenformat

Serialisierung
Erstellen einer Nachrichtendarstellung aus einem strukturierten Nachrichtenobjekt; Die Implementierungsrichtlinie kann sich auf die Ausgabe auswirken.

Python-Dokumentation: email.message.EmailMessage

Autorisierung des Empfängers
Die Anwendungsentscheidung, dass ein Akteur einen bestimmten Workflow an ein genehmigtes Ziel senden darf.
Ausrichtung
Die DMARC Beziehung zwischen der sichtbaren Von-Domäne und einer authentifizierten Domäne.

RFC 9989: DMARC

Unternehmensherkunft

Warum Top-Finanzinstitute und Regierungen haben ihre E-Mail-Sicherheits-Dashboards eingestellt.

Herkömmliche E-Mail-Authentifizierungsplattformen verkaufen Ihnen ein Dashboard und bitten Ihre Techniker, die Arbeit zu erledigen. In Umgebungen mit hohem Risiko führt die manuelle Überwachung zu verzögerter Durchsetzung, Konfigurationsabweichungen und nicht überwachten Schattendomänen.

EmailAuth ist die Agenten-E-Mail-Herkunftsplattform. Unsere Agenten setzen durch p=reject, halten Sie die Absender von Drittanbietern auf dem Laufenden und verschieben Sie Ihre Domains auf voll RFC 9989 Compliance, der neue DMARC Standard, mit Human-in-the-Loop-Überprüfbarkeit.

Regierungen Große Unternehmen Tier-1-Finanzinstitute

SaaS · Dedizierte Mandantenfähigkeit · Air-Gap-On-Prem · BYOK-Verschlüsselung

Wissensdatenbank