3 điểm bởi GN⁺ 2026-01-13 | 1 bình luận | Chia sẻ qua WhatsApp
  • Đã 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ộ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

 
GN⁺ 2026-01-13
Ý 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

    • Thay vì chi tiền cho bug bounty hay kiểm toán, nên đầu tư vào tái tổ chức bộ máy và đào tạo nhân viên
      Đ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
    • Ban đầu tôi nhìn nhận khá tích cực, nhưng điều đáng lo là những người báo cáo lỗ hổng đã liên hệ nhiều lần mà vẫn không nhận được phản hồi
      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
    • Có vẻ dự án đã phát triển quá nhanh đến mức quản trị tổ chức giờ đây quan trọng hơn cả việc viết code
      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
    • Chẳng phải chỉ cần bảo Claude sửa vấn đề bảo mật là xong sao?
    • Thật đáng trân trọng khi họ chia sẻ tình hình một cách thẳng thắn và nhận trách nhiệm. Đó không phải việc dễ làm, nên xin cảm ơn
  • 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

    • Không biết có thể hướng dẫn cụ thể cách thiết lập dev-container hoặc VM không
    • Claude có yêu cầu quyền mỗi lần chạy, nên ở điểm này có phần an toàn hơn
    • Nếu nói về sandbox cho AI thì sprites.dev của fly.io khá ổn
      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

    • Có lẽ đã đến lúc các phòng thí nghiệm AI ngừng huấn luyện mô hình bằng code tutorial
    • Máy chủ mở toang như vậy mà chính sách CORS lại không phải “*” mới là điều còn gây ngạc nhiên hơn
    • Cũng có phản ứng cho rằng đây đúng là “đoạn code được làm chỉ bằng cảm hứng vibe”
  • 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

    • Có vẻ hiện tại các nhà phát triển đang cố gắng xử lý nghiêm túc
      Xem bình luận trên GitHub issue
    • Cũng có phản ứng đùa rằng “dạo này ai cũng đang vibe coding nên issue bảo mật là bad vibes”
  • 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 đó

    • Cũng có người hỏi tại sao riêng ứng dụng TUI lại bị xem là vấn đề
    • Một ý kiến khác cho rằng Droid của Factory là lựa chọn thay thế khá ổn
  • 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ũng có phản ứng đầy hoài nghi rằng với YC thì cuối cùng mọi thứ vẫn chỉ là tiền
    • Trước đây đã từng có trường hợp Flock, một công ty từ YC, hardcode mật khẩu tới 53 lần
      Có thể xem thêm ở bình luận này
    • Thêm nữa, thật mỉa mai khi OpenCode còn làm cả sản phẩm Auth provider
  • 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

    • Ngoài kho GitHub chính thức, còn có một dự án cạnh tranh do đội charm.sh tạo ra
    • Có lẽ người đó đang nghĩ tới các dự án như crush, roocode, kilo. Những dự án này hiện vẫn chưa có hậu thuẫn lớ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

    • Tôi khuyên dùng ampcode(liên kết) và tổ hợp Crush(liên kết) + z.ai GLM
      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
    • Cũng có ý kiến cho rằng khó hơn cả việc thêm tính năng mới là giữ được kỷ luật trong review và kiểm soát chất lượng
  • 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ể