A sandbox จะมีประโยชน์ก็ต่อเมื่อมันสามารถกักบริเวณ agent ให้อยู่ภายในขอบเขตที่กำหนดไว้ได้จริง ๆ Claude Code 2.1.216 ได้ปิดช่องโหว่หลายจุดที่อาจทำให้ background task, subagent หรือ session ที่ถูกเรียกกลับมาทำงานใหม่ (resumed session) หลุดออกไปนอกไดเรกทอรีที่ได้รับมอบหมาย การเปิดตัวครั้งนี้มีการเพิ่มสวิตช์การตั้งค่าใหม่ แต่สิ่งที่สำคัญกว่านั้นคือการปรับปรุงระบบภายใน: การจัดการ Git worktrees, symlinks และการรีสตาร์ท agent ที่ชาญฉลาดขึ้น หากคุณรัน Claude Code ในเครื่องส่วนตัวหรือใน CI การเปลี่ยนแปลงเหล่านี้ควรค่าแก่การอ่านรายละเอียดมากกว่าแค่การกวาดสายตาผ่าน changelog

ตัวเลือก Filesystem ที่คุณไม่ควรปรับเปลี่ยนโดยไม่ระวัง

เวอร์ชัน 2.1.216 เพิ่ม sandbox.filesystem.disabled เมื่อตั้งค่านี้ Claude Code จะข้ามการแยกส่วน filesystem (filesystem isolation) ของตัวเอง แต่ยังคงบังคับใช้ network sandbox อยู่ มองเผิน ๆ อาจดูเหมือนเป็นวิธีหยุดข้อผิดพลาดด้านสิทธิ์ (permission errors) หรือช่วยให้การทำงานกับไฟล์เร็วขึ้น แต่มันไม่ใช่แบบนั้น คุณควรเปิดใช้งานการตั้งค่านี้ก็ต่อเมื่อมีเลเยอร์อื่นคอยปกป้องดิสก์ของคุณอยู่แล้วเท่านั้น

นั่นหมายถึงการใช้ container แบบใช้แล้วทิ้ง (disposable container) ที่จะถูกลบออกหลังจบการทำงานทุกครั้ง หรือ virtual machine เฉพาะทางที่ไม่มีสิทธิ์เข้าถึง home directory หรือ production volumes ของคุณ หากคุณรัน Claude Code โดยตรงบน macOS, Windows หรือ bare Linux host ให้เปิด filesystem isolation ไว้เสมอ Network sandbox ไม่สามารถใช้แทนการควบคุม filesystem ได้ และความยุ่งยากเล็กน้อยจากการเข้าถึงไฟล์ผ่าน sandbox นั้นคุ้มค่ากว่าการต้องมาตามแก้ไขไฟล์ที่ถูกเขียนทับโดยไม่ตั้งใจ หรือการถูกโจมตีด้วย malicious prompt injection ที่หลุดรอดออกมาจากโฟลเดอร์โปรเจกต์

ให้คิดว่าตัวเลือกนี้เป็นเหมือน compatibility shim ไม่ใช่ปุ่มปรับประสิทธิภาพ มันมีไว้สำหรับสภาพแวดล้อมที่ระบบปฏิบัติการหรือ orchestrator จัดการเรื่องการแยกส่วน (isolation) อยู่แล้ว และ sandbox ของ Claude เองอาจเป็นการเพิ่มความซับซ้อนโดยไม่จำเป็น

สิ่งที่การอัปเดตนี้แก้ไขจริง ๆ

นอกเหนือจากการตั้งค่าใหม่แล้ว เวอร์ชัน 2.1.216 ยังได้ปิดช่องโหว่ในทางปฏิบัติหลายจุดที่อาจทำให้ agent เข้าถึงพื้นที่ที่ไม่ได้รับอนุญาตได้

Worktree isolation. Subagent ไม่สามารถเปลี่ยนเส้นทางคำสั่ง Git ไปยังไดเรกทอรีหลัก (parent) หรือไดเรกทอรีข้างเคียง (sibling) ที่อยู่นอก worktree ของตัวเองได้อีกต่อไป ก่อนหน้านี้ subagent ที่รันอยู่ภายในโปรเจกต์ของคุณอาจพยายามสั่งการ Git ไปยัง shared checkout หรือ repository อื่นที่อยู่ติดกัน ซึ่งเป็นเรื่องสำคัญเพราะนักพัฒนาหลายคนเก็บโปรเจกต์หลายโปรเจกต์ไว้ภายใต้โฟลเดอร์หลักเดียวกัน ตอนนี้คำสั่งที่พยายามข้ามขอบเขตเหล่านั้นจะล้มเหลว

