
Đăng nhập MCP của OpenCode đã đưa URL của một máy chủ cho PowerShell — và không có CVE nào để gắn cờ điều đó
- MoonshotMỚIMoonshotAI: Kimi K3.1 Pro2026-10-2455Trí tuệ
- OrcaMỚIOrcaCyber: DeepSeek V4.1 Flash Abliterated2026-10-23$0.70 / $1.60 trên 1 triệu token · 199 tok/s
- OrcaMỚIOrca: OrcaCyber Ultra 1.02026-10-17$5.00 / $10.00 trên 1 triệu token · 14 tok/s
- deepseekMỚIDeepSeek: DeepSeek V4.1 Flash 10172026-10-1745Trí tuệ
- DeepSeekMỚIDeepSeek: DeepSeek V4.1 Flash2026-10-1740Trí tuệ
- OrcaOrca: OrcaCyber Zero 1.52026-10-10$3.00 / $7.50 trên 1 triệu token · 150 tok/s
- openaiOpenAI: GPT-6.1 Sol2026-09-2952Trí tuệ
- anthropicAnthropic: Claude Sonnet 5.52026-09-2856Trí tuệ
- typesafeTypeSafe: Jev 1.132026-09-24$0.04 / $0.00 trên 1 triệu token · 1062 tok/s
- OpenAIOpenAI: GPT-6 Luna2026-09-2238Trí tuệ
- OpenAIOpenAI: GPT-6 Sol2026-09-2248Trí tuệ
- AnthropicAnthropic: Claude Opus 5.52026-09-2258Trí tuệ
- xAIGrok 4.72026-09-2146Trí tuệ
- OrcaOrca: OrcaCyber Zero 1.02026-09-17$3.00 / $7.50 trên 1 triệu token · 159 tok/s
- OrcaOrca: OrcaVerify Text 1.02026-09-16$2.00 / $0.00 trên 1 triệu token · 1906 tok/s
- OpenAIOpenAI: GPT-6 Astra2026-09-0453Trí tuệ77Lập trình
- GoogleGoogle: Gemini 3.8 Flash2026-09-0241Trí tuệ76Lập trình
- AlibabaQwen: Qwen3.8 Max (0902)2026-09-0245Trí tuệ76Lập trình
- AnthropicAnthropic: Claude Fable 5.12026-09-0153Trí tuệ82Lập trình
- TencentTencent: Hy4 preview2026-08-28$0.83 / $2.50 trên 1 triệu token · 48 tok/s
Vào ngày 19 tháng 10 năm 2026, Pillar Security đã công bố một lỗ hổng thực thi mã từ xa trong OpenCode, agent lập trình mã nguồn mở do Anomaly duy trì: một máy chủ Model Context Protocol từ xa mà một nhà phát triển đã cấu hình có thể chạy mã tùy ý trên chính máy của nhà phát triển đó trong quá trình đăng nhập MCP OAuth, mà không có lời nhắc đồng ý nào xen vào. Lỗi chỉ giới hạn ở Windows và Windows Subsystem for Linux, nơi OpenCode đưa URL đăng nhập do máy chủ cung cấp cho một lệnh PowerShell mà không thoát ký tự URL đó. Pillar xác định phạm vi bị ảnh hưởng là 1.0.137 đến 1.18.32. Anomaly đã khắc phục lỗi này trong 1.18.33, được phát hành lên npm vào 28 tháng 9 năm 2026, và không yêu cầu cấp CVE cũng như không công bố khuyến cáo nào — vì vậy sẽ không có gì trong nguồn cấp dữ liệu lỗ hổng thông thường cho một nhóm bị ảnh hưởng biết phải nâng cấp. Pillar báo cáo không có bằng chứng cho thấy lỗ hổng từng bị sử dụng trong một cuộc tấn công. Đây là một bản ghi trong kho lưu trữ sự cố AI, nơi mỗi mục có nguồn, mức độ nghiêm trọng, cấp độ tin cậy và cờ tranh chấp riêng.
Lỗ hổng thực sự là gì
Khi một ứng dụng khách MCP kết nối tới một máy chủ từ xa muốn được cấp quyền, nó sẽ chạy một bắt tay khám phá OAuth. Máy chủ phản hồi bằng mã 401 và một thách thức trỏ đến các tài liệu khám phá của nó, và một trường trong các tài liệu đó — authorization_endpoint — cho ứng dụng khách biết nơi gửi người dùng đến để đăng nhập. Đây là một chuỗi dạng tự do, và bên đang được xác thực chính là bên lựa chọn nó.
Trong OpenCode 1.18.32, chuỗi đó đã đi từ đường truyền đến một shell. Pillar đã lần theo đường đi từ tài liệu khám phá của máy chủ qua MCP SDK vào oauth-provider.ts, mcp/index.ts và browser.ts, kết thúc tại open, gói nhỏ mà OpenCode dùng để khởi chạy trình duyệt. Không có gì trên đường đi đó kiểm tra scheme của URL, và không có gì so sánh nó với origin của máy chủ mà lập trình viên đã cấu hình. Quá trình bắt tay là tự động theo thiết kế — mục đích chính là đưa bạn đến trang đăng nhập mà không buộc bạn phải sao chép URL — nên không có bước phê duyệt nào nằm giữa câu trả lời của máy chủ và trình khởi chạy.
The launcher is where it broke. On macOS and Linux, open passes the address as an argument vector and no shell is involved. On Windows, version 10.1.2 of open — the version every affected OpenCode release pinned — builds a PowerShell command, base64-encodes it and runs it with powershell -EncodedCommand. Pillar quotes the source: the application name is escaped on one line, and the target URL is not. PowerShell evaluates $(...) subexpressions inside double-quoted strings, so an address of the form https://evil.test/$([IO.File]::WriteAllText('C:\Users\Public\pwned.txt','RCE')) runs before the browser launch fails. OpenCode discards that failure.
Hai đặc điểm khiến nó dễ bị bỏ sót. Payload không chứa dấu cách, nên việc chuẩn hóa URL vẫn giữ nguyên nó, và nó là một địa chỉ https thông thường về mặt cú pháp. Và máy chủ không nhất thiết phải độc hại khi được cấu hình: Pillar lưu ý rằng một vụ xâm phạm về sau, một mục đăng ký bị chiếm đoạt, một tên miền typosquat hoặc một tên miền hết hạn đều sẽ biến một mục cấu hình đáng tin cậy thành cơ chế phát tán.
Ai đã bị phơi nhiễm?
Nhóm người dùng bị ảnh hưởng là người dùng Windows và WSL đang chạy OpenCode với máy chủ MCP từ xa đã được cấu hình. Pillar mô tả OpenCode có khoảng 3 triệu lượt tải npm hằng tuần và 211.000 sao GitHub; báo cáo của Infosecurity Magazine đưa số sao ở mức hơn 218.000. Không con số nào trong hai con số đó là số lượng cài đặt bị ảnh hưởng, và chưa ai công bố một con số như vậy.
Điểm kích hoạt là điểm duy nhất mà hai bản mô tả chính khác nhau, và nó quan trọng đối với cả rủi ro lẫn mức độ nghiêm trọng. Pillar mô tả việc khai thác là không cần thêm tương tác hay sự đồng ý của người dùng. The Hacker News, trong báo cáo ngày 22 tháng 10, nói rằng bước trình duyệt chỉ chạy khi nhà phát triển bắt đầu đăng nhập — bằng cách chạy opencode mcp auth hoặc thực hiện yêu cầu tương ứng — và rằng chỉ cấu hình máy chủ, hoặc mở một phiên, thì không đạt tới bước đó. Dù sao thì nhà phát triển cũng không làm gì bất thường; bắt đầu xác thực với một máy chủ đã có trong cấu hình là việc thường lệ. Nhưng "không tương tác" và "một tương tác thường lệ" là những khẳng định khác nhau, và sự khác biệt đó ảnh hưởng trực tiếp đến điểm số.
Bản sửa lỗi đến và được mô tả như một đợt tái cấu trúc
Pillar đã báo cáo riêng lỗ hổng thông qua GitHub Security Advisory vào ngày 29 tháng 8 năm 2026, kèm theo đầy đủ tài liệu tái hiện. Vào ngày 25 tháng 9, họ tiếp tục trao đổi bên ngoài luồng thảo luận của advisory; Anomaly xác nhận báo cáo đã đến được nhóm của mình và trả lời rằng các máy chủ MCP độc hại nằm ngoài mô hình mối đe dọa của họ. Cùng ngày, pull request #51414 — được hợp nhất dưới dạng commit 29f07e0c — đã được đưa vào. Nó được mô tả là hợp nhất tám điểm gọi khởi chạy trình duyệt thành một hàm trợ giúp. Phiên bản 1.18.33 đã có trên npm ba ngày sau đó, vào ngày 28 tháng 9.
Bản vá có ba lớp. Phụ thuộc open đã chuyển sang 11.0.4, gói này bao quanh mục tiêu bằng dấu nháy đơn, và PowerShell không mở rộng bất cứ thứ gì bên trong dấu nháy đơn. Một hàm trợ giúp openUrl() mới từ chối các lược đồ không phải HTTP(S). Một kiểm tra lược đồ đã được đưa vào redirectToAuthorization chính nó, tại ranh giới mà Pillar đã nêu trong báo cáo của mình. Cả pull request lẫn ghi chú phát hành đều không đề cập đến lỗ hổng bảo mật, và Anomaly không yêu cầu CVE nào.
The Hacker News đưa tin rằng chính sách bảo mật đã công bố của Anomaly nêu rằng các máy chủ MCP do người dùng cấu hình nằm "ngoài ranh giới tin cậy của chúng tôi", và rằng công ty đã phát hành các khuyến cáo về những lỗ hổng thực thi mã OpenCode khác trong năm nay, bao gồm một lỗ hổng được khắc phục vào tháng 8. Cách Pillar thuật lại phản hồi mà mình nhận được còn thẳng thừng hơn: "chúng tôi đã cập nhật phần phụ thuộc, nhưng nhìn chung, việc cố xử lý một máy chủ MCP độc hại nằm ngoài mô hình mối đe dọa của chúng tôi."

