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ế
Attacker mở form công khai
/form/contact-usNhập payload vào field Name
Submit form
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






