[ Spoofing och identitetsmissbruk ]

Injektion av e-posthuvud i programmet: varför autentisering inte ersätter indatavalidering

Separat konstruktion av applikationsmeddelanden, mottagarbehörighet och domänautentisering vid granskning av risken för injicering av e-posthuvud.

Av EmailAuth forskningsteam · 7 min läsning

[Nyckelpunkter]

  • DMARC validerar inte programinmatningar eller auktoriserar mottagare.
  • Granska inskrivna fält och serialiseringsgränser innan du förlitar dig på ett e-postbibliotek.
  • Använd isolerade, icke-sändande valideringsfall och behåll faktiska bevis före frigivning.
På den här sidan

Separera meddelandekonstruktion från domänautentisering

En applikation kan skicka ett korrekt autentiserat meddelande som det aldrig borde ha konstruerat. SPF, DKIM och DMARC svara på frågor om att skicka auktorisation, underskrifter och domänjustering. De avgör inte om ett kontaktformulär fick välja mottagare, om ett ämnesfält tolkades som en annan rubrik eller om ett arbetsflöde godkände begäran. Denna distinktion har betydelse för lösenordsmeddelanden, supportformulär, fakturor och alla program som sammanställer e-post från extern input. Ett lyckat DMARC resultat är inte ett substitut för att validera den inmatningen innan meddelandeserialisering.

RFC 9989 exkluderar uttryckligen innehållsanalys och autentisering av andra enheter än domäner från DMARC :s mål. Den gränsen är utgångspunkten för denna hotmodell, inte en anledning att försvaga autentiseringen. Behåll anpassad autentisering och kontrollera separat hur applikationer skapar meddelanden. Detta manuskript föreslår defensiva granskningssteg. Den reproducerar inte en exploatering, skickar inte meddelanden, inspekterar en riktig applikation eller tillhandahåller en attacknyttolast.

Förstå serialiseringsgränsen

RFC 5322, avsnitt 2.2, beskriver ett rubrikfält som ett fältnamn följt av ett kolon och en fältkropp, avslutade av CRLF. Standarden beskriver även fällbara och utfällbara långa fält. Det är regler för meddelandeformat. De betyder inte att ett godtyckligt formulärfält ska tillåtas för att tillhandahålla rubrikavgränsare eller fortsättningslinjer. En applikation måste skilja data avsedda för ett fält från strukturen som separerar fält.

Rubrikinjektion är felläget där externt styrd data korsar den strukturella gränsen och påverkar rubriker bortom dess avsedda position. Dess praktiska inverkan beror på postbiblioteket, API, transport och auktoriseringsmodell. Anta inte att varje ny rad som accepteras av ett webbformulär når SMTP oförändrat. Anta inte heller att en nedströms undertecknare reparerar ett osäkert byggbeslut. En signatur kan täcka meddelandet som applikationen faktiskt producerade, inklusive ett oönskat men syntaktiskt giltigt resultat.

Lagerinmatning och auktoritet innan du väljer validering

Bygg en fältkarta för applikationen. Registrera var ett värde kommer från, vilken komponent som analyserar det, dess avsedda typ, vem som får leverera det och var det hamnar. Skilj en displayetikett från en adress, ett ämne från en kropp och synliga mottagarfält från transportkuvertet. En kontaktadress som lämnats av en besökare bör inte automatiskt bli auktoriserad kuvertsändare. Ett supportformulärs kundidentifierare ska inte behandlas som en obegränsad mottagarlista.

Definiera affärsbegränsningar först. Vissa applikationer behöver exakt en mottagare vald från en intern mappning; andra stöder legitimt flera godkända mottagare. Fritext kan vara acceptabel i brödtexten men inte i ett routingfält. Tillämpa gränser för storlek och kardinalitet och avvisa oväntade strukturella tecken där fältkontraktet förbjuder dem. Dessa är föreslagna applikationskrav, inte ett påstående om att RFC 5322 kräver en valideringsimplementering för varje språk eller produkt.

Föredrar strukturerad konstruktion, verifiera sedan dess beteende

Använd det strukturerade e-postgränssnittet som stöds för det valda ramverket istället för att manuellt sammanfoga hela rubrikrader från indata. De Python EmailMessage-dokumentation illustrerar denna separation: objektet representerar rubriker och nyttolast, erbjuder fältoperationer och serialiseras enligt en e-postpolicy. Den varnar också för att utjämning kan utlösa förändringar som att generera MIME gränser. Dessa dokumenterade funktioner fastställer inte att alla program som använder den klassen är säkra, eller att alla biblioteksversioner avvisar samma ogiltiga indata.

