# 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
    

```plaintext
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:
    

```plaintext
{{ 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ả:

```plaintext
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:**

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

Kết quả:

*   Truy cập Node.js runtime
    
*   Chạy command hệ thống
    

![](https://cdn.hashnode.com/uploads/covers/676511773cdd3c06f7b226ee/6aa8ef22-a6fd-43a5-94f1-9c4de958c31b.png align="center")

**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 ở:

```plaintext
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

*   [Zero Click Unauthenticated RCE in n8n: A Contact Form That Executes Shell Commands](https://www.pillar.security/blog/zero-click-unauthenticated-rce-in-n8n-a-contact-form-that-executes-shell-commands)
    
*   [Critical N8n Vulnerabilities Allowed Server Takeover - SecurityWeek](https://www.securityweek.com/critical-n8n-vulnerabilities-allowed-server-takeover/)