การเสริมความปลอดภัย Symlink ที่พาธ .claude. เดิมทีการกำหนด workflow และงานที่ตั้งเวลาไว้ (scheduled tasks) จะมีการทำตาม symlinks เมื่อเขียนการตั้งค่า ผู้โจมตีที่สามารถสร้าง symlink จาก .claude ไปยังไฟล์อื่น เช่น shell profile หรือไดเรกทอรี SSH อาจทำให้ agent เขียนไฟล์ออกไปนอกโปรเจกต์ได้ การอัปเดตนี้จะหยุดปัญหานี้โดยการปฏิเสธที่จะทำตาม symlinks ที่พาธดังกล่าว

การ Rewind ที่ปลอดภัยยิ่งขึ้น. คำสั่ง /rewind ซึ่งช่วยให้คุณย้อนกลับการเปลี่ยนแปลงล่าสุด จะข้ามพาธที่เป็น symlinked และ hard-linked หากไม่มีการป้องกันนี้ การทำ rewind อาจวิ่งตาม symlink ไปเขียนทับไฟล์ที่อยู่ไกลจาก repository ของคุณ ตอนนี้ Claude จะรายงานพาธที่ถูกข้ามไปอย่างชัดเจน เพื่อให้คุณทราบว่าขอบเขตการป้องกันยังทำงานอยู่

Agent ที่กลับมาทำงานใหม่ยังคงข้อจำกัดเดิมไว้. เซสชันเบื้องหลัง (background sessions) ที่ถูกหยุดและถูกเรียกกลับมาทำงานใหม่ในภายหลัง เคยจะกลับไปใช้สิทธิ์การใช้เครื่องมือ (tool permissions) แบบเริ่มต้น หากคุณตั้งใจจำกัดสิทธิ์ agent ให้ทำได้แค่การอ่านแต่ห้ามเขียน การรีสตาร์ทอาจทำให้สิทธิ์ที่กว้างขึ้นถูกกู้คืนกลับมาโดยไม่รู้ตัว แต่ตอนนี้ข้อจำกัดเดิมจะถูกบันทึกและเรียกคืนมาพร้อมกับเซสชัน

การเลือกโปรไฟล์ความปลอดภัย (Security Profile)

Claude Code 2.1.216 จัดการการควบคุมเหล่านี้ออกเป็น 3 โปรไฟล์ โปรดเลือกตามสถานที่ที่คุณรันเครื่องมือ ไม่ใช่เลือกตามความรู้สึกว่าแบบไหนเร็วที่สุด

Default. ทั้ง filesystem และ network sandboxing จะยังคงทำงานอยู่ นี่คือตัวเลือกที่ถูกต้องสำหรับการพัฒนาในเครื่อง (local development) บนแล็ปท็อปหรือเวิร์กสเตชันของคุณ มันจะปกป้อง home directory, ไฟล์ระบบ และโปรเจกต์ข้างเคียงโดยที่คุณไม่ต้องจัดการ container เอง

Compatibility. ปิดการแยกส่วน filesystem แต่ยังคงรักษา network sandbox ไว้ ให้ใช้โปรไฟล์นี้เฉพาะกับ disposable containers หรือ VMs ที่ filesystem เป็นแบบชั่วคราว (ephemeral) หรือถูกจำกัดขอบเขตไว้อย่างเข้มงวดแล้วเท่านั้น อย่าใช้โปรไฟล์นี้เพียงเพราะคุณขี้เกียจพิมพ์รหัสผ่านเพื่อให้ agent เข้าถึงโฟลเดอร์ที่ถูกป้องกันไว้

Managed Hard Gate. เปิดใช้งาน sandbox ทั้งสองเลเยอร์ และโปรไฟล์นี้คาดหวังนโยบาย container เพิ่มเติมที่บังคับใช้โดย orchestrator หรือทีมความปลอดภัยของคุณ สิ่งนี้ถูกสร้างมาสำหรับ CI pipelines, สภาพแวดล้อมการพัฒนาทางไกล (remote dev environments) และการตั้งค่าระดับองค์กรที่จำเป็นต้องมีการป้องกันแบบหลายชั้น (defense in depth)