Granska den faktiska biblioteksversionen och policyn i programmet innan du förlitar dig på dess hantering. Validera innan du skapar meddelandet och behåll en separat auktoriseringskontroll för destinationer. Undvik en reparationsrutin som tyst tar bort misstänkta tecken och ändrar innebörden av ett värde. Ett förutsägbart avslag med ett säkert fel är ofta lättare att resonera kring än ett värde omvandlat till en annan mottagare. Logga aldrig lösenord, återställ tokens eller fyll aldrig i känsliga anmälningsorgan bara för att felsöka konstruktion.

Ett oförstörande arbetsblad för acceptans

Skapa en kalkylbladsrad för varje indata-till-utdata-sökväg. Inkludera applikationskomponenten, inmatningsfältet, förväntad typ, tillåten destinationskälla, parser- och serialiseringsversioner, valideringsbeslut och förväntat observerbart resultat. Lägg till en kolumn för granskaren som äger fältkontraktet. En företagsägare kan godkänna avsedd mottagarbeteende medan en ingenjör kontrollerar hur implementeringen genomför det; inget godkännande bör härledas från en e-postautentiseringsinstrumentpanel.

Föreslagna lokala fall kan inkludera ett normalt kort ämne, ett tomt obligatoriskt värde, ett överlängdsvärde, oväntade kontrolltecken representerade som testmetadata och en displayetikett som innehåller skiljetecken. Förvara fodralen i en isolerad sele som inte kan ansluta till en e-posttjänst. Inspektera den analyserade meddelandestrukturen istället för att skicka en exploit till en produktionsmottagare. Acceptans innebär att det avsedda fältet förblir inom sitt kontrakt, obehöriga mottagare är omöjliga genom den inmatningsvägen och fel hanteras utan att avslöja hemligheter. Ingen sådan sele utfördes för detta manuskript.

Fiktiv diagnos: en stödform med blandat ansvar

Tänk på ett fiktivt företag, Cedar Support, vars formulär tillåter en besökare att ange en svarsadress och en förfrågningsbeskrivning. En utvecklare låter också en frågeparameter välja destinationsstödkön. Meddelandet passerar DMARC eftersom Cedars godkända tjänst signerar det. Teamet behandlar initialt det resultatet som ett bevis på att formen är säker. Det är bevis på varken mottagarbehörighet eller reglerna för indatavalidering.

Den föreslagna utredningen skiljer två frågor åt. För det första, mappar köparametern endast godkända interna destinationer? För det andra, kan något fritextvärde ändra det serialiserade meddelandets struktur? Teamet skulle granska lokala byggresultat och auktoriseringsbeslut utan att skicka e-post. Även om serialiseraren avvisar felaktiga rubrikdata, kan en obegränsad destinationsparameter förbli en distinkt missbruksväg. Omvänt, en korrekt destinationsgodkännandelista bevisar inte att varje rubrikfält är säkert konstruerat. Detta är ett uppfunnit diagnostiskt scenario, inte en upptäckt sårbarhet eller ett avslutat test.

Frigivningskriterier och bevis behövs fortfarande

Dokumentera vad varje lager bevisar. Ingångsvalidering fastställer att inlämnade data uppfyller applikationens kontrakt. Auktorisationen fastställer om den aktören kan begära den destinationen eller åtgärden. Serialisering ger det avsedda meddelandeformatet. Autentisering hjälper mottagande system att utvärdera domänanvändning. Leveransövervakning avslöjar vad som hände efteråt. Att kombinera dessa lager är användbart just för att ingen ensam bevisar de andra.

Katalogen kräver en försvarbar hotmodell och en oförstörande labbreproduktion knuten till den ursprungliga forskningen. Det beviset är fortfarande öppet. Detta utkast innehåller en föreslagen modell och ett arbetsblad, inte originalforskning eller en labbreproduktion. OWASP-sidor som efterfrågades under forskning var inte tillgängliga och citeras inte som stöd; de testades inte igen via en annan väg. En kvalificerad applikationsgranskare måste verifiera implementeringen, ett kontrollerat labb måste behålla sina faktiska observationer och källans tillämplighet, produktionsvägar, tillgänglighet och ägarens release måste granskas innan publicering. Ingen produktionsinput, referens eller verkligt meddelande behövs för att förstå gränsen som beskrivs här.

[ Takeaway ]

Autentisera e-post och självständigt validera hur applikationer bygger den; ingen kontroll ersätter den andra.

[Efter roll]

Vad detta betyder för dig

Välj din roll för praktiska nästa steg.

Applikationsingenjör

Håll data borta från meddelandestrukturen

Granska varje mappning av input-to-header och input-to-envelope.

Nästa steg

  1. Använd strukturerad meddelandekonstruktion.
  2. Dokumentera avvisningsbeteende och mottagarbehörighet.

Säkerhetsgranskare

Kräv en modell för avgränsat hot

