- Đã phát hiện một lỗ hổng thực thi mã từ xa nghiêm trọng trong các phiên bản cũ của OpenCode, cho phép thực thi mã tùy ý mà không cần xác thực
- Các phiên bản trước v1.1.10 tự động khởi chạy máy chủ HTTP, và máy chủ này cho phép thực thi lệnh tùy ý, đọc tệp và tạo phiên terminal mà không có quy trình xác thực
- Trước v1.0.216, chỉ cần truy cập một trang web cũng có thể khiến mã được thực thi trong môi trường cục bộ của người dùng
- Ở phiên bản mới nhất (v1.1.10), máy chủ đã bị vô hiệu hóa theo mặc định, nhưng khi được bật thì vẫn không có xác thực
- Lỗ hổng này đã được đăng ký với mã CVE-2026-22812, và nhà phát triển cũng như người dùng cần cập nhật và kiểm tra cấu hình ngay lập tức
Tổng quan lỗ hổng
- OpenCode là một trợ lý lập trình AI mã nguồn mở; trước v1.1.10, khi chạy sẽ tự động khởi động máy chủ HTTP (cổng mặc định 4096+)
- Máy chủ cung cấp các endpoint như
POST /session/:id/shell, POST /pty, GET /file/content
- Không có quy trình xác thực, nên mọi client có thể kết nối đều có thể thực thi mã với quyền của người dùng
- Khi máy chủ chạy, không có chỉ báo trực quan cho người dùng, khiến khó nhận biết việc hệ thống đang bị phơi lộ
- Chính sách CORS được hardcode thành
*.opencode.ai, nên các trang được phục vụ từ opencode.ai hoặc tên miền phụ có thể truy cập API của máy chủ
- Nếu tên miền đó bị xâm phạm hoặc tồn tại lỗ hổng XSS, mọi người dùng đang bật máy chủ đều có thể trở thành mục tiêu tấn công
Vector tấn công
- Trước v1.0.216: bất kỳ trang web nào cũng có thể thực thi mã trên máy cục bộ của người dùng đang chạy OpenCode
- Trước v1.1.10: tiến trình cục bộ hoặc trang localhost có thể thực thi mã mà không cần xác thực
- Ở mọi phiên bản khi máy chủ được bật:
- Tiến trình cục bộ và trang localhost có thể thực thi mã mà không cần xác thực
- Khi dùng cờ
--mdns, mọi thiết bị trong mạng cục bộ đều có thể truy cập
- Không có chỉ báo cho biết máy chủ đang chạy, nên người dùng không nhận ra trạng thái bị phơi lộ
- Có thể thực thi mã từ tên miền opencode.ai hoặc các tên miền phụ
Ví dụ tấn công (Proof of Concept)
- Tấn công cục bộ: khi máy chủ đang chạy, một tiến trình cục bộ có thể dùng lệnh
curl để tạo phiên rồi thực thi lệnh id > /tmp/pwned.txt
- Tấn công qua trình duyệt (trước v1.0.216): một trang web có thể gửi yêu cầu
fetch đến máy chủ cục bộ để chuyển lệnh, tải xuống và thực thi script từ xa
- Đã xác nhận hoạt động trên Firefox; Chrome có thể hiển thị hộp thoại xác nhận do cơ chế bảo vệ truy cập mạng cục bộ
Cách ứng phó cho người dùng
- Kiểm tra phiên bản bằng
opencode --version rồi cập nhật lên v1.1.10 hoặc mới hơn
- Kiểm tra trong tệp cấu hình xem các mục
server.port hoặc server.hostname có đang được bật hay không
- Không sử dụng cờ
--mdns (vì sẽ bind vào 0.0.0.0 và phơi lộ ra toàn bộ mạng)
- Nếu buộc phải dùng máy chủ, hãy tránh truy cập opencode.ai và các tên miền phụ
- Cần nhận thức rằng khi máy chủ được bật, các tiến trình cục bộ có thể truy cập mà không cần xác thực
Lịch công bố
- 2025-11-17: Báo cáo lần đầu qua email, không có phản hồi
- 2025-12-27: Gửi GitHub Security Advisory, không có phản hồi
- 2025-12-29: Một người dùng khác công khai báo cáo
- 2025-12-30: Áp dụng giới hạn CORS trong v1.0.216
- 2026-01-09: Vô hiệu hóa máy chủ theo mặc định trong v1.1.10
- 2026-01-11: Công bố toàn bộ
Biện pháp được khuyến nghị
- Giới hạn CORS về mức tối thiểu cần thiết (đã áp dụng trong v1.0.216)
- Vô hiệu hóa máy chủ theo mặc định (đã áp dụng trong v1.1.10)
- Thêm quy trình xác thực cho mọi yêu cầu đến máy chủ
- Cung cấp chỉ báo rõ ràng cho người dùng khi máy chủ đang chạy
- Ghi rõ trong tài liệu rằng tùy chọn
--mdns sẽ bind vào 0.0.0.0
- Áp dụng TLS cho giao tiếp mạng
- Công bố chính thức GitHub Security Advisory và CVE-2026-22812
- Tăng cường giám sát email báo cáo bảo mật và thông báo GHSA
- Làm rõ mối quan hệ tin cậy giữa maintainer OpenCode, opencode.ai và người dùng
Tham khảo
- CVE: CVE-2026-22812
- Gói bị ảnh hưởng: npm
opencode-ai
- Thông tin mới nhất và liên hệ: cy.md
1 bình luận
Ý kiến trên Hacker News
Với tư cách là người duy trì, tôi thừa nhận đã không xử lý tốt phản hồi đối với báo cáo bảo mật lần này
Lượng sử dụng tăng quá nhanh khiến các issue bùng nổ, và trong tuần này tôi dự định gặp các chuyên gia để thúc đẩy chương trình bug bounty và kiểm toán bảo mật
Điều quan trọng hơn là mọi thành viên trong nhóm hiểu và thực hành hướng dẫn OWASP về Insecure Design
Vì OpenCode là một coding agent mã nguồn mở khá nổi tiếng, khả năng nó đã bị khai thác là có thật
Tôi nghĩ ngay từ bây giờ cần chạy mô hình trong môi trường sandbox như gVisor
Nếu không phản ứng nhanh, sẽ có thêm nhiều kẻ tấn công nhắm tới các lỗ hổng RCE khác
Tôi cũng tò mò không biết họ có tham khảo những thứ như nguyên tắc vận hành tổ chức kiểu vô chính phủ hay không
Nhiều người đang chạy các công cụ như OpenCode trong môi trường cục bộ mà không tách biệt quyền hạn
Các plugin cũng mặc định được thiết kế với giả định có quyền truy cập không giới hạn, và mức tiêu thụ tài nguyên cũng cao
Tối thiểu nên chạy trong dev-container hoặc VM, rồi dùng SSHFS hoặc Samba để chỉ gắn những tệp cần thiết
Nếu ngại phiền, dùng VPS 5 đô mỗi tháng cũng được
Khi chạy máy chủ bằng qemu, tôi khuyên dùng quickemu
Tính năng SSH remote của zed cũng hữu ích, nên có thể dùng cùng Claude Code hoặc OpenCode
Bản sửa CORS đã chặn được việc các website bên ngoài lợi dụng, nhưng về bản chất, vấn đề là cấu trúc cho phép thực thi mã từ localhost
Neovim mặc định dùng domain socket, còn SSH daemon của VS Code có quy trình xác thực
Một máy chủ cục bộ thực thi đầu vào từ client mà không có xác thực là lỗ hổng LCE (Local Code Execution),
và khi có thể bị truy cập thông qua yêu cầu từ trình duyệt thì nó bị nâng cấp thành RCE (Remote Code Execution)
Thật sốc khi họ đưa một HTTP endpoint có thể RCE không cần xác thực vào công cụ CLI, rồi còn thêm cả bỏ qua CORS
Lịch trình công bố lỗ hổng là một vấn đề
Nó đã được báo cáo vào 2025-11-17, nhưng dù liên hệ nhiều lần vẫn không có phản hồi
Xem bình luận trên GitHub issue
Dù máy chủ mặc định là tắt, một khi được bật lên thì vẫn rất nghiêm trọng
Từ localhost, bất kỳ trang web nào cũng có thể thực thi mã, và còn có thể chạy tiến trình cục bộ mà không cần xác thực
Không có cả chỉ báo nào cho người dùng biết máy chủ có đang chạy hay không
Ứng dụng TUI thường được tin cậy vì chúng không làm những chuyện như thế này, nên vụ này đã làm tổn hại nghiêm trọng niềm tin đó
Việc OpenCode được YC (Y Combinator) hậu thuẫn thật đáng ngạc nhiên
Tôi cứ nghĩ YC sẽ thúc đẩy một văn hóa bảo mật tốt hơn
Có thể xem thêm ở bình luận này
Tôi cứ tưởng OpenCode là một dự án tình nguyện, nhưng hóa ra lại là dự án kiểu công ty được các nhà đầu tư lớn hậu thuẫn
Tôi đã ngừng dùng nó vì họ cứ tiếp tục thêm tính năng mà bỏ bê bảo trì cốt lõi
Mục tiêu là dùng nhiều mô hình cùng lúc, nhưng việc chia sẻ context không hiệu quả nên tính thực dụng khá thấp
Giờ tôi đang dùng song song Claude Code và Codex
Dù vậy, nhu cầu về một nền tảng mở có thể tích hợp nhiều mô hình vẫn rất lớn
ampcode cho phép tạo script đơn giản miễn phí, còn Crush+GLM bám khá tốt theo kế hoạch của Claude hay Codex
Ban đầu tôi thích Aider, nhưng do gần như không được bảo trì nên thường xuyên gặp vấn đề
Tôi đang định cài OpenCode thì thấy vụ này nên bắt đầu chần chừ
Thật ngạc nhiên khi lại thiếu đến vậy các CLI LLM assistant mã nguồn mở không phụ thuộc vào một mô hình cụ thể