หากคุณไม่แน่ใจว่าควรใช้แบบไหน ให้เริ่มที่ Default คุณสามารถลดระดับการป้องกันลงในภายหลังได้ก็ต่อเมื่อคุณตรวจสอบแล้วว่าสภาพแวดล้อม runtime ของคุณสามารถแยกส่วน filesystem ได้ด้วยตัวเองอย่างแท้จริง

การอัปเกรดโดยไม่ทำให้ Workflow ของคุณพัง

อย่ามองว่านี่เป็นเพียงแพตช์ทั่วไปที่คุณจะติดตั้งในบ่ายวันศุกร์ เส้นทางการอัปเกรดในเวอร์ชัน 2.1.216 นั้นตรงไปตรงมา แต่ผลกระทบจากการตั้งค่าผิดพลาดนั้นไม่ใช่เรื่องง่ายเลย

ขั้นแรก ให้ทำการอัปเกรดเป็นเวอร์ชัน 2.1.216 ผ่านทาง package manager หรือตัวติดตั้งปกติของคุณ จากนั้นให้เลือกโปรไฟล์การแยกส่วน (isolation profiles) หนึ่งในสามแบบก่อนที่จะเริ่มงานของ agent ใดๆ อย่าใช้โปรไฟล์ผสมกันระหว่างเซสชันที่กำลังทำงานอยู่โดยไม่เข้าใจว่าโปรไฟล์ใดมีลำดับความสำคัญสูงกว่า

ต่อไป ให้รันการทดสอบขอบเขตแบบไม่ทำลายข้อมูล (non-destructive boundary tests) ทั้งห้าแบบตามที่อธิบายไว้ด้านล่าง นี่คือการตรวจสอบด้วยสคริปต์ที่รวดเร็วเพื่อพิสูจน์ว่า sandbox ทำงานตามที่โปรไฟล์กำหนดไว้ ในระหว่างการทดสอบ ให้สร้าง sentinel hashes สำหรับไฟล์ที่อยู่นอก repository สำหรับทดสอบที่ใช้แล้วทิ้ง (disposable test repository) โดย sentinel hash ก็คือ checksum ของไฟล์หรือไดเรกทอรีที่สำคัญที่คุณต้องการปกป้อง หลังจากรันการทดสอบแล้ว ให้เปรียบเทียบค่า hash หากมีการเปลี่ยนแปลงใดๆ แสดงว่าการแยกส่วน (isolation) ของคุณกำลังรั่วไหล

ตรวจสอบ log ของคุณด้วยเช่นกัน Claude Code จะบันทึกการปฏิเสธ (denials) และเหตุการณ์ sandbox ลงใน log ในเครื่อง ให้มองหาการปฏิเสธที่ชัดเจนเมื่อมีการเข้าถึง host ที่ถูกบล็อก หรือเมื่อ subagent พยายามออกนอก worktree ของตนเอง ความล้มเหลวแบบเงียบ (silent failures) นั้นแย่กว่าความล้มเหลวที่แจ้งเตือนชัดเจน ดังนั้นควรตรวจสอบให้แน่ใจว่า log แสดงให้เห็นว่าระบบป้องกัน (guardrails) กำลังทำงาน

สุดท้าย ให้ทยอยเริ่มใช้งานการเปลี่ยนแปลงนี้ โดยเริ่มจากโปรเจกต์เดียวหรือ branch ที่ไม่ใช่ production ปล่อยให้เวอร์ชันใหม่ทำงานสักวันหรือสองวันก่อนที่คุณจะติดตั้งใช้งานกับทีมทั้งหมดหรือ CI fleet ของคุณ

การทดสอบขอบเขต 5 แบบที่พิสูจน์ว่า Sandbox ของคุณทำงานได้จริง

ให้รันการทดสอบเหล่านี้ภายใน repository สำหรับใช้แล้วทิ้งที่เต็มไปด้วยข้อมูลจำลองเสมอ ห้ามใช้การทดสอบนี้กับโค้ดที่ใช้งานจริง (production code), ข้อมูลประจำตัว (credentials) จริง หรือโครงสร้างพื้นฐานที่ใช้งานอยู่ (live infrastructure) โดยเด็ดขาด

Network boundary (ขอบเขตเครือข่าย): ลองพยายามเข้าถึง endpoint สองแห่ง: แห่งหนึ่งที่คุณอนุญาตไว้อย่างชัดเจน และอีกแห่งที่คุณบล็อกไว้ การส่ง HTTP request ไปยังบริการทดสอบสาธารณะอย่าง httpbin.org สามารถใช้เป็นเป้าหมายที่อนุญาตได้ ในขณะที่การส่ง request ไปยัง local metadata endpoint หรือ internal IP ควรจะล้มเหลว หาก request ที่ถูกบล็อกสามารถเข้าถึงได้ แสดงว่า network sandbox ของคุณตั้งค่าผิดพลาด