Separera analysfel från företagsauktoriseringsfel.

Nästa steg

  1. Granska en isolerad testplan.
  2. Kräv faktiska observationer innan du begär sanering.

Tjänsteägare

Godkänn det avsedda arbetsflödet

Ett giltigt signerat meddelande kan fortfarande överskrida applikationens affärsbehörighet.

Nästa steg

  1. Definiera tillåtna destinationer.
  2. Håll produktionssändning inaktiverad under lokal validering.

[ Vanliga frågor ]

Vanliga frågor

Förhindrar DMARC header-injektion?

Nej. DMARC utvärderar domänjustering och utesluter innehållsanalys och autentisering av andra enheter än domäner. Hantering av applikationsinmatning är en separat kontroll.

RFC 9989: DMARC

Vad gör rubrikinmatning strukturellt känslig?

RFC 5322 definierar fältnamn, kolon, fältkroppar och CRLF-gränser. Extern input måste stanna inom programmets avsedda fältkontrakt snarare än att ändra den strukturen.

RFC 5322 : Internetmeddelandeformat

Ska applikationer bygga råa rubriker genom sammanlänkning?

Föredrar ett strukturerat gränssnitt som stöds och verifiera dess faktiska beteende. Python EmailMessage illustrerar en header-and-payload-modell, men att använda den bevisar inte i sig att en applikation är säker.

Python-dokumentation: email.message.EmailMessage

Kan en godkänd undertecknare signera ett oönskat meddelande?

En signeringsdomän kan signera meddelandet som levereras till den; en signatur är inte ett godkännande av ansökans mottagare eller affärsbeslut.

RFC 6376: DKIM

Är det tillräckligt att ta bort misstänkta karaktärer?

Inte nödvändigtvis. Tysta transformationer kan ändra innebörd. Definiera explicita fältkontrakt, avvisa ogiltiga värden på ett förutsägbart sätt och auktorisera destinationer separat.

Måste ett lokalt valideringstest leverera e-post?

Nej. Den föreslagna testplanen inspekterar konstruktion i en isolerad sele utan serviceanslutning. Ingen sele utfördes för detta utkast.

Användes OWASP-sidor som verifierade bevis?

Nej. De begärda sidorna returnerade åtkomstfel, exkluderades och försökte inte göras om via en annan väg. Artikeln bygger på bibehållen RFC- och Python-dokumentation plus märkta rekommendationer.

Vilka bevis saknas fortfarande?

Den katalogkrävda hotmodellen och icke-förstörande labbreproduktion kopplad till originalforskning förblir öppna. Ett föreslaget arbetsblad är inte en utförd reproduktion.

[ Källor ]

Källor

  1. RFC 9989: DMARC

    Avsnitt §2.2 Anti-phishing · §2.4 Utanför räckvidd · §4.4 Identifieringsjustering förklaras · §11.4 Visningsnamnsattacker

  2. RFC 6376: DKIM

    Avsnitt §1. Inledning · §3.5 DKIM-Signature Header Field · §8. Säkerhetsöverväganden

  3. RFC 5322 : Internetmeddelandeformat

    Avsnitt §2.2 Rubrikfält · §3.4 Adressspecifikation

  4. Python-dokumentation: email.message.EmailMessage

    Avsnitt EmailMessage · as_string · as_bytes · __setitem__

[ Ordlista ]

Ordlista

Rubrikfält
Ett namngivet meddelandefält med en fältkropp och definierade syntaktiska gränser.

RFC 5322 : Internetmeddelandeformat

Serialisering
Att producera en meddelanderepresentation från ett strukturerat meddelandeobjekt; genomförandepolitik kan påverka produktionen.

Python-dokumentation: email.message.EmailMessage

Mottagare auktorisering
Ansökningsbeslutet att en aktör får skicka ett visst arbetsflöde till en godkänd destination.
Inriktning
DMARC relationen mellan den synliga From-domänen och en autentiserad domän.

RFC 9989: DMARC

Företagets härkomst

Varför toppfinansiella institutioner och regeringar avvecklat sina instrumentpaneler för e-postsäkerhet.

Traditionella plattformar för e-postautentisering säljer dig en instrumentpanel och ber dina ingenjörer att göra jobbet. I miljöer med hög insats innebär manuell övervakning försenad tillämpning, konfigurationsdrift och oövervakade skuggdomäner.

EmailAuth är den agentiska e-postplattformen. Våra agenter verkställer p=reject, håll avsändare från tredje part i linje och flytta dina domäner till fulla RFC 9989 överensstämmelse, den nya DMARC standarden, med auditerbarhet för människor i slingan.

regeringar Stora företag Tier-1 finansiella institutioner

SaaS · Dedikerad hyresavtal · Air-gapped on-prem · BYOK-kryptering

Kunskapsbas