3 คะแนน โดย GN⁺ 2026-01-13 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • พบ ช่องโหว่ Remote Code Execution ร้ายแรง ใน OpenCode เวอร์ชันเก่า ที่ทำให้สามารถรันโค้ดตามอำเภอใจได้โดยไม่ต้องยืนยันตัวตน
  • เวอร์ชันก่อน v1.1.10 จะ รัน HTTP server อัตโนมัติ และเซิร์ฟเวอร์นี้อนุญาตให้ รันคำสั่งตามอำเภอใจ อ่านไฟล์ และสร้าง terminal session ได้โดยไม่มีขั้นตอนยืนยันตัวตน
  • ก่อน v1.0.216 มีความเป็นไปได้ที่ เพียงแค่เข้าชมเว็บไซต์ ก็ทำให้โค้ดถูกรันบนสภาพแวดล้อมโลคัลของผู้ใช้ได้
  • ในเวอร์ชันล่าสุด (v1.1.10) เซิร์ฟเวอร์ถูกปิดใช้งานโดยค่าเริ่มต้นแล้ว แต่ หากเปิดใช้งานก็ยังไม่มีการยืนยันตัวตนอยู่ดี
  • ช่องโหว่นี้ถูกลงทะเบียนเป็น CVE-2026-22812 และนักพัฒนากับผู้ใช้ควรอัปเดตและตรวจสอบการตั้งค่าโดยทันที

ภาพรวมของช่องโหว่

  • OpenCode เป็น AI coding assistant แบบโอเพนซอร์ส โดยก่อน v1.1.10 เมื่อตอนรันจะเริ่ม HTTP server (พอร์ตเริ่มต้น 4096+) โดยอัตโนมัติ
    • เซิร์ฟเวอร์มี endpoint เช่น POST /session/:id/shell, POST /pty, GET /file/content
    • เนื่องจากไม่มีขั้นตอนยืนยันตัวตน ไคลเอนต์ทุกตัวที่เชื่อมต่อได้จึงสามารถ รันโค้ดด้วยสิทธิ์ของผู้ใช้ ได้
  • เมื่อเซิร์ฟเวอร์ทำงาน จะ ไม่มีตัวบ่งชี้ทางภาพ ให้ผู้ใช้เห็น ทำให้รับรู้ได้ยากว่ากำลังเปิดเผยอยู่หรือไม่
  • นโยบาย CORS ถูก hardcode เป็น *.opencode.ai ทำให้หน้าเว็บที่ให้บริการจาก opencode.ai หรือซับโดเมน สามารถเข้าถึง API ของเซิร์ฟเวอร์ได้
    • หากโดเมนนั้นถูกเจาะหรือมีช่องโหว่ XSS ผู้ใช้ทั้งหมดที่เปิดเซิร์ฟเวอร์อยู่ก็อาจตกเป็นเป้าหมายการโจมตีได้

เวกเตอร์การโจมตี

  • ก่อน v1.0.216: เว็บไซต์ใดก็ได้ สามารถรันโค้ดบนเครื่องโลคัลของผู้ใช้ที่กำลังเปิด OpenCode อยู่ได้
  • ก่อน v1.1.10: local process หรือหน้า localhost สามารถรันโค้ดได้โดยไม่ต้องยืนยันตัวตน
  • ในทุกเวอร์ชันหากเปิดใช้งานเซิร์ฟเวอร์:
    • local process และ หน้า localhost สามารถรันโค้ดได้โดยไม่ต้องยืนยันตัวตน
    • หากใช้แฟลก --mdns จะทำให้ อุปกรณ์ทั้งหมดในเครือข่ายโลคัล เข้าถึงได้
    • ไม่มีตัวบ่งชี้ว่าเซิร์ฟเวอร์กำลังทำงานอยู่ ทำให้ผู้ใช้ไม่รู้ว่าตัวเองกำลังเปิดเผยอยู่
    • สามารถรันโค้ดได้จาก โดเมน opencode.ai หรือซับโดเมน

ตัวอย่างการโจมตี (Proof of Concept)

  • การโจมตีแบบโลคัล: เมื่อเซิร์ฟเวอร์กำลังทำงาน local process สามารถใช้คำสั่ง curl เพื่อสร้างเซสชัน แล้วรันคำสั่ง id > /tmp/pwned.txt ได้
  • การโจมตีผ่านเบราว์เซอร์ (ก่อน v1.0.216): หน้าเว็บสามารถส่งคำขอ fetch ไปยังเซิร์ฟเวอร์โลคัลเพื่อส่งคำสั่ง และดาวน์โหลดกับรันสคริปต์ระยะไกลได้
    • ยืนยันการทำงานบน Firefox แล้ว ส่วน Chrome อาจแสดงหน้าต่างยืนยันผู้ใช้เนื่องจากมีการป้องกันการเข้าถึงเครือข่ายโลคัล