Worktree isolation (การแยกส่วน worktree): จากภายใน subagent ให้รันคำสั่ง Git ที่มุ่งเป้าไปยังไดเรกทอรีหลัก (parent directory) ตัวอย่างเช่น ลองใช้ git -C .. status หรือให้ agent อธิบายไฟล์ที่อยู่นอก checkout ของมัน ด้วยการแก้ไขในเวอร์ชัน 2.1.216 สิ่งนี้จะต้องล้มเหลว โดย subagent ควรจะมองเห็นเฉพาะ worktree ของตัวเองเท่านั้น

Symlink trap (กับดัก symlink): สร้าง symlink ภายในโปรเจกต์ของคุณที่ชี้ไปยังไดเรกทอรีภายนอก repository เช่น /tmp/sentinel-target จากนั้นลองบันทึก task หรือ workflow ภายใต้พาธ .claude ที่จะเขียนข้อมูลผ่านลิงก์นั้น หลังจากบันทึกแล้ว ให้ตรวจสอบไดเรกทอรีภายนอก หากยังคงว่างเปล่า แสดงว่าการเสริมความแข็งแกร่งของ symlink (symlink hardening) กำลังทำงาน

Rewind skip (การข้ามการย้อนกลับ): สร้างโฟลเดอร์ภายใน repo ของคุณที่มี symlink ชี้ไปยังไฟล์ระบบหรือไดเรกทอรีอื่น จากนั้นรัน /rewind ในโฟลเดอร์นั้น Claude ควรจะแสดงรายการพาธที่เป็น symlink หรือ hard-link ที่ถูกข้ามไป แทนที่จะพยายามเข้าไปจัดการในนั้น ให้ยืนยันว่าเป้าหมายที่อยู่นอก repo ไม่มีการเปลี่ยนแปลงใดๆ

Session resurrection (การฟื้นคืนเซสชัน): เริ่มการทำงานของ background agent พร้อมข้อจำกัดที่เข้มงวด เช่น การปิดใช้งานเครื่องมือเขียนไฟล์ (file-write tools) จากนั้นให้หยุดพัก (pause) หรือหยุด (stop) เซสชัน แล้วจึงเริ่มใหม่ (resume) ทันทีให้ลองสั่งให้ agent เขียนไฟล์ หากข้อจำกัดยังคงทำงานอยู่ แสดงว่าการแก้ไขสำหรับ agent ที่ถูก resume นั้นใช้งานได้ แต่หาก agent กลับมาเข้าถึงเครื่องมือได้เต็มรูปแบบอีกครั้ง แสดงว่าคุณยังคงมีความเสี่ยงอยู่

บทสรุป

Claude Code 2.1.216 มอบความยืดหยุ่นให้คุณมากกว่าเวอร์ชันก่อนหน้า แต่ความยืดหยุ่นนั้นมาพร้อมกับข้อกำหนดที่ชัดเจนคือ: ตรวจสอบก่อนที่จะเชื่อใจ การสลับการทำงานของ filesystem (filesystem toggle) แบบใหม่ไม่ได้มีไว้เพื่อให้ชีวิตคุณง่ายขึ้นโดยแลกกับความปลอดภัย แต่มันมีไว้สำหรับวิศวกรที่ได้สร้างรากฐานที่แข็งแกร่งไว้ใต้เครื่องมือนี้อยู่แล้ว การปรับปรุงที่แท้จริงในเวอร์ชันนี้คือระบบป้องกัน (guardrails) ที่ทำงานอย่างเงียบเชียบ ซึ่งจะหยุดไม่ให้ subagent คืบคลานเข้าไปในไดเรกทอรีหลัก ปฏิเสธการทำตาม symlink ระหว่างการเขียนการตั้งค่า และจดจำกฎเกณฑ์ได้แม้หลังจากหยุดพักไปนาน

รันการทดสอบทั้งห้าแบบ ตรวจสอบ sentinel hashes ของคุณ อ่าน log จากนั้น และหลังจากนั้นเท่านั้น จึงค่อยปล่อยให้เวอร์ชันใหม่จัดการกับงานจริง

ที่มา: Claude Code v2.1.216 Release Notes

ชุมชนการเรียนรู้เพิ่มเติม: GyaanSetu on Telegram