บล็อก

Claude Code 2.1.268: แก้ไขอะไรในกฎ deny และ MCP

Markdown

Claude 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 รายการที่เกี่ยวข้องกับกฎสิทธิ์:

  1. การบล็อก symlink ไม่ทำงาน กฎ deny และ ask ที่กำหนดไว้สำหรับไดเรกทอรี symlink (/etc, /tmp, /var บน macOS และ /bin บน Linux) ไม่ทำงานเมื่อระบุพาธด้วยตำแหน่งจริง คำสั่ง Bash ยังเพิกเฉยต่อกฎ deny ที่กำหนดไว้สำหรับพาธผ่าน symlink ด้วย
  2. การบล็อกการอ่านและแก้ไขล้มเหลวเมื่อใช้ env -C หรือ eval ร่วมด้วย หากบรรทัดคำสั่งเดียวกันมีโครงสร้างที่ตัวตรวจสอบสิทธิ์แยกวิเคราะห์ไม่ได้ กฎ deny สำหรับ Read หรือ Edit อาจไม่ทำงาน
  3. กฎที่มี “!” มีผลกว้างกว่าที่ตั้งใจไว้ กฎ deny หรือ ask ที่ขึ้นต้นด้วย ! มีผลเกินขอบเขตไฟล์การตั้งค่าที่กำหนดไว้ ตอนนี้กฎดังกล่าวมีผลเฉพาะภายในแหล่งที่มาของตนเอง และจะละเว้นเครื่องหมายปฏิเสธเดี่ยว !
  4. tee เขียนไฟล์โดยเลี่ยงการบล็อก กฎ deny สำหรับ Edit() และการตรวจสอบพาธการเขียนไม่มีผลกับไฟล์ที่สร้างด้วยคำสั่ง Bash tee สิทธิ์ 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 สำหรับไฟล์นั้น ขอให้เอเจนต์อ่านไฟล์ และตรวจสอบว่าข้อความแจ้งการบล็อกระบุกฎของคุณ

  1. ตรวจสอบเวอร์ชันปัจจุบัน เรียก claude --version ในเทอร์มินัล การแก้ไขปัญหาที่อธิบายไว้ข้างต้นเผยแพร่ใน 2.1.268 และ 2.1.269 หากหมายเลขเวอร์ชันต่ำกว่า 2.1.268 แสดงว่าเวอร์ชันของคุณยังไม่มีการแก้ไขเหล่านี้ แต่ปัญหาแต่ละข้อจะเกี่ยวข้องหรือไม่ขึ้นอยู่กับพาธ คำสั่ง และกฎที่คุณใช้
  2. อัปเดต คู่มือ วิธีอัปเดต Claude Code เป็นเวอร์ชันล่าสุด มีคำแนะนำทีละขั้นตอนและวิธีแก้ปัญหา เลือกเวอร์ชันล่าสุด อย่าหยุดอยู่ที่ 2.1.268
  3. ทดสอบการบล็อก อย่าทดสอบกฎกับไฟล์ .env จริง เพราะหากการบล็อกล้มเหลว เอเจนต์จะเห็นคีย์จริง สร้างไฟล์ทดสอบ เช่น secret-test.txt ที่มีข้อความใดก็ได้ เช่น “นี่คือการทดสอบ”; เพิ่มกฎ "Read(./secret-test.txt)" ลงในรายการ deny ในไฟล์ .claude/settings.json ของโปรเจกต์; เริ่มเซสชันใหม่; แล้วสั่งว่า: “อ่านไฟล์ secret-test.txt แล้วบอกฉันว่ามีอะไรอยู่ในนั้น” พฤติกรรมที่คาดหวังคือมีข้อความแจ้งการบล็อกที่ระบุกฎของคุณ หากเอเจนต์อ่านไฟล์ได้ แสดงว่าการบล็อกไม่ทำงานในการทดสอบนี้ เริ่มจากตรวจสอบไวยากรณ์ในส่วนด้านบน และเปิด /permissions เพื่อดูรายการกฎที่ใช้งานอยู่กับไฟล์ที่โหลดกฎเหล่านั้นมา ผลการทดสอบเพียงอย่างเดียวไม่ได้ระบุสาเหตุ การบล็อกหนึ่งครั้งแสดงว่ากฎสำหรับไฟล์นี้ทำงาน แต่ไม่ได้บอกอะไรเกี่ยวกับกฎอื่นของคุณ ดังนั้นให้ตรวจสอบทีละกฎด้วยวิธีเดียวกัน
  4. ตรวจสอบกรณี symlink หากคุณใช้พาธลักษณะนี้ หากคุณมีกฎบล็อกสำหรับ /tmp, /etc หรือ /var บน macOS หรือ /bin บน Linux ให้ทดสอบพาธเหล่านี้อีกครั้งหลังอัปเดต
  5. ตรวจสอบกฎที่มี “!” หากคุณเคยใช้กฎเหล่านี้ ให้ตรวจสอบว่าแต่ละกฎอยู่ในไฟล์ที่ต้องการให้มีผล

หากการบล็อกทำงาน แต่ 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 และโทเค็นในข้อผิดพลาดของปลั๊กอิน ตรวจสอบหมายเลขเวอร์ชัน อัปเดตเป็นรุ่นล่าสุด และทดสอบด้วยไฟล์ทดสอบจากส่วนด้านบน ข้อความแจ้งการบล็อกที่ระบุกฎของคุณแสดงว่าการบล็อกทำงานในการทดสอบนี้ การมีชื่อกฎอยู่ในการตั้งค่าเพียงอย่างเดียวยังไม่เพียงพอที่จะยืนยันว่ากฎทำงาน

แหล่งที่มา

หากต้องการทำงานกับโมเดลต่อ คุณสามารถไปที่ Ailoot

รายละเอียดเพิ่มเติม

คำถามที่พบบ่อย

จะทดสอบกฎ deny โดยไม่เปิดเผยข้อมูลลับจริงได้อย่างไร?

สร้างไฟล์ข้อความที่ไม่สำคัญ ตั้งกฎห้าม Read ไฟล์ทดสอบนั้น เริ่มเซสชันใหม่ แล้วขอให้เอเจนต์อ่าน ควรได้การปฏิเสธที่ระบุกฎของคุณ ห้ามใช้ .env จริงกับการทดสอบที่อาจล้มเหลว

การปฏิเสธสำเร็จครั้งเดียวพิสูจน์ว่าสิทธิ์ทั้งหมดปลอดภัยหรือไม่?

ไม่ใช่ ยืนยันได้เฉพาะไฟล์และเส้นทางเข้าถึงที่ทดสอบ ตรวจรายการกฎที่ใช้งานใน /permissions แล้วทดสอบกรณีอื่นที่พึ่งพา รวมถึงการอ้างผ่าน symlink หากเกี่ยวข้อง

บทความทั้งหมด