แนวทางรับมือสำหรับผู้ใช้

  • ตรวจสอบเวอร์ชันด้วย opencode --version แล้ว อัปเดตเป็น v1.1.10 ขึ้นไป
  • ตรวจสอบในไฟล์ตั้งค่าว่ามีการเปิดใช้งาน server.port หรือ server.hostname หรือไม่
  • หลีกเลี่ยงการใช้แฟลก --mdns (จะ bind กับ 0.0.0.0 และเปิดเผยทั้งเครือข่าย)
  • หากจำเป็นต้องใช้เซิร์ฟเวอร์ ห้ามเข้า opencode.ai และซับโดเมน
  • ควรตระหนักว่าเมื่อเปิดเซิร์ฟเวอร์แล้ว local process สามารถเข้าถึงได้โดยไม่ต้องยืนยันตัวตน

ไทม์ไลน์การเปิดเผย

  • 2025-11-17: รายงานครั้งแรกทางอีเมล, ไม่มีการตอบกลับ
  • 2025-12-27: ส่ง GitHub Security Advisory, ไม่มีการตอบกลับ
  • 2025-12-29: ผู้ใช้อีกคนเผยแพร่รายงานสู่สาธารณะ
  • 2025-12-30: ใช้ ข้อจำกัด CORS ใน v1.0.216
  • 2026-01-09: ใน v1.1.10 มีการ ปิดเซิร์ฟเวอร์โดยค่าเริ่มต้น
  • 2026-01-11: เปิดเผยข้อมูลทั้งหมด

มาตรการที่แนะนำ

  • จำกัด CORS ให้เหลือเฉพาะโดเมนเท่าที่จำเป็น (ใช้แล้วใน v1.0.216)
  • ปิดการทำงานของเซิร์ฟเวอร์โดยค่าเริ่มต้น (ใช้แล้วใน v1.1.10)
  • เพิ่ม ขั้นตอนยืนยันตัวตน ให้กับทุกคำขอที่ส่งมายังเซิร์ฟเวอร์
  • เมื่อเซิร์ฟเวอร์ทำงาน ควร แสดงตัวบ่งชี้ที่ชัดเจน ให้ผู้ใช้เห็น
  • ระบุในเอกสารให้ชัดว่าออปชัน --mdns จะ bind กับ 0.0.0.0
  • ใช้ TLS กับการสื่อสารผ่านเครือข่าย
  • เผยแพร่ GitHub Security Advisory และ CVE-2026-22812 อย่างเป็นทางการ
  • เพิ่มการ เฝ้าติดตาม อีเมลสำหรับรายงานด้านความปลอดภัยและการแจ้งเตือน GHSA
  • ทำให้ ความสัมพันธ์ด้านความเชื่อถือ ระหว่างผู้ดูแล OpenCode, opencode.ai และผู้ใช้ มีความชัดเจน

อ้างอิง

  • CVE: CVE-2026-22812
  • แพ็กเกจที่ได้รับผลกระทบ: npm opencode-ai
  • ข้อมูลล่าสุดและช่องทางติดต่อ: cy.md

