Email Header Injection là gì? Cách hoạt động và phòng ngừaLink to heading
“Chỉ một lỗ hổng nhỏ trong hệ thống email cũng có thể mở ra cánh cửa cho hacker”. Đó chính là trường hợp của Email Header Injection – một kỹ thuật tấn công nguy hiểm nhằm chiếm quyền kiểm soát và lợi dụng tiêu đề email để phát tán thư rác, phishing và mã độc. Đây không chỉ là rủi ro về bảo mật, mà còn là mối đe dọa trực tiếp đến uy tín và dữ liệu của doanh nghiệp.
Trong bài viết này, chúng ta sẽ cùng khám phá Email Header Injection, tìm hiểu tại sao nó nguy hiểm và cách bảo vệ hệ thống trước loại tấn công này.
Email Header Injection là gì?Link to heading
Email Header Injection (còn gọi là SMTP Header Injection hay Email Injection) là một lỗ hổng bảo mật ứng dụng web xảy ra khi dữ liệu người dùng nhập vào các form liên hệ trên website không được kiểm tra và lọc đúng cách trước khi gửi tới thư viện email của máy chủ web.
Trong quá trình này, dữ liệu từ form được gắn vào phần email header – nơi chứa thông tin điều khiển như người gửi, người nhận, tiêu đề, nội dung bổ sung… Nếu kẻ tấn công chèn thêm các dòng lệnh hoặc trường header độc hại vào input, những dữ liệu này sẽ được thư viện email chuyển đổi thành SMTP commands và gửi đến SMTP server.
Điều này cho phép hacker:
- Thêm header giả mạo để gửi email spam hàng loạt.
- Thực hiện tấn công phishing, lừa người dùng tin tưởng email là hợp lệ.
- Khiến máy chủ email xử lý theo cách ngoài ý muốn.
Mặc dù Email Header Injection không trực tiếp gây hại cho máy chủ web, nhưng nó biến form liên hệ thành công cụ để kẻ xấu phát tán spam hoặc thực hiện các chiến dịch lừa đảo. Chính vì vậy, đây được xem là một lỗ hổng bảo mật nghiêm trọng cần được khắc phục ngay lập tức.
>>> Có thể bạn quan tâm: CRLF Injection Attacks là gì? 4 Hình thức tấn công phổ biến
Cách thức hoạt động của Email Header InjectionLink to heading
Giao thức SMTPLink to heading
Giao thức SMTP (Simple Mail Transfer Protocol) là một trong những giao thức lâu đời nhất của Internet. Ban đầu, nó chỉ chấp nhận một tập lệnh nhỏ nhằm xác định ai là người gửi email và ai là người nhận. Theo thời gian, email ngày càng trở nên phức tạp hơn và các header (tiêu đề email) đã được bổ sung.
Để hiểu cách SMTP hoạt động, trước tiên bạn cần nắm rõ sự khác biệt giữa phong bì (envelope) và nội dung email (email body). Phong bì là phần khởi đầu của quá trình giao tiếp và nó thuộc về chính giao thức SMTP. Các lệnh sau đây là một phần của phong bì:
- MAIL FROM: Lệnh này thiết lập người gửi trong phong bì.
- RCPT TO: Lệnh này thiết lập người nhận trong phong bì. Nó có thể được sử dụng nhiều lần nếu bạn muốn gửi cùng một email đến nhiều người.
- DATA: Lệnh này bắt đầu phần tải (payload) của email. Payload chứa các header của email và nội dung email, được ngăn cách bằng một dòng trống.
Các header email không thuộc giao thức SMTP. Chúng được ứng dụng email diễn giải để hiển thị email đúng cách, đồng thời cũng được một số thư viện xử lý email trong các ngôn ngữ lập trình sử dụng. Một số ví dụ về các header:
- From: Header này xác định người gửi hiển thị, và có thể khác với nội dung của MAIL FROM (trong hầu hết các ứng dụng email, người gửi được thiết lập bằng MAIL FROM sẽ xuất hiện trong header Return-Path, vốn thường bị ẩn mặc định).
- To: Header này xác định người nhận hiển thị và có thể khác với nội dung của RCPT TO (trong hầu hết các ứng dụng email, người nhận được thiết lập bằng RCPT TO sẽ xuất hiện trong header Delivered-To, vốn cũng thường bị ẩn mặc định).
Email Header InjectionLink to heading
Email Header Injection hoạt động bằng cách chèn các ký tự xuống dòng vào dữ liệu đầu vào của người dùng. Nếu dữ liệu này không được kiểm tra và lọc, hacker có thể thêm các header email giả mạo hoặc thay đổi nội dung thông điệp.
Bằng cách kết thúc payload độc hại của mình bằng một dòng chỉ chứa dấu chấm (.), kẻ tấn công có thể báo hiệu cho máy chủ email rằng thông điệp đã kết thúc, khiến nó bỏ qua phần nội dung hợp lệ mà script phía back-end vốn dĩ sẽ gửi đi.
Trong hầu hết các thư viện email của ngôn ngữ lập trình web, bạn không thể trực tiếp thêm envelope commands. Thay vào đó, thư viện sẽ nhận các header email mà bạn cung cấp rồi chuyển chúng thành các lệnh SMTP tương ứng.
Ví dụ: nếu bạn thêm header BCC, thư viện email có thể lấy nội dung của header đó và tạo thêm các lệnh RCPT TO. Nếu hacker có thể chèn thêm các header thông qua thư viện này, thì những header đó cũng sẽ được chuyển đổi thành các lệnh SMTP tương ứng.
Tác động của Email Header InjectionLink to heading
Các lỗ hổng Email Header Injection được coi là một vấn đề an ninh mạng nghiêm trọng. Mặc dù chúng không trực tiếp gây hại cho ứng dụng web bị dính lỗ hổng hoặc cho máy chủ web, nhưng chúng có thể cho phép kẻ tấn công gửi email với nội dung tùy ý đến những người nhận tùy ý, mở ra nhiều kịch bản tấn công nguy hiểm.
Những hình thức tấn công phổ biến qua Email Header Injection bao gồm:
- Spam: Kẻ tấn công có thể lợi dụng Email Injection để gửi hàng loạt thư rác. Chỉ cần một đoạn mã nhỏ được chèn thành công, chúng có thể buộc máy chủ email của nạn nhân gửi đi vô số email có cùng nội dung đến nhiều người nhận khác nhau.
- Phishing: Hacker có thể gửi email lừa đảo trông như được gửi từ máy chủ, tên miền hoặc địa chỉ IP của nạn nhân. Điều này khiến nạn nhân bị đổ lỗi trong khi kẻ tấn công lại không thể bị truy vết. Nguy hiểm hơn, nếu ứng dụng web của nạn nhân cũng tồn tại lỗ hổng Cross-Site Scripting (XSS) và liên kết trong email lừa đảo trỏ đến ứng dụng dễ bị tấn công đó, thì email sẽ trông càng hợp pháp và khó bị nghi ngờ.
- Spear Phishing: Nâng cao hơn, kẻ tấn công có thể gửi những email lừa đảo có vẻ hợp pháp nhắm đến các nhân viên được chọn trong công ty sở hữu ứng dụng dễ bị khai thác. Ví dụ, chúng có thể gửi một email giả mạo CFO đến phòng tài chính, yêu cầu khẩn cấp thực hiện một khoản chuyển tiền lớn vào tài khoản do hacker kiểm soát.
Cách phát hiện Email Header InjectionLink to heading
Phát hiện lỗ hổng Email Header Injection có thể thực hiện theo nhiều cách, tùy thuộc vào việc bạn đang sử dụng phần mềm có sẵn hay tự phát triển ứng dụng:
Đối với hệ thống hoặc phần mềm có sẵn, bạn chỉ cần xác định chính xác phiên bản phần mềm hoặc ứng dụng bạn đang sử dụng. Nếu phiên bản đó đã được công bố là tồn tại lỗ hổng Email Injection, bạn có thể coi hệ thống của mình đang bị ảnh hưởng. Việc kiểm tra có thể thực hiện thủ công hoặc bằng cách sử dụng các công cụ bảo mật chuyên dụng.
Đối với hệ thống hoặc ứng dụng tự phát triển, để chắc chắn một ứng dụng có dính lỗ hổng Email Injection hay không, cần phải khai thác thành công lỗ hổng. Bạn có thể thực hiện bằng cách kiểm thử xâm nhập thủ công hoặc sử dụng công cụ quét lỗ hổng tự động.
Lưu ý quan trọng: Email Header Injection là một lỗ hổng out-of-band. Điều này có nghĩa là kẻ tấn công không nhận phản hồi trực tiếp từ hành động tấn công. Để phát hiện loại lỗ hổng này một cách tự động, trình quét lỗ hổng cần có dịch vụ trung gian để ghi nhận dấu hiệu tấn công.
Cách phòng ngừa Email Header InjectionLink to heading
Kiểm soát và xác thực dữ liệu đầu vào
- Loại bỏ ký tự xuống dòng (CRLF – \r\n): Đây là cách hacker thường lợi dụng để chèn header giả mạo.
- Giới hạn độ dài dữ liệu đầu vào: Không cho phép chuỗi input quá dài, đặc biệt là trong form liên hệ.
- Chỉ cho phép ký tự hợp lệ: Ví dụ, trường “Tên” chỉ nên chứa chữ cái, trường “Email” phải tuân theo định dạng hợp lệ.
Sử dụng thư viện email an toàn
- Dùng các thư viện gửi email đáng tin cậy đã có cơ chế ngăn chặn Email Injection (ví dụ: PHPMailer, SwiftMailer thay vì dùng mail() thô trong PHP).
- Luôn cập nhật phiên bản mới nhất của thư viện để vá các lỗ hổng bảo mật đã được công bố.
Áp dụng nguyên tắc bảo mật trong lập trình
- Không bao giờ chèn trực tiếp dữ liệu người dùng vào header email.
- Sử dụng các hàm hoặc API bảo mật để xử lý thông tin người dùng thay vì nối chuỗi thủ công.
- Thực hiện code review và kiểm thử bảo mật thường xuyên để phát hiện sớm lỗ hổng.
Kết hợp các cơ chế bảo mật email
- SPF, DKIM và DMARC: giúp xác minh tính hợp lệ của email, giảm nguy cơ giả mạo.
- Email Gateway và Firewall: lọc, giám sát và chặn các email đáng ngờ.
Sử dụng công cụ bảo mật và quét lỗ hổng
- Áp dụng vulnerability scanners (như Invicti, Acunetix) để phát hiện sớm nguy cơ email injection.
- Kết hợp với hệ thống giám sát an ninh liên tục để theo dõi hoạt động bất thường.
- Với website, nên dùng thêm công cụ quét mã độc website tự động.
Kết luậnLink to heading
Tóm lại, Email Header Injection không chỉ là một lỗ hổng kỹ thuật đơn thuần, mà còn là mối đe dọa trực tiếp đến uy tín và sự an toàn của doanh nghiệp. Việc hiểu rõ cách thức hoạt động, tác hại và phương pháp phòng tránh sẽ giúp bạn chủ động hơn trong việc bảo vệ hệ thống email và website. Hãy thường xuyên kiểm tra, cập nhật phần mềm và sử dụng các công cụ quét bảo mật để kịp thời phát hiện nguy cơ tiềm ẩn.
Tiếp tục khám phá thêm nhiều bài viết hữu ích về bảo mật web tại Blog của System443 ngay nào!

