Backtracking regex bậc hai gây từ chối dịch vụ từ xa trong nodemailer

Lưu ý: Dữ liệu này chỉ có tính chất tham khảo, phục vụ nghiên cứu an ninh mạng.CyStack khuyến nghị người dùng không sử dụng các thông tin này nhằm các mục đích bất hợp pháp

Lỗ hổng CVE-2026-100700 là gì?

Lỗ hổng CVE-2026-100700 là lỗ hổng Inefficient Algorithmic Complexity ảnh hưởng tới nodemailer (phiên bản bị ảnh hưởng: < 10.0.6). Lỗ hổng này được xếp hạng ở mức Cao, với điểm CVSS 8.7. Lỗ hổng này đã có mã hoặc bằng chứng khai thác công khai, nhưng điều đó chưa xác nhận việc khai thác trong thực tế.

Giới thiệu chung

Dữ liệu gốc

nodemailer trước phiên bản 10.0.6 chứa lỗ hổng từ chối dịch vụ trong mẫu regex fallback free-text của addressparser, mẫu này có hành vi backtracking bậc hai. Kẻ tấn công có thể cung cấp các giá trị email header được tạo đặc biệt với những chuỗi dài không có khoảng trắng để chặn event loop của Node.js trong hàng chục giây, gây mất khả năng cung cấp dịch vụ.

Sản phẩm và phạm vi ảnh hưởng

  • Package nodemailer với phiên bản từ 0 và nhỏ hơn 10.0.6 được xác định là bị ảnh hưởng.
  • Advisory của maintainer mô tả các phiên bản đến và gồm 10.0.5 là bị ảnh hưởng.
  • 10.0.6 là phiên bản đã được xác định là đã sửa lỗi. Bản ghi hiện có không xác minh độc lập trạng thái của mọi nhánh phát hành song song hoặc các phiên bản về sau.

Chi tiết kỹ thuật

Package nodemailer chứa một regex fallback trong addressparser để tìm địa chỉ từ phần free-text khi cách phân tích nghiêm ngặt không tìm thấy địa chỉ. Mẫu \s*\b[^@\s]+@[^\s]+\b\s* được thực thi như một phép tìm kiếm và có hành vi backtracking bậc hai. Phần [^@\s]+ có thể quét đến cuối một chuỗi dài không chứa khoảng trắng hoặc ký tự @, sau đó engine dịch vị trí bắt đầu lên từng ký tự và lặp lại việc quét. Các chuỗi không có @, có @ nhưng thiếu phần trước hoặc sau, hoặc đặt địa chỉ hợp lệ sau một chuỗi rất dài đều có thể buộc parser thực hiện nhiều lần quét. Input do kẻ tấn công kiểm soát là các giá trị email header đi vào parser; đường đi này có thể xuất hiện qua mailparser, và cũng có thể xuất hiện khi ứng dụng đưa chuỗi do người dùng cung cấp vào các trường địa chỉ to, from hoặc cc khi tạo thư qua mime-node. Node.js thường xử lý JavaScript trên một event loop đơn, vì vậy việc xử lý regex kéo dài có thể làm đình trệ toàn bộ process. Bằng chứng hiện có không xác định mọi tích hợp hoặc transport cụ thể trong từng hệ thống có truyền input không tin cậy vào các đường đi này.

Khả năng khai thác

Lỗ hổng có thể bị khai thác qua mạng khi ứng dụng nhận các giá trị header hoặc chuỗi địa chỉ do kẻ tấn công kiểm soát. Bản ghi cho biết không cần xác thực, không cần tương tác của người dùng và độ phức tạp khai thác thấp. Một giá trị header được tạo đặc biệt với chuỗi dài không có khoảng trắng có thể khiến event loop bị chặn trong hàng chục giây. Bản ghi đánh dấu đã có public exploit material, và advisory của maintainer có mô tả proof of concept, nhưng không nêu tên chiến dịch, nạn nhân hoặc hoạt động khai thác thực tế. Khả năng tiếp cận thực tế vẫn phụ thuộc vào việc deployment có đưa dữ liệu đầu vào không tin cậy vào addressparser hay không.

