# Claude Code 2.1.268: Đã sửa gì trong quy tắc deny và MCP

> Claude Code 2.1.268–2.1.269 đã sửa bốn lỗi quyền và một vụ rò rỉ bí mật trong /mcp. Ai bị ảnh hưởng, cách cập nhật và cách kiểm tra quy tắc của bạn.

Source: https://ailoot.ai/blog/vi/claude-code-2-1-268-fixes/
Canonical: https://ailoot.ai/blog/vi/claude-code-2-1-268-fixes/
Language: vi
Publisher: Ailoot (https://ailoot.ai/)
Translation: guide-040
Revision: sha256-73f0b5973e8d85892f27065b85212c2e7747c47b70ab6876a85815ac85b5ebe7


Claude Code phiên bản 2.1.268 được phát hành vào ngày 10 tháng 9 năm 2026, và ngày hôm sau là phiên bản 2.1.269. Bạn nên cập nhật ngay: trong hai trường hợp, các quy tắc deny mà bạn dùng để chặn agent truy cập `.env` và các thư mục dịch vụ đã âm thầm không có tác dụng. Ngoài ra, lệnh `/mcp` có thể in các bí mật từ cấu hình của bạn ra terminal.

Tất cả thông tin dưới đây dựa trên nhật ký thay đổi và tài liệu chính thức của Anthropic tại thời điểm ngày 17 tháng 9 năm 2026, ngày của tư liệu nguồn. Phiên bản mới nhất vào ngày đó là 2.1.274. Chúng tôi mô tả cách các lỗi hoạt động dựa trên những mục đó; các cách vượt qua bảo vệ chưa được tái hiện trên phiên bản có lỗ hổng.

Để biết thêm hướng dẫn làm việc với Ailoot, hãy xem [tài liệu](https://ailoot.ai/docs/).



## Claude Code 2.1.268 và 2.1.269 đã sửa những gì?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Section takeaway">

Điểm chính

Bốn lỗi về quyền đã được sửa. Các quy tắc deny và ask không hoạt động với đường dẫn đi qua symlink, còn quy tắc deny trên Read hoặc Edit có thể không kích hoạt ở các dòng chứa `env -C` hoặc `eval`. Quy tắc có “!” được áp dụng vượt ra ngoài tệp cài đặt của nó. Lệnh `tee` ghi tệp mà không bị quy tắc deny trên Edit chặn. Ngoài ra, `/mcp` và `claude mcp list` hiển thị bí mật từ cấu hình, trong khi lỗi plugin hiển thị token từ URL Git.

</div>

Có bốn bản sửa liên quan đến quy tắc quyền:

1.  **Quy tắc chặn trên symlink không hoạt động.** Các quy tắc deny và ask được viết cho các thư mục symlink (`/etc`, `/tmp`, `/var` trên macOS, `/bin` trên Linux) không kích hoạt khi đường dẫn được chỉ định bằng vị trí thực. Các lệnh Bash cũng bỏ qua quy tắc deny được viết cho đường dẫn đi qua symlink.
2.  **Chặn thao tác đọc và chỉnh sửa thất bại khi có `env -C` hoặc `eval`.** Nếu cùng một dòng lệnh chứa cấu trúc mà bước kiểm tra quyền không thể phân tích, quy tắc deny trên Read hoặc Edit có thể không kích hoạt.
3.  **Quy tắc có “!” được áp dụng rộng hơn dự định.** Quy tắc deny hoặc ask bắt đầu bằng `!` được áp dụng vượt ra ngoài tệp cài đặt nơi nó được viết. Giờ đây, quy tắc chỉ áp dụng trong phạm vi nguồn của chính nó, còn dấu phủ định đứng riêng `!` sẽ bị bỏ qua.
4.  **`tee` ghi tệp bằng cách vượt qua quy tắc chặn.** Các quy tắc deny cho `Edit()` và bước kiểm tra đường dẫn ghi không được áp dụng cho tệp được tạo bằng lệnh Bash `tee`. Quyền `Bash(tee:*)` không còn bao gồm thao tác ghi bên ngoài các thư mục làm việc.

Các phiên bản này cũng sửa hai vấn đề liên quan đến việc lộ bí mật. WebFetch không còn chờ vô thời hạn phản hồi từ máy chủ giữ kết nối mở: yêu cầu giờ sẽ thất bại sau 300 giây, và có thể cấu hình thời hạn bằng biến `CLAUDE_CODE_WEBFETCH_DEADLINE_MS`. Các phiên bản này cũng loại bỏ tình trạng sử dụng CPU cao liên tục trong các phiên dài không hoạt động.

## Quy tắc chặn hoạt động như thế nào trong Claude Code?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Section takeaway">

Điểm chính

Quy tắc được viết trong khối `permissions` của `settings.json`: deny chặn, ask yêu cầu xác nhận, còn allow cho phép thực hiện hành động mà không cần xác nhận. Các bước kiểm tra chạy theo thứ tự: deny, rồi ask, sau đó allow. Quy tắc có định dạng `Tool` hoặc `Tool(detail)`, chẳng hạn `Read(./.env)`.

</div>

Claude Code có ba danh sách quy tắc: **deny** (luôn bị cấm), **ask** (hỏi trước khi thực hiện hành động) và **allow** (được phép mà không cần xác nhận). Khi agent sắp thực hiện một việc, các quy tắc được kiểm tra nghiêm ngặt theo thứ tự đó. Quy tắc deny khớp sẽ hủy mọi quy tắc allow cho cùng hành động: quy tắc cho phép không thể tạo ngoại lệ đối với lệnh chặn.

Quy tắc được lưu ở ba nơi: quy tắc người dùng trong `~/.claude/settings.json`, quy tắc dự án trong `.claude/settings.json` bên trong repository và quy tắc cục bộ trong `.claude/settings.local.json`. Sau đây là ví dụ về cài đặt chặn đọc tệp chứa khóa:

```json
{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./secrets/**)",
      "Bash(rm *)"
    ]
  }
}
```

Bạn có thể xem tất cả quy tắc đang hoạt động và tệp chứa từng quy tắc bằng cách chạy `/permissions` trong một phiên. Nếu quy tắc chặn việc đọc, thông báo từ chối sẽ nêu tên quy tắc đó, điều này sẽ hữu ích cho bước kiểm tra bên dưới.



## Những lỗi nào ảnh hưởng đến quy tắc chặn và phạm vi của quy tắc?

Các lỗi ảnh hưởng đến bước kiểm tra đường dẫn và lệnh, cũng như phạm vi áp dụng của quy tắc từ các tệp cài đặt khác nhau.

**Trường hợp thứ nhất: symlink.** Trên macOS, `/etc`, `/tmp` và `/var` là symlink đến các thư mục thực bên dưới `/private`; trên Linux, `/bin` thường là symlink tương tự. Nếu bạn viết quy tắc deny cho một cách viết đường dẫn nhưng agent truy cập bằng cách khác (ví dụ: dùng vị trí thực thay vì symlink), quy tắc sẽ không kích hoạt. Các lệnh Bash cũng bỏ qua lệnh chặn được viết cho đường dẫn đi qua symlink. Trong 2.1.268, cả hai trường hợp đều đã được sửa: quy tắc giờ có hiệu lực bất kể đường dẫn được viết theo cách nào.

**Trường hợp thứ hai: `env -C` và `eval` trên cùng một dòng.** Bước kiểm tra quyền phân tích lệnh để xác định lệnh sẽ truy cập những tệp nào. Bước này không thể phân tích các cấu trúc như `env -C` hoặc `eval`. Lỗi nằm ở chỗ khi cấu trúc như vậy xuất hiện trên dòng lệnh, quy tắc deny trên Read hoặc Edit có thể không được áp dụng. Do đó, lệnh có thể vượt qua quy tắc chặn đọc hoặc chỉnh sửa tệp được bảo vệ.

**Trường hợp thứ ba: quy tắc có “!” được áp dụng vượt ra ngoài phạm vi của nó.** Quy tắc bắt đầu bằng `!` chỉ nên áp dụng trong tệp cài đặt nơi nó được viết. Trước phiên bản 2.1.269, quy tắc này còn áp dụng cho các nguồn cài đặt khác. Giờ đây, phạm vi của nó chỉ giới hạn trong tệp của chính nó, và quy tắc chỉ gồm một dấu `!` đứng riêng sẽ bị bỏ qua.

**Trường hợp thứ tư: ghi bằng `tee`.** Lệnh Bash `tee` có thể ghi vào tệp. Bước kiểm tra đường dẫn ghi và quy tắc deny trên `Edit()` không áp dụng cho tệp đó. Đồng thời, quyền `Bash(tee:*)` bao gồm thao tác ghi bên ngoài các thư mục làm việc. Trong 2.1.269, các bước kiểm tra này bắt đầu áp dụng cho thao tác ghi qua `tee`: lệnh chặn trên tệp có hiệu lực và `Bash(tee:*)` chỉ bao gồm các thư mục làm việc.

Nếu bạn dùng quy tắc chặn có mục tiêu cụ thể — để chặn `.env`, một vài thư mục dịch vụ hoặc các lệnh nguy hiểm — bạn cũng nên kiểm tra chúng. Các bước nằm bên dưới.

## Vì sao /mcp có thể hiển thị khóa của bạn?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Section takeaway">

Điểm chính

Khóa trong cấu hình MCP thường được cung cấp thông qua biến `${VAR}`. Các lệnh `/mcp`, `/plugin`, `claude mcp list` và `claude mcp get`, cũng như lỗi đăng nhập MCP, đã hiển thị các giá trị được thay vào biến — tức chính các khóa đó. Trong 2.1.268, đầu ra đã được che thông tin nhạy cảm.

</div>

Cấu hình máy chủ MCP thường lưu khóa trong biến môi trường và tham chiếu chúng qua `${VAR}`, để có thể lưu tệp trong repository mà không chứa chính các bí mật. Vấn đề là các lệnh xem thông tin (`/mcp`, `/plugin`, `claude mcp list`, `claude mcp get`) và thông báo lỗi đăng nhập MCP hiển thị cấu hình sau khi các giá trị đã được thay vào. Khóa thực tế xuất hiện trên màn hình.

Một bản sửa khác liên quan đến lỗi plugin và marketplace: chúng có thể hiển thị token hoặc mật khẩu từ URL Git nguồn.

Nếu đầu ra của `/mcp` hoặc `claude mcp list` trên phiên bản cũ xuất hiện trong luồng trực tuyến, ảnh chụp màn hình, tin nhắn gửi đồng nghiệp hoặc nhật ký rời khỏi máy của bạn, kể cả tự động, hãy coi như các khóa từ cấu hình MCP đã bị lộ và thay chúng. Nếu đầu ra không rời khỏi máy, chỉ cần cập nhật. Chúng tôi có hướng dẫn riêng về máy chủ MCP và các cấu hình dựng sẵn: [Máy chủ MCP của Claude Code](https://ailoot.ai/blog/vi/mcp-servers-claude-code/).

## Các thay đổi khác trong những phiên bản này

**WebFetch và artifact.** Trước đây, quy tắc `WebFetch` không kèm chi tiết trong deny hoặc ask cũng áp dụng cho việc đọc và chỉnh sửa artifact đã xuất bản. Kể từ 2.1.268, quy tắc này không còn áp dụng cho chúng. Để chặn artifact, bạn cần quy tắc `Artifact` riêng hoặc quy tắc cho miền, chẳng hạn `WebFetch(domain:claude.ai)`. Nếu bạn dựa vào lệnh chặn WebFetch chung để bảo vệ khỏi việc đọc artifact, hãy kiểm tra lại cài đặt: quy tắc trước đây không còn chặn các hành động này.

**WebFetch hiện có thời hạn chờ.** Yêu cầu gửi đến máy chủ giữ kết nối mở và không hoàn tất phản hồi giờ sẽ thất bại sau 300 giây. Trước đây, yêu cầu như vậy có thể treo vô thời hạn. Có thể cấu hình hành vi này bằng biến `CLAUDE_CODE_WEBFETCH_DEADLINE_MS`; đặt giá trị thành 0 sẽ tắt thời hạn chờ.

**Đã loại bỏ tình trạng sử dụng CPU cao liên tục trong các phiên không hoạt động.** Trong các phiên dài không hoạt động, vòng lặp chờ trong Claude Code có thể gây sử dụng CPU cao liên tục. Lỗi này đã được sửa trong 2.1.268. Nó cũng có thể ảnh hưởng đến những người để phiên mở cả ngày.

**Cài đặt phiên bản mới nhất.** Một lỗi mới xuất hiện trong 2.1.269: sau khi một phiên chạy trong thời gian dài, các lệnh Bash Git chỉ đọc dữ liệu bắt đầu yêu cầu quyền. Lỗi này đã được sửa trong 2.1.270. Vì vậy, hãy cập nhật lên phiên bản mới nhất (tính đến ngày 17 tháng 9 năm 2026, đó là 2.1.274); đừng dừng lại ở 2.1.268 hoặc 2.1.269.

## Cập nhật và kiểm tra quy tắc chặn hoạt động như thế nào?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Section takeaway">

Điểm chính

Kiểm tra phiên bản bằng `claude --version`, cập nhật lên bản phát hành mới nhất, rồi thử nghiệm bằng một tệp an toàn không chứa bí mật: thêm quy tắc deny cho tệp đó, yêu cầu agent đọc tệp và xác nhận thông báo từ chối có nêu tên quy tắc của bạn.

</div>

1.  **Kiểm tra phiên bản hiện tại.** Chạy `claude --version` trong terminal. Các bản sửa cho những vấn đề nêu trên được phát hành trong 2.1.268 và 2.1.269. Nếu số phiên bản thấp hơn 2.1.268, phiên bản của bạn chưa có các bản sửa này, dù mỗi vấn đề có ảnh hưởng hay không còn tùy thuộc vào đường dẫn, lệnh và quy tắc bạn sử dụng.
2.  **Cập nhật.** Hướng dẫn [cách cập nhật Claude Code lên phiên bản mới nhất](https://ailoot.ai/blog/vi/update-claude-code/) có các bước cụ thể và cách khắc phục sự cố. Hãy chọn phiên bản mới nhất; đừng dừng lại ở 2.1.268.
3.  **Thử nghiệm lệnh chặn.** Đừng thử quy tắc trên tệp `.env` thật: nếu lệnh chặn thất bại, agent sẽ thấy các khóa thật. Tạo tệp thử nghiệm, chẳng hạn `secret-test.txt`, chứa nội dung bất kỳ như “đây là bài kiểm tra”; thêm quy tắc `"Read(./secret-test.txt)"` vào danh sách deny trong `.claude/settings.json` của dự án; khởi động lại phiên; rồi yêu cầu: “đọc tệp secret-test.txt và cho tôi biết bên trong có gì.” Hành vi mong đợi là một thông báo từ chối nêu tên quy tắc của bạn. Nếu agent đọc được tệp, lệnh chặn đã không hoạt động trong lần thử nghiệm này. Trước tiên, hãy kiểm tra cú pháp trong phần bên trên và mở `/permissions` để xem các quy tắc đang hoạt động cùng những tệp đã tải chúng. Chỉ riêng kết quả thử nghiệm không xác định được nguyên nhân. Một lần chặn cho thấy quy tắc đối với tệp này hoạt động; điều đó không nói lên gì về các quy tắc khác của bạn, vì vậy hãy kiểm tra từng quy tắc một theo cách tương tự.
4.  **Kiểm tra trường hợp symlink nếu bạn dùng các đường dẫn như vậy.** Nếu bạn có quy tắc chặn cho `/tmp`, `/etc` hoặc `/var` trên macOS, hoặc `/bin` trên Linux, hãy thử lại với các đường dẫn này sau khi cập nhật.
5.  **Rà soát quy tắc có “!”.** Nếu bạn đã dùng quy tắc như vậy, hãy kiểm tra để đảm bảo mỗi quy tắc được viết trong tệp mà nó cần áp dụng.

Nếu lệnh chặn hoạt động nhưng Claude Code vẫn không thể thấy các tệp bạn cần, hãy xem phần giải thích riêng: [vì sao Claude Code không thể thấy các tệp dự án](https://ailoot.ai/blog/vi/claude-code-cant-see-project-files/).

## Nếu hiện tại bạn chưa thể cập nhật

Đôi khi bạn phải hoãn cập nhật: bạn không thể thay đổi môi trường, máy tính thuộc sở hữu công ty hoặc bạn cần hoàn thành tác vụ hiện tại. Trong thời gian chưa cập nhật, bạn có thể giảm rủi ro như sau:

- viết quy tắc deny cho cả hai cách viết của đường dẫn — symlink và vị trí thực (trên macOS, các đường dẫn thực nằm dưới `/private`);
- không ghép nhiều lệnh trên cùng một dòng, đồng thời tránh dùng `env -C` và `eval` trong các lệnh bạn yêu cầu agent chạy;
- không cho ai xem đầu ra của `/mcp`, `/plugin`, `claude mcp list` hoặc `claude mcp get`, và thay các khóa trong cấu hình MCP có thể đã rơi vào tay người khác;
- nhớ rằng `tee` ghi tệp bằng cách vượt qua lệnh chặn trên Edit — đừng coi tệp là được bảo vệ nếu Bash được cho phép.

Các biện pháp này làm giảm khả năng xảy ra một số cách vượt qua bảo vệ cụ thể, nhưng không thay thế được bản sửa. Hãy cập nhật và chạy thử nghiệm ở phần trước ngay khi có thể.

## Tóm tắt ngắn

Các phiên bản 2.1.268 và 2.1.269 đã sửa bốn vấn đề về quyền của Claude Code: symlink, các dòng có `env -C` và `eval`, quy tắc có “!” áp dụng vượt ra ngoài tệp của chính chúng và thao tác ghi qua `tee`. Ngoài ra, các phiên bản này sửa lỗi lộ bí mật trong đầu ra `/mcp` và lộ token trong lỗi plugin. Hãy kiểm tra số phiên bản, cập nhật lên bản phát hành mới nhất và chạy thử nghiệm với tệp kiểm tra ở phần trên. Thông báo từ chối nêu tên quy tắc cho thấy quy tắc chặn đã hoạt động trong lần thử nghiệm này. Chỉ thấy quy tắc trong cài đặt thì chưa đủ để xác minh rằng nó hoạt động.

<div class="section" role="doc-bibliography" aria-label="Sources">

### Nguồn

- Claude Code, nhật ký thay đổi chính thức (các mục cho 2.1.268, 2.1.269, 2.1.270): <https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md>
- Claude Code, ngày phát hành phiên bản trên npm: <https://www.npmjs.com/package/@anthropic-ai/claude-code>
- Claude Code, tài liệu về quyền (cú pháp deny/ask/allow): <https://code.claude.com/docs/en/permissions>
- Claude Code, các bản phát hành trên GitHub: <https://github.com/anthropics/claude-code/releases>

</div>





Để tiếp tục làm việc với các mô hình, bạn có thể truy cập [Ailoot](https://ailoot.ai/).

## Câu hỏi thường gặp

### Kiểm tra quy tắc deny mà không lộ bí mật thật thế nào?

Tạo tệp chứa văn bản vô hại, chặn Read với tệp đó, khởi động lại phiên rồi yêu cầu đọc. Kết quả phải từ chối và chỉ ra quy tắc. Không dùng .env thật cho phép thử có thể thất bại.

### Một lần chặn thành công có chứng minh toàn bộ quyền đều an toàn không?

Không. Nó chỉ xác minh tệp và đường truy cập đã thử. Xem quy tắc trong /permissions rồi thử các đường và trường hợp khác mà bạn dựa vào, kể cả cách viết đường dẫn qua symlink khi có liên quan.


## Ailoot · Công ty và danh mục dự án của công ty

Ailoot dựa trên kinh nghiệm vận hành tích lũy, cơ sở khách hàng lớn, dịch vụ ổn định và việc kiểm soát KPI liên tục.

Công ty và danh mục dự án của công ty: hàng triệu khách hàng; doanh số hàng tỷ mỗi tháng.

Ailoot áp dụng kinh nghiệm vận hành này để cung cấp quyền truy cập API vào các tính năng AI trong sản phẩm của khách hàng, tác tử, ứng dụng và quy trình tự động hóa.