Đọc theo trình tự, dòng thời gian đặt lỗi OpenCode ở cuối một chuỗi dài năm năm chứ không phải ở điểm khởi đầu của nó. Khiếm khuyết đã tạo ra nó vốn đã công khai, và bản sửa lỗi của nó cũng đã được phát hành, trước khi dòng mã sử dụng nó được viết.
Tại sao xác thực scheme sẽ không ngăn được nó
Biện pháp khắc phục đã được thống nhất cho loại lỗi này là xác thực scheme URL: chặn các scheme lạ, cho phép http và https, thế là xong. Đó là những gì MCP TypeScript SDK cung cấp và là những gì OpenCode đã thêm trong 1.18.33. Payload của Pillar vượt qua mọi kiểm tra đó, vì nó là https. Danh sách từ chối của SDK chặn javascript:, data: và vbscript:; một danh sách cho phép http/https chặt chẽ hơn đã được đề xuất trong pull request #841 của SDK vào tháng 8 năm 2025 và bị đóng mà không merge, trong khi pull request #877 phát hành danh sách từ chối ba scheme trong v1.17.4 — và Pillar nói rằng đó vẫn là chính sách trong SDK 1.32.0 khi nó công bố. Điều thực sự bịt lỗ hổng trong OpenCode là việc nâng cấp dependency, chứ không phải các kiểm tra trông giống bản sửa bảo mật.
Lịch sử cho thấy không nên coi đây là một sơ suất của riêng một dự án. Gói open đã mang cảnh báo trong README từ năm 2021 rằng nó không đưa ra bảo đảm an ninh nào và việc làm sạch đầu vào là việc của bên gọi. Vào tháng 10 năm 2020, một người dùng đã mở issue #202 báo cáo rằng một URL chứa dấu đô la bị mất một phần trên WSL 2 — việc mở rộng chuỗi, được báo cáo như một phiền toái về liên kết hỏng. Vào tháng 10 năm 2023, một kỹ sư Adobe đã mở issue #323, “OS command injection trên Windows khi mở URL”, cùng một proof of concept một dòng: open('https://$(calc.exe)'). Người bảo trì đã trích dẫn README và nói rằng các pull request cải thiện việc thoát ký tự đều được hoan nghênh; issue đã bị đóng với lý do không có kế hoạch xử lý, ba ngày trước khi open 11.0.0 vẫn phát hành bản sửa thoát ký tự vào ngày 15 tháng 11 năm 2025. OpenCode đã viết lệnh gọi mở trình duyệt của mình vào ngày 7 tháng 12 năm 2025, ba tuần sau khi phiên bản open đã được sửa ra đời, dựa trên một bản ghim đã cũ vài tháng.
Trong những tháng trước khi lời kêu gọi đó được viết ra, hệ sinh thái MCP đã ghi nhận ba CVE trên cùng một sink hoặc cùng một trường: CVE-2025-6514 trong mcp-remote (CVSS 9.6, được JFrog công bố ngày 9 tháng 7 năm 2025), CVE-2025-58062 trong openmcp-client, và CVE-2025-10619 trong sequa-mcp. Pillar đối chiếu với các client không bao giờ dựng lệnh shell từ một chuỗi từ xa: nó nêu tên gemini-cli, Claude Code, github-mcp-server và mcp-gateway của Docker là những công cụ truyền URL dưới dạng một vector đối số, khiến câu hỏi về việc chuỗi chứa gì không còn là yếu tố then chốt.