Tác động kỹ thuật

Kẻ tấn công có thể cung cấp chuỗi email header hoặc địa chỉ khiến regex fallback thực hiện backtracking bậc hai và tiêu tốn CPU trong thời gian dài. Kết quả kỹ thuật là event loop bị chặn, làm process Node.js không thể xử lý bình thường các tác vụ khác trong cùng thời gian. Tác động chính là từ chối dịch vụ hoặc suy giảm availability; không có bằng chứng trong bản ghi cho thấy mất tính bí mật hay tính toàn vẹn. Nếu parser chạy trong process dùng chung cho nhiều chức năng, các chức năng đó có thể bị ảnh hưởng theo; đây là hệ quả phụ thuộc kiến trúc, không phải phạm vi được xác nhận cho mọi deployment.

Tác động đến tổ chức

Lỗi có thể làm process Node.js xử lý email bị treo trong hàng chục giây khi gặp input phù hợp. Hệ quả vận hành có thể gồm tăng độ trễ, request timeout, backlog xử lý email và gián đoạn dịch vụ gửi hoặc phân tích thư. Trong một process đơn luồng, một lần xử lý regex kéo dài có thể ảnh hưởng đến các công việc khác đang chờ event loop, nhưng phạm vi cụ thể phụ thuộc vào kiến trúc deployment. Bản ghi chỉ xác nhận tác động đến availability, không xác nhận việc đọc dữ liệu, sửa dữ liệu hoặc chiếm quyền truy cập.

Cách khắc phục

  1. Nâng cấp package nodemailer lên phiên bản đã được xác nhận sửa lỗi 10.0.6.
  2. Xác minh sau khi nâng cấp rằng lockfile, artifact build và runtime thực tế đều sử dụng phiên bản đã sửa, thay vì chỉ cập nhật manifest.
  3. Ưu tiên các deployment nhận header email từ mạng hoặc xử lý địa chỉ do người dùng cung cấp, vì đây là những đường đi được advisory xác định là có thể tiếp cận parser.
  4. Nếu chưa thể nâng cấp, bằng chứng hiện có không xác định một workaround riêng do vendor cung cấp. Không nên coi một nhánh phát hành khác là an toàn chỉ vì bản ghi xác nhận 10.0.6 đã được sửa.

Cách phát hiện

  1. Kiểm kê mọi ứng dụng Node.js sử dụng package nodemailer và ghi nhận phiên bản thực tế từ lockfile, manifest hoặc thư mục triển khai.
  2. Xác định các deployment có dùng addressparser, mailparser hoặc mime-node, đặc biệt những deployment xử lý email header từ nguồn bên ngoài.
  3. Rà soát các luồng đưa dữ liệu người dùng vào các trường địa chỉ to, from hoặc cc khi tạo thư.
  4. Kiểm tra telemetry về event-loop lag, thời gian xử lý request tăng đột biến, CPU bị chiếm dụng kéo dài hoặc dịch vụ không phản hồi, rồi đối chiếu với các input header hoặc địa chỉ bất thường. Đây là biện pháp phát hiện mang tính phòng ngừa, không phải IOC đã được xác nhận.
  5. Không coi việc không thấy log hoặc event-loop stall là bằng chứng deployment an toàn; cần hoàn tất kiểm tra phiên bản và đường đi dữ liệu.
Nguồn (9)
Tìm hiểu thêm

Kiểm tra chuyên sâu cùng giải pháp quản lý rủi ro Web toàn diện

Giải pháp CyStack VulnScan liên tục phát hiện tài sản, xác minh lỗ hổng và giúp đội ngũ bảo mật ưu tiên khắc phục cho toàn bộ doanh nghiệp.