1 ความคิดเห็น

 
GN⁺ 2026-01-13
ความเห็นจาก Hacker News
  • ในฐานะผู้ดูแล ยอมรับว่ารับมือกับ การตอบสนองต่อรายงานด้านความปลอดภัย ครั้งนี้ได้ไม่ดีพอ
    การใช้งานเพิ่มขึ้นอย่างรวดเร็วจนมี issue ถาโถมเข้ามา และสัปดาห์นี้มีแผนจะพบผู้เชี่ยวชาญเพื่อเดินหน้า โปรแกรม bug bounty และการตรวจสอบความปลอดภัย

    • แทนที่จะใช้เงินไปกับ bug bounty หรือการตรวจสอบ ควรลงทุนกับ การจัดระเบียบองค์กรใหม่และการอบรมพนักงาน มากกว่า
      สิ่งสำคัญกว่าคือให้ทุกคนในทีมเข้าใจและนำ OWASP Insecure Design Guide ไปปฏิบัติ
    • ตอนแรกมองในแง่บวก แต่สิ่งที่น่ากังวลคือ ผู้รายงานช่องโหว่ติดต่อมาหลายครั้งแต่ไม่ได้รับคำตอบ
      เนื่องจาก OpenCode เป็นโอเพนซอร์ส coding agent ที่มีชื่อเสียง จึงเป็นไปได้ว่าอาจถูกนำไปใช้โจมตีแล้ว
      คิดว่าตอนนี้อย่างน้อยก็ควรรันโมเดลใน สภาพแวดล้อม sandbox อย่าง gVisor
      ถ้าไม่ตอบสนองให้เร็วพอ ก็อาจมีผู้โจมตีที่มุ่งหาช่องโหว่ RCE เพิ่มขึ้น
    • โปรเจกต์โตเร็วเกินไปจนดูเหมือนว่า การบริหารองค์กร มาถึงจุดที่สำคัญกว่าการพัฒนาโค้ดแล้ว
      เลยสงสัยว่าอ้างอิง หลักการบริหารองค์กรแบบอนาธิปไตย อะไรอยู่ด้วยหรือเปล่า
    • ก็แค่บอก Claude ให้แก้ปัญหาความปลอดภัยไม่ใช่เหรอ?
    • การแชร์สถานการณ์อย่างตรงไปตรงมาและพร้อมรับผิดชอบแบบนี้เป็นสิ่งที่น่าชื่นชม ขอบคุณมาก เพราะไม่ใช่เรื่องง่าย
  • หลายคนรันเครื่องมืออย่าง OpenCode ในเครื่องตัวเองแบบไม่มีการแยกสิทธิ์
    ตัวปลั๊กอินเองก็ออกแบบมาโดยตั้งต้นว่ามีสิทธิ์เข้าถึงได้ไม่จำกัด และยังใช้ทรัพยากรสูงด้วย
    อย่างน้อยควรรันใน dev-container หรือ VM และเชื่อมเฉพาะไฟล์ที่ต้องใช้ผ่าน SSHFS หรือ Samba
    ถ้าขี้เกียจ ก็ใช้ VPS เดือนละ 5 ดอลลาร์ก็ได้

    • อยากรู้ว่าพอจะอธิบายวิธีตั้งค่า dev-container หรือ VM แบบเป็นรูปธรรมได้ไหม
    • Claude จะมี การขอสิทธิ์ ทุกครั้งที่รัน จึงปลอดภัยกว่าในจุดนี้เล็กน้อย
    • สำหรับ AI sandbox นั้น sprites.dev ของ fly.io ถือว่าค่อนข้างดี
      ถ้าจะรันเซิร์ฟเวอร์ด้วย qemu แนะนำ quickemu
      ฟีเจอร์ SSH remote ของ zed ก็มีประโยชน์ เลยใช้ร่วมกับ Claude Code หรือ OpenCode ได้
  • แม้การแก้ CORS จะป้องกันการโจมตีจากเว็บไซต์ภายนอกได้ แต่ปัญหาพื้นฐานคือ โครงสร้างที่ทำให้รันโค้ดบน localhost ได้
    Neovim ใช้ domain socket เป็นค่าเริ่มต้น และ SSH daemon ของ VS Code ก็มีขั้นตอนยืนยันตัวตน
    local server ที่รันอินพุตจากไคลเอนต์โดยไม่มีการยืนยันตัวตนคือช่องโหว่ LCE (Local Code Execution) และ
    ถ้าเปิดให้เข้าถึงได้ผ่านคำขอจากเบราว์เซอร์ ก็จะขยายเป็น RCE (Remote Code Execution)

  • น่าตกใจมากที่ใส่ HTTP endpoint ที่ทำ RCE ได้โดยไม่ต้องยืนยันตัวตนไว้ในเครื่องมือ CLI แถมยังเพิ่ม การ bypass CORS เข้าไปอีก

    • ดูเหมือนว่าแล็บ AI ควร เลิกใช้โค้ดจาก tutorial มาฝึกโมเดล ได้แล้ว
    • เซิร์ฟเวอร์เปิดขนาดนี้ แต่ policy CORS ไม่ได้เป็น “*” กลับน่าแปลกยิ่งกว่า
    • บางคนก็ตอบว่าเหมือนเป็น “โค้ดที่ทำขึ้นตามฟีล (vibe)”
  • กำหนดการเปิดเผยช่องโหว่ ก็เป็นปัญหา
    มีการรายงานตั้งแต่ 2025-11-17 แต่แม้ติดต่อหลายครั้งก็ไม่ได้รับการตอบกลับ

    • ตอนนี้ดูเหมือนนักพัฒนาจะพยายามรับมืออย่างจริงจังแล้ว
      ดู คอมเมนต์ใน GitHub issue
    • ยังมีมุกปนประชดว่า “ช่วงนี้ทุกคนกำลัง vibe coding กันอยู่ เลยคิดว่า security issue เป็น bad vibes”
  • ต่อให้เซิร์ฟเวอร์จะปิดอยู่เป็นค่าเริ่มต้น ถ้าเปิดขึ้นมาก็ยังร้ายแรงอยู่ดี
    หน้าเว็บอะไรก็ได้บน localhost สามารถ รันโค้ดได้ และยังรัน local process ได้โดยไม่ต้องยืนยันตัวตน
    ไม่มีตัวบ่งชี้ให้ผู้ใช้รู้ด้วยว่าเซิร์ฟเวอร์กำลังทำงานอยู่หรือไม่
    ปกติแอป TUI ได้รับความไว้วางใจเพราะไม่ทำเรื่องแบบนี้ แต่เหตุการณ์นี้ บั่นทอนความไว้วางใจอย่างหนัก

    • มีคนถามด้วยว่าทำไมถึงเจาะจงว่าเป็นปัญหาของแอป TUI
    • อีกความเห็นมองว่า Droid ของ Factory เป็นทางเลือกที่ใช้ได้
  • น่าแปลกใจที่ OpenCode ได้รับการสนับสนุนจาก YC (Y Combinator)
    นึกว่า YC จะส่งเสริมวัฒนธรรมด้านความปลอดภัยที่ดีกว่านี้

    • ก็มีความเห็นเชิงเสียดสีว่า สุดท้าย YC ก็ เห็นแต่เงิน
    • ก่อนหน้านี้ Flock ที่มาจาก YC ก็เคยมีกรณี hardcode รหัสผ่านไว้ 53 ครั้ง
      ดูรายละเอียดในคอมเมนต์นี้
    • ยิ่งไปกว่านั้น OpenCode ยังทำผลิตภัณฑ์ Auth provider ด้วย ซึ่งยิ่งดูประชดประชันเข้าไปอีก
  • ตอนแรกนึกว่า OpenCode เป็นโปรเจกต์อาสาสมัคร แต่จริง ๆ แล้วเป็น โปรเจกต์เชิงธุรกิจที่ได้รับการสนับสนุนจากนักลงทุนรายใหญ่

    • นอกจาก GitHub repository อย่างเป็นทางการ แล้ว ยังมีโปรเจกต์คู่แข่งที่ทีม charm.sh ทำไว้ด้วย
    • คงนึกถึงโปรเจกต์อย่าง crush, roocode หรือ kilo มากกว่า ซึ่งยังไม่มีผู้สนับสนุนรายใหญ่
  • เลิกใช้ไปแล้วเพราะมัวแต่เพิ่มฟีเจอร์แต่ ละเลยการบำรุงรักษาแกนหลัก
    จุดประสงค์เดิมคืออยากใช้หลายโมเดลพร้อมกัน แต่ การแชร์คอนเท็กซ์ไม่มีประสิทธิภาพ จึงไม่ค่อยใช้งานได้จริง
    ตอนนี้ใช้ Claude Code กับ Codex ควบคู่กันอยู่
    ถึงอย่างนั้น ความต้องการ แพลตฟอร์มเปิดสำหรับรวมหลายโมเดล ก็ยังมีสูงมาก

    • แนะนำให้ใช้ ampcode(ลิงก์) และ Crush(ลิงก์) + z.ai GLM
      ampcode ใช้ทำสคริปต์ง่าย ๆ ได้ฟรี และ Crush+GLM ก็ทำตามแผนของ Claude หรือ Codex ได้ดี
    • มีคนเห็นด้วยว่า การรักษาวินัยด้าน การรีวิวและการควบคุมคุณภาพ ยากกว่าการเพิ่มฟีเจอร์ใหม่เสียอีก
  • ตอนแรกชอบ Aider มาก แต่แทบไม่มีการดูแลรักษาแล้ว เลยเจอปัญหาบ่อย
    กำลังจะติดตั้ง OpenCode แต่พอเห็นเรื่องครั้งนี้ก็เริ่มลังเล
    น่าแปลกใจที่ โอเพนซอร์ส CLI LLM assistant ที่ไม่ผูกกับโมเดลใดโมเดลหนึ่ง มีตัวเลือกน้อยขนาดนี้