Điều gì đã được xác lập, và điều gì chưa.
Hồ sơ này được cơ quan lưu trữ xếp hạng độ tin cậy A, và các bài đưa tin đằng sau nó vẫn vững. Infosecurity Magazine đăng ngày 20 tháng 10 với bài phỏng vấn riêng của mình với Eilon Cohen của Pillar; The Hacker News đăng bài tường thuật riêng vào ngày 22 tháng 10; DKCERT, CERT quốc gia của Đan Mạch, đã tóm tắt phát hiện này vào ngày 21 tháng 10, dẫn nguồn Infosecurity; và phòng nghiên cứu của Cloud Security Alliance đã công bố một phân tích bổ sung một lưu ý thực chất duy nhất dưới đây. Không bên nào trong số này là bên đưa tin gốc, và họ đều nhất trí về cơ chế, các phiên bản và bản vá âm thầm. Bản thân Anomaly không công bố bất cứ điều gì về lỗ hổng này.
Đã được xác lập, ghi nhận chính thức:
• Lỗi, cơ chế gây lỗi và phạm vi ảnh hưởng trên các nền tảng. Pillar xác định các dòng mã nguồn cụ thể và bản sửa lỗi có thể thấy trong bản diff công khai từ 1.18.32 đến 1.18.33; hai bản tin độc lập mô tả cùng một luồng dữ liệu.
• Phạm vi bị ảnh hưởng, từ 1.0.137 đến 1.18.32, và bản phát hành đã khắc phục, 1.18.33, được phát hành ngày 28 tháng 9 năm 2026.
• Rằng không tồn tại CVE nào và không có bản khuyến cáo nào. Điều này có thể kiểm chứng được, và đây là sự thật then chốt đối với những người phòng thủ.
• Rằng không có hoạt động khai thác nào được báo cáo. Pillar cho biết họ không thấy dấu hiệu sử dụng trong các cuộc tấn công, và The Hacker News lưu ý rằng không có chỉ dấu xâm phạm nào được công bố. Việc không có chỉ dấu được công bố không phải bằng chứng cho sự vắng mặt, và nếu không có dữ liệu telemetry từ nhà cung cấp thì không thể xác nhận cách hiểu nào.
Chưa được xác lập, hoặc đang có mâu thuẫn:
• Con số 9.8. Con số đó là điểm CVSS v3.1 do Pillar đề xuất, không phải điểm chính thức: không có CVE thì không có điểm NVD và không có điểm từ nhà cung cấp. Ghi chú nghiên cứu của Cloud Security Alliance chỉ ra rằng 9.8 giả định không có tương tác của người dùng, và rằng nếu bài tường thuật của The Hacker News về tác nhân kích hoạt là đúng, thì một xếp hạng yêu cầu tương tác của người dùng — khoảng 8.8 — sẽ phù hợp hơn. Bài viết này không giải quyết điều đó; thẻ mức độ nghiêm trọng cao của chính kho lưu trữ là một phân loại, không phải điểm số.
• Ngày công bố. Báo cáo của Pillar ghi ngày 19 tháng 10 năm 2026 ở phần đầu, và cả hai bản tin đều sử dụng ngày đó; dòng thời gian công bố ở cuối báo cáo của Pillar liệt kê ngày công bố là 4 tháng 10. Kho lưu trữ ghi nhận ngày 19 tháng 10 với độ chính xác đến ngày.
• Quy mô nhóm đối tượng bị phơi nhiễm. Chưa có con số nào được công bố. Số liệu tải xuống và lượt gắn sao ở trên là chỉ số của kho lưu trữ, không phải số lượt cài đặt.
• Liệu có bất kỳ máy nào thực sự bị xâm phạm hay không. Không có thông tin nào được công bố chứng minh điều đó, và hồ sơ không ghi nhận tổn hại thực sự nào.

