Claude Code 2.1.268: แก้ไขอะไรในกฎ deny และ MCP
MarkdownClaude Code 2.1.268–2.1.269 แก้ปัญหาสิทธิ์ 4 รายการและการรั่วไหลของความลับใน /mcp ใครได้รับผลกระทบ วิธีอัปเดต และวิธีตรวจสอบกฎของคุณ
อ่านบทความฉบับเต็ม
Claude Code เวอร์ชัน 2.1.268 เปิดตัวเมื่อวันที่ 10 กันยายน 2026 และวันถัดมาก็มีเวอร์ชัน 2.1.269 ตามมา คุณควรอัปเดตทันที เพราะในสองกรณี กฎ deny ที่คุณใช้บล็อกไม่ให้เอเจนต์เข้าถึง .env และโฟลเดอร์บริการกลับไม่มีผลโดยไม่มีการแจ้งเตือน นอกจากนี้ คำสั่ง /mcp อาจแสดงความลับจากไฟล์กำหนดค่าของคุณในเทอร์มินัลได้
เนื้อหาด้านล่างอ้างอิงจากบันทึกการเปลี่ยนแปลงและเอกสารอย่างเป็นทางการของ Anthropic ตามข้อมูล ณ วันที่ 17 กันยายน 2026 ซึ่งเป็นวันที่ของแหล่งข้อมูล เวอร์ชันล่าสุดในวันนั้นคือ 2.1.274 เราอธิบายการทำงานของข้อผิดพลาดตามรายการเหล่านั้น โดยไม่ได้จำลองการหลีกเลี่ยงการป้องกันบนเวอร์ชันที่มีช่องโหว่
ดูคำแนะนำเพิ่มเติมเกี่ยวกับการใช้งาน Ailoot ได้ที่ เอกสารประกอบ
แก้ไขอะไรบ้างใน Claude Code 2.1.268 และ 2.1.269?
ประเด็นสำคัญ
มีการแก้ไขปัญหาสิทธิ์ 4 รายการ กฎ deny และ ask ไม่ทำงานกับพาธที่ผ่าน symlink และกฎ deny สำหรับ Read หรือ Edit อาจไม่ทำงานเมื่อบรรทัดมี env -C หรือ eval กฎที่มี “!” มีผลเกินขอบเขตไฟล์การตั้งค่าของตนเอง คำสั่ง tee เขียนไฟล์ได้โดยไม่ถูกบล็อกจากกฎ deny สำหรับ Edit นอกจากนี้ /mcp และ claude mcp list ยังแสดงความลับจากไฟล์กำหนดค่า ส่วนข้อผิดพลาดของปลั๊กอินก็แสดงโทเค็นจาก URL ของ Git
มีการแก้ไข 4 รายการที่เกี่ยวข้องกับกฎสิทธิ์:
- การบล็อก symlink ไม่ทำงาน กฎ deny และ ask ที่กำหนดไว้สำหรับไดเรกทอรี symlink (
/etc,/tmp,/varบน macOS และ/binบน Linux) ไม่ทำงานเมื่อระบุพาธด้วยตำแหน่งจริง คำสั่ง Bash ยังเพิกเฉยต่อกฎ deny ที่กำหนดไว้สำหรับพาธผ่าน symlink ด้วย - การบล็อกการอ่านและแก้ไขล้มเหลวเมื่อใช้
env -Cหรือevalร่วมด้วย หากบรรทัดคำสั่งเดียวกันมีโครงสร้างที่ตัวตรวจสอบสิทธิ์แยกวิเคราะห์ไม่ได้ กฎ deny สำหรับ Read หรือ Edit อาจไม่ทำงาน - กฎที่มี “!” มีผลกว้างกว่าที่ตั้งใจไว้ กฎ deny หรือ ask ที่ขึ้นต้นด้วย
!มีผลเกินขอบเขตไฟล์การตั้งค่าที่กำหนดไว้ ตอนนี้กฎดังกล่าวมีผลเฉพาะภายในแหล่งที่มาของตนเอง และจะละเว้นเครื่องหมายปฏิเสธเดี่ยว! teeเขียนไฟล์โดยเลี่ยงการบล็อก กฎ deny สำหรับEdit()และการตรวจสอบพาธการเขียนไม่มีผลกับไฟล์ที่สร้างด้วยคำสั่ง Bashteeสิทธิ์Bash(tee:*)จะไม่ครอบคลุมการเขียนนอกไดเรกทอรีทำงานอีกต่อไป
เวอร์ชันเหล่านี้ยังแก้ปัญหาอีกสองรายการที่เกี่ยวข้องกับการเปิดเผยความลับด้วย WebFetch จะไม่รอคำตอบจากเซิร์ฟเวอร์ที่เปิดการเชื่อมต่อค้างไว้อย่างไม่มีกำหนดอีกต่อไป โดยคำขอจะล้มเหลวหลังจาก 300 วินาที และตั้งค่าระยะหมดเวลาได้ด้วยตัวแปร CLAUDE_CODE_WEBFETCH_DEADLINE_MS นอกจากนี้ยังแก้การใช้ CPU สูงต่อเนื่องในเซสชันที่ไม่มีการใช้งานเป็นเวลานาน
การบล็อกทำงานอย่างไรใน Claude Code?
ประเด็นสำคัญ
เขียนกฎไว้ในบล็อก permissions ของ settings.json: deny บล็อกการกระทำ ask ขอการยืนยัน และ allow อนุญาตให้ทำโดยไม่ต้องยืนยัน ระบบตรวจสอบตามลำดับนี้: deny ตามด้วย ask แล้วจึง allow กฎมีรูปแบบ Tool หรือ Tool(detail) เช่น Read(./.env)
Claude Code มีกฎอยู่สามรายการ: deny (ห้ามเสมอ), ask (ถามก่อนดำเนินการ) และ allow (อนุญาตโดยไม่ต้องยืนยัน) เมื่อเอเจนต์กำลังจะทำบางอย่าง ระบบจะตรวจสอบกฎตามลำดับนี้อย่างเคร่งครัด หากกฎ deny ตรงกัน จะยกเลิกกฎ allow สำหรับการกระทำเดียวกัน กฎอนุญาตไม่สามารถยกเว้นกฎการบล็อกได้
กฎเก็บไว้ในสามตำแหน่ง ได้แก่ กฎผู้ใช้ใน ~/.claude/settings.json กฎโปรเจกต์ใน .claude/settings.json ภายใน repository และกฎเฉพาะเครื่องใน .claude/settings.local.json ตัวอย่างการตั้งค่าที่บล็อกการอ่านไฟล์ซึ่งมีคีย์:
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./secrets/**)",
"Bash(rm *)"
]
}
}
คุณสามารถดูรายการกฎที่กำลังใช้งานทั้งหมดและไฟล์ที่เป็นแหล่งที่มาของแต่ละกฎได้โดยเรียก /permissions ในเซสชัน หากกฎบล็อกการอ่าน ข้อความแจ้งการบล็อกจะระบุกฎนั้น ซึ่งจะเป็นประโยชน์ต่อการตรวจสอบด้านล่าง
ข้อผิดพลาดใดส่งผลต่อการบล็อกและขอบเขตของกฎ?
ข้อผิดพลาดส่งผลต่อการตรวจสอบพาธและคำสั่ง รวมถึงขอบเขตของกฎจากไฟล์การตั้งค่าต่าง ๆ
กรณีแรก: symlink บน macOS /etc, /tmp และ /var เป็น symlink ไปยังโฟลเดอร์จริงใต้ /private ส่วนบน Linux /bin มักเป็น symlink ในลักษณะเดียวกัน หากคุณเขียนกฎ deny สำหรับรูปแบบหนึ่งของพาธ แต่เอเจนต์เข้าถึงด้วยอีกรูปแบบหนึ่ง (เช่น ใช้ตำแหน่งจริงแทน symlink) กฎจะไม่ทำงาน คำสั่ง Bash ยังเพิกเฉยต่อการบล็อกที่กำหนดไว้สำหรับพาธผ่าน symlink ด้วย ใน 2.1.268 มีการแก้ไขทั้งสองกรณีนี้ ตอนนี้กฎมีผลไม่ว่าจะระบุพาธด้วยรูปแบบใด
กรณีที่สอง: env -C และ eval อยู่ในบรรทัดเดียวกัน ตัวตรวจสอบสิทธิ์จะแยกวิเคราะห์คำสั่งเพื่อดูว่าจะเข้าถึงไฟล์ใดบ้าง แต่ไม่สามารถแยกวิเคราะห์โครงสร้างอย่าง env -C หรือ eval ได้ ข้อผิดพลาดคือเมื่อมีโครงสร้างดังกล่าวในบรรทัด กฎ deny สำหรับ Read หรือ Edit อาจไม่ทำงาน ผลคือคำสั่งอาจเลี่ยงการบล็อกการอ่านหรือแก้ไขไฟล์ที่ได้รับการป้องกันได้
กรณีที่สาม: กฎที่มี “!” มีผลเกินขอบเขตของตนเอง กฎที่ขึ้นต้นด้วย ! ควรมีผลเฉพาะภายในไฟล์การตั้งค่าที่กำหนดไว้ ก่อนเวอร์ชัน 2.1.269 กฎนี้ยังมีผลกับแหล่งการตั้งค่าอื่นด้วย ตอนนี้ขอบเขตจำกัดอยู่ที่ไฟล์ของตนเอง และจะละเว้นกฎที่มีเพียง ! เปล่า ๆ
กรณีที่สี่: เขียนผ่าน tee คำสั่ง Bash tee สามารถเขียนไฟล์ได้ การตรวจสอบพาธการเขียนและกฎ deny สำหรับ Edit() ไม่มีผลกับไฟล์นั้น ขณะเดียวกัน สิทธิ์ Bash(tee:*) ก็ครอบคลุมการเขียนนอกไดเรกทอรีทำงาน ใน 2.1.269 การตรวจสอบเหล่านี้เริ่มมีผลกับการเขียนผ่าน tee: การบล็อกไฟล์จะมีผล และ Bash(tee:*) จะครอบคลุมเฉพาะไดเรกทอรีทำงาน
หากคุณใช้กฎบล็อกแบบเจาะจงเพื่อบล็อก .env โฟลเดอร์บริการบางโฟลเดอร์ หรือคำสั่งอันตราย ก็ควรตรวจสอบกฎเหล่านั้นด้วย ขั้นตอนอยู่ด้านล่าง
ทำไม /mcp จึงแสดงคีย์ของคุณได้?
ประเด็นสำคัญ
คีย์ในไฟล์กำหนดค่า MCP มักส่งผ่านตัวแปร ${VAR} คำสั่ง /mcp, /plugin, claude mcp list และ claude mcp get รวมถึงข้อผิดพลาดขณะเข้าสู่ระบบ MCP จะแสดงค่าที่แทนลงในตัวแปรแล้ว หรือก็คือตัวคีย์เอง ใน 2.1.268 มีการปกปิดข้อมูลในผลลัพธ์แล้ว
โดยทั่วไป ไฟล์กำหนดค่าเซิร์ฟเวอร์ MCP จะเก็บคีย์ไว้ในตัวแปรสภาพแวดล้อมและอ้างอิงผ่าน ${VAR} เพื่อให้เก็บไฟล์ไว้ใน repository ได้โดยไม่มีความลับอยู่ในไฟล์ ปัญหาคือคำสั่งสำหรับดูข้อมูล (/mcp, /plugin, claude mcp list, claude mcp get) และข้อความผิดพลาดจากการเข้าสู่ระบบ MCP แสดงไฟล์กำหนดค่าที่แทนค่าตัวแปรแล้ว คีย์จริงจึงปรากฏบนหน้าจอ
การแก้ไขอีกข้อเกี่ยวกับข้อผิดพลาดของปลั๊กอินและ marketplace: ข้อผิดพลาดเหล่านั้นอาจแสดงโทเค็นหรือรหัสผ่านจาก URL ของ Git ต้นทาง
หากผลลัพธ์จาก /mcp หรือ claude mcp list บนเวอร์ชันเก่าปรากฏในสตรีม ภาพหน้าจอ ข้อความที่ส่งให้เพื่อนร่วมงาน หรือบันทึกที่ออกจากเครื่องของคุณ รวมถึงกรณีที่เกิดขึ้นโดยอัตโนมัติ ให้ถือว่าคีย์จากไฟล์กำหนดค่า MCP ของคุณถูกเปิดเผยแล้วและเปลี่ยนคีย์เหล่านั้น หากผลลัพธ์ไม่เคยออกจากเครื่อง การอัปเดตก็เพียงพอแล้ว เรามีคู่มือแยกเกี่ยวกับเซิร์ฟเวอร์ MCP และชุดการตั้งค่าพร้อมใช้: เซิร์ฟเวอร์ MCP ของ Claude Code
การเปลี่ยนแปลงอื่น ๆ ในเวอร์ชันเหล่านี้
WebFetch และอาร์ติแฟกต์ ก่อนหน้านี้ กฎ WebFetch ที่ไม่มีรายละเอียดในรายการ deny หรือ ask ยังมีผลกับการอ่านและแก้ไขอาร์ติแฟกต์ที่เผยแพร่ด้วย ตั้งแต่ 2.1.268 เป็นต้นไป กฎนี้ไม่มีผลกับอาร์ติแฟกต์เหล่านั้น หากต้องการบล็อกอาร์ติแฟกต์ คุณต้องใช้กฎ Artifact แยกต่างหาก หรือกฎสำหรับโดเมน เช่น WebFetch(domain:claude.ai) หากคุณพึ่งพาการบล็อก WebFetch แบบทั่วไปเพื่อป้องกันการอ่านอาร์ติแฟกต์ ให้ตรวจสอบการตั้งค่าของคุณอีกครั้ง เพราะกฎเดิมจะไม่บล็อกการกระทำเหล่านี้แล้ว
WebFetch มีระยะหมดเวลาแล้ว คำขอไปยังเซิร์ฟเวอร์ที่เปิดการเชื่อมต่อค้างไว้และไม่ส่งคำตอบจนเสร็จ จะล้มเหลวหลังจาก 300 วินาที ก่อนหน้านี้คำขอเช่นนี้อาจค้างอย่างไม่มีกำหนด ตั้งค่าการทำงานนี้ได้ด้วยตัวแปร CLAUDE_CODE_WEBFETCH_DEADLINE_MS; ตั้งค่าเป็น 0 เพื่อปิดระยะหมดเวลา
แก้ปัญหาการใช้ CPU สูงต่อเนื่องในเซสชันที่ไม่มีการใช้งานแล้ว ในเซสชันที่ไม่มีการใช้งานเป็นเวลานาน ลูปขณะไม่ได้ทำงานใน Claude Code อาจทำให้ใช้ CPU สูงต่อเนื่อง ข้อผิดพลาดนี้ได้รับการแก้ไขใน 2.1.268 และอาจส่งผลต่อผู้ที่เปิดเซสชันทิ้งไว้ตลอดทั้งวันด้วย
ติดตั้งเวอร์ชันล่าสุด มีข้อผิดพลาดใหม่เกิดขึ้นใน 2.1.269: หลังจากเซสชันทำงานเป็นเวลานาน คำสั่ง Bash Git ที่อ่านข้อมูลอย่างเดียวเริ่มขออนุญาต ข้อผิดพลาดนี้ได้รับการแก้ไขใน 2.1.270 ดังนั้นให้อัปเดตเป็นเวอร์ชันล่าสุด (ณ วันที่ 17 กันยายน 2026 คือ 2.1.274) อย่าหยุดอยู่ที่ 2.1.268 หรือ 2.1.269
จะอัปเดตและตรวจสอบว่าการบล็อกทำงานอย่างไร?
ประเด็นสำคัญ
ตรวจสอบเวอร์ชันด้วย claude --version อัปเดตเป็นรุ่นล่าสุด จากนั้นทดสอบด้วยไฟล์ปลอดภัยที่ไม่มีความลับ: เพิ่มกฎ deny สำหรับไฟล์นั้น ขอให้เอเจนต์อ่านไฟล์ และตรวจสอบว่าข้อความแจ้งการบล็อกระบุกฎของคุณ
- ตรวจสอบเวอร์ชันปัจจุบัน เรียก
claude --versionในเทอร์มินัล การแก้ไขปัญหาที่อธิบายไว้ข้างต้นเผยแพร่ใน 2.1.268 และ 2.1.269 หากหมายเลขเวอร์ชันต่ำกว่า 2.1.268 แสดงว่าเวอร์ชันของคุณยังไม่มีการแก้ไขเหล่านี้ แต่ปัญหาแต่ละข้อจะเกี่ยวข้องหรือไม่ขึ้นอยู่กับพาธ คำสั่ง และกฎที่คุณใช้ - อัปเดต คู่มือ วิธีอัปเดต Claude Code เป็นเวอร์ชันล่าสุด มีคำแนะนำทีละขั้นตอนและวิธีแก้ปัญหา เลือกเวอร์ชันล่าสุด อย่าหยุดอยู่ที่ 2.1.268
- ทดสอบการบล็อก อย่าทดสอบกฎกับไฟล์
.envจริง เพราะหากการบล็อกล้มเหลว เอเจนต์จะเห็นคีย์จริง สร้างไฟล์ทดสอบ เช่นsecret-test.txtที่มีข้อความใดก็ได้ เช่น “นี่คือการทดสอบ”; เพิ่มกฎ"Read(./secret-test.txt)"ลงในรายการ deny ในไฟล์.claude/settings.jsonของโปรเจกต์; เริ่มเซสชันใหม่; แล้วสั่งว่า: “อ่านไฟล์ secret-test.txt แล้วบอกฉันว่ามีอะไรอยู่ในนั้น” พฤติกรรมที่คาดหวังคือมีข้อความแจ้งการบล็อกที่ระบุกฎของคุณ หากเอเจนต์อ่านไฟล์ได้ แสดงว่าการบล็อกไม่ทำงานในการทดสอบนี้ เริ่มจากตรวจสอบไวยากรณ์ในส่วนด้านบน และเปิด/permissionsเพื่อดูรายการกฎที่ใช้งานอยู่กับไฟล์ที่โหลดกฎเหล่านั้นมา ผลการทดสอบเพียงอย่างเดียวไม่ได้ระบุสาเหตุ การบล็อกหนึ่งครั้งแสดงว่ากฎสำหรับไฟล์นี้ทำงาน แต่ไม่ได้บอกอะไรเกี่ยวกับกฎอื่นของคุณ ดังนั้นให้ตรวจสอบทีละกฎด้วยวิธีเดียวกัน - ตรวจสอบกรณี symlink หากคุณใช้พาธลักษณะนี้ หากคุณมีกฎบล็อกสำหรับ
/tmp,/etcหรือ/varบน macOS หรือ/binบน Linux ให้ทดสอบพาธเหล่านี้อีกครั้งหลังอัปเดต - ตรวจสอบกฎที่มี “!” หากคุณเคยใช้กฎเหล่านี้ ให้ตรวจสอบว่าแต่ละกฎอยู่ในไฟล์ที่ต้องการให้มีผล
หากการบล็อกทำงาน แต่ Claude Code ยังมองไม่เห็นไฟล์ที่คุณต้องการ โปรดดูคำอธิบายแยกต่างหาก: ทำไม Claude Code จึงมองไม่เห็นไฟล์โปรเจกต์
หากยังอัปเดตไม่ได้ตอนนี้
บางครั้งคุณจำเป็นต้องเลื่อนการอัปเดตออกไป เช่น เปลี่ยนสภาพแวดล้อมไม่ได้ เครื่องเป็นขององค์กร หรือคุณต้องทำงานปัจจุบันให้เสร็จก่อน ระหว่างที่ยังไม่ได้อัปเดต คุณลดความเสี่ยงได้ดังนี้:
- เขียนกฎ deny สำหรับพาธทั้งสองรูปแบบ ได้แก่ symlink และตำแหน่งจริง (บน macOS พาธจริงอยู่ใต้
/private); - อย่ารวมหลายคำสั่งไว้ในบรรทัดเดียว และหลีกเลี่ยง
env -Cกับevalในคำสั่งที่ขอให้เอเจนต์เรียกใช้; - อย่าให้ใครดูผลลัพธ์จาก
/mcp,/plugin,claude mcp listหรือclaude mcp getและเปลี่ยนคีย์จากไฟล์กำหนดค่า MCP ที่อาจตกไปอยู่ในมือผู้อื่น; - จำไว้ว่า
teeเขียนไฟล์โดยเลี่ยงการบล็อกของ Edit ได้ อย่าถือว่าไฟล์ได้รับการป้องกันหากอนุญาตให้ใช้ Bash
มาตรการเหล่านี้ช่วยลดโอกาสเกิดการเลี่ยงการป้องกันบางกรณี แต่ใช้แทนการแก้ไขไม่ได้ ให้อัปเดตและทดสอบตามขั้นตอนในส่วนก่อนหน้าทันทีที่ทำได้
สรุปโดยย่อ
เวอร์ชัน 2.1.268 และ 2.1.269 แก้ปัญหาสิทธิ์ของ Claude Code 4 รายการ ได้แก่ symlink, บรรทัดที่มี env -C และ eval, กฎที่มี “!” แล้วมีผลเกินขอบเขตไฟล์ของตนเอง และการเขียนผ่าน tee นอกจากนี้ยังแก้การเปิดเผยความลับในผลลัพธ์ของ /mcp และโทเค็นในข้อผิดพลาดของปลั๊กอิน ตรวจสอบหมายเลขเวอร์ชัน อัปเดตเป็นรุ่นล่าสุด และทดสอบด้วยไฟล์ทดสอบจากส่วนด้านบน ข้อความแจ้งการบล็อกที่ระบุกฎของคุณแสดงว่าการบล็อกทำงานในการทดสอบนี้ การมีชื่อกฎอยู่ในการตั้งค่าเพียงอย่างเดียวยังไม่เพียงพอที่จะยืนยันว่ากฎทำงาน
แหล่งที่มา
- Claude Code, บันทึกการเปลี่ยนแปลงอย่างเป็นทางการ (รายการของ 2.1.268, 2.1.269, 2.1.270): https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md
- Claude Code, วันที่เผยแพร่เวอร์ชันบน npm: https://www.npmjs.com/package/@anthropic-ai/claude-code
- Claude Code, เอกสารเกี่ยวกับสิทธิ์ (ไวยากรณ์ deny/ask/allow): https://code.claude.com/docs/en/permissions
- Claude Code, รุ่นต่าง ๆ บน GitHub: https://github.com/anthropics/claude-code/releases
หากต้องการทำงานกับโมเดลต่อ คุณสามารถไปที่ Ailoot
รายละเอียดเพิ่มเติม
คำถามที่พบบ่อย
จะทดสอบกฎ deny โดยไม่เปิดเผยข้อมูลลับจริงได้อย่างไร?
สร้างไฟล์ข้อความที่ไม่สำคัญ ตั้งกฎห้าม Read ไฟล์ทดสอบนั้น เริ่มเซสชันใหม่ แล้วขอให้เอเจนต์อ่าน ควรได้การปฏิเสธที่ระบุกฎของคุณ ห้ามใช้ .env จริงกับการทดสอบที่อาจล้มเหลว
การปฏิเสธสำเร็จครั้งเดียวพิสูจน์ว่าสิทธิ์ทั้งหมดปลอดภัยหรือไม่?
ไม่ใช่ ยืนยันได้เฉพาะไฟล์และเส้นทางเข้าถึงที่ทดสอบ ตรวจรายการกฎที่ใช้งานใน /permissions แล้วทดสอบกรณีอื่นที่พึ่งพา รวมถึงการอ้างผ่าน symlink หากเกี่ยวข้อง