Skip to main content

Command Palette

Search for a command to run...

Không cần đăng nhập, không cần click: Lỗ hổng n8n cho phép hacker chiếm quyền server trong tích tắc

Published
4 min read
Không cần đăng nhập, không cần click: Lỗ hổng n8n cho phép hacker chiếm quyền server trong tích tắc

Tổng quan

Nhóm nghiên cứu Pillar đã phát hiện một lỗ hổng cực kỳ nghiêm trọng trong n8n cho phép:

  • Thực thi lệnh từ xa (RCE)

  • Không cần đăng nhập (unauthenticated)

  • Không cần người dùng tương tác (zero-click)

=> Chỉ cần truy cập vào một form công khai là có thể tấn công.

Nếu bạn dùng:

  • n8n Cloud → đã an toàn

  • Self-host → cần cập nhật ngay phiên bản vá

Lỗ hổng CVE-2026-27493

1. Điều kiện khai thác

  • Một form nhiều bước (multi-step form)

  • Có bước hiển thị lại dữ liệu người dùng (VD: “Thank you, {{Name}}”)

  • Form được public trên internet

=> Đây là cấu hình rất phổ biến (form liên hệ, đăng ký…)

2. Cách tấn công hoạt động (đơn giản hóa)

Hệ thống xử lý form 2 lần (double evaluation):

  • Bước 1: Server lấy input user (ví dụ: Name), chèn vào HTML
Thank you, {{Name}}
  • Bước 2: Server lại quét HTML để tìm {{ }} và thực thi như code. Nếu attacker nhập:
{{ malicious_code }}

=> Nó sẽ bị thực thi ở bước 2, dẫn đến RCE

3. Kịch bản tấn công thực tế

  1. Attacker mở form công khai /form/contact-us

  2. Nhập payload vào field Name

  3. Submit form

  4. Server:

  • Inject payload vào HTML

  • Execute payload

Kết quả:

uid=1000(node) gid=1000(node)

➡️ Server đã bị chiếm quyền

Lỗ hổng CVE-2026-27577

Đây là sandbox escape trong engine xử lý expression.

1. Nguyên nhân

  • Bộ lọc AST bỏ sót SpreadElement

  • Cho phép truy cập biến nguy hiểm như process

2. Payload mẫu:

={{ ((g) => g.getBuiltinModule('child_process').execSync('id').toString())({...process}) }}

Kết quả:

  • Truy cập Node.js runtime

  • Chạy command hệ thống

3. Điểm nguy hiểm cốt lõi

n8n lưu toàn bộ credentials:

  • AWS keys

  • Database passwords

  • OAuth tokens

  • API keys

👉 Chỉ cần RCE → lấy được toàn bộ hệ thống

Form public = entry point hoàn hảo

  • Không cần login

  • Không cần quyền

  • Không cần tương tác người dùng khác

Ảnh hưởng cloud multi-tenant

  • Có thể ảnh hưởng sang tenant khác

  • Rủi ro lan rộng toàn hệ thống

Phân tích chuyên sâu (góc nhìn security)

1. Bản chất lỗ hổng: Expression Injection

Đây tương tự:

  • SQL Injection

  • SSTI (Server-Side Template Injection)

Tuy nhiên nguy hiểm hơn vì:

  • Đi thẳng đến RCE

  • Không cần bypass nhiều bước

2. Double Evaluation = thiết kế sai logic

Sai lầm nằm ở:

User input → render → parse lại như code

👉 Đây là anti-pattern cực kỳ nguy hiểm trong secure coding.

3. Sandbox không phải là lớp bảo vệ tuyệt đối

  • Sandbox bị bypass ở compile stage

  • Không phải runtime

=> Nếu dữ liệu nguy hiểm lọt qua compile → runtime không cứu được

4. Tại sao TypeScript không phát hiện?

  • AST thiếu case SpreadElement

  • Type system nghĩ đã cover hết

5. Chuỗi khai thác hoàn chỉnh

Public Form -> Expression Injection (CVE-2026-27493) -> Sandbox Escape (CVE-2026-27577) -> RCE -> Dump credentials -> Lateral movement / Cloud compromise

6. Mức độ nghiêm trọng

Tiêu chí Đánh giá
Attack vector Internet
Auth Không cần
User interaction Không
Impact Toàn hệ thống
CVSS ~9.5 (Critical)

Kết luận

Đây là một trong những lỗ hổng nguy hiểm nhất vì:

  • Không cần auth Không cần click

  • Khai thác cực dễ (chỉ cần browser)

  • Ảnh hưởng toàn bộ hệ thống downstream

  • Nếu triển khai n8n, chưa patch thì coi như đã bị compromise

Khuyến nghị

Phía FPT Threat Intelligence đưa ra các khuyến nghị sau cho người dùng N8N:

  • Update ngay lập tức

  • Kiểm tra tất cả form: Có hiển thị lại input không?

  • Nếu nghi bị khai thác: Rotate toàn bộ credentials

  • Kiểm tra biến: N8N_ENCRYPTION_KEY

  • Cập nhật các bản vá ngay lập tức

Tham khảo

More from this blog

F

FPT IS Security

726 posts

Dedicated to providing insightful articles on cybersecurity threat intelligence, aimed at empowering individuals and organizations to navigate the digital landscape safely.