Có gì thay đổi và cần làm gì
Biện pháp khắc phục là kiểm tra phiên bản, vì không có cách nào khác cho bạn biết. OpenCode 1.18.33 trở lên đã được sửa. Các cài đặt bị ảnh hưởng phải được tìm ra bằng cách kiểm kê trực tiếp gói: khuyến nghị của Pillar là kiểm kê chính OpenCode thay vì chờ một nguồn cấp dữ liệu, và ghi chú của Cloud Security Alliance đề xuất truy vấn opencode-ai phiên bản gói, vì không có định danh nào để nguồn cấp dữ liệu đối chiếu. Các nhóm không thể nâng cấp và đang chạy Windows hoặc Windows Subsystem for Linux nên xóa các máy chủ MCP từ xa mà họ chưa kiểm tra khỏi cấu hình OpenCode của mình; opencode mcp list hiển thị những máy chủ hiện có.
Đối với bất kỳ ai đang duy trì một máy khách MCP, hướng dẫn của Pillar hẹp hơn lời khuyên thông thường: truyền URL dưới dạng một vectơ đối số và không bao giờ xây dựng dòng lệnh từ một chuỗi từ xa, ràng buộc khám phá OAuth với origin của máy chủ mà người dùng đã cấu hình, và coi tài liệu khám phá, siêu dữ liệu máy chủ và bộ mô tả công cụ là đầu vào không đáng tin cậy thay vì là cấu hình. Ghi chú của Cloud Security Alliance bổ sung các heuristic săn tìm — ví dụ, một tiến trình OpenCode sinh ra powershell.exe với -EncodedCommand, chẳng hạn — đồng thời nhấn mạnh rằng đây là các gợi ý cho kỹ thuật phát hiện, không phải các dấu hiệu xâm phạm đã được công bố.
Không phải vụ rò rỉ Console
Thông tin công bố của {{1}}Pillar{{/1}} xuất hiện vài ngày sau khi {{2}}Anomaly{{/2}} xác nhận một vụ xâm phạm riêng biệt đối với {{3}}OpenCode's{{/3}} {{4}}Console{{/4}} được lưu trữ, vụ việc có thể đã làm lộ các khóa nhà cung cấp API đã được lưu. Hai sự kiện không liên quan đến nhau, và Eilon Cohen của Pillar đã nói rõ về sự khác biệt trong cuộc phỏng vấn với Infosecurity Magazine. “Vụ xâm phạm tấn công một hệ thống cũ nằm sau một proxy khóa được lưu trữ, và làm lộ các khóa nhà cung cấp mà người dùng đã lưu ở đó,” ông nói. “Lỗ hổng mà chúng tôi báo cáo đi theo hướng ngược lại: một máy chủ MCP từ xa độc hại thực thi mã trên chính máy của nhà phát triển trong quá trình bắt tay OAuth. Mục tiêu và vị thế của kẻ tấn công đều khác.” Vụ xâm phạm Console là một bản ghi riêng trong kho lưu trữ, và hai vụ việc nên được đọc như những mục riêng biệt.
Điều liên kết chúng, theo cách diễn đạt của Cohen, chính là câu hỏi nằm bên dưới cả hai: “Bạn cho phép ai giao thông tin xác thực và đầu vào cho một công cụ lập trình AI, và công cụ đó làm gì với chúng.”
Khoảng trống công bố thông tin là phần tồn tại lâu hơn cả lỗi. Một lỗ hổng được những người phát hiện đánh giá là nghiêm trọng, được sửa trong một lần cập nhật phụ thuộc và không xuất hiện trong bất kỳ tín hiệu tự động nào mà người phòng thủ thường dựa vào sẽ khiến việc kiểm kê trực tiếp trở thành phương pháp phát hiện duy nhất — và nhà cung cấp đã không công bố bất kỳ bản tư vấn nào hướng dẫn ai đó thực hiện việc kiểm kê đó.
