
Codex CLI 0.160.1 แก้ remote MCP environment บน Windows—preserve เท่าที่ต้องใช้ อย่าส่งทั้งถุง
OpenAI ออก Codex CLI 0.160.1 วันที่ 6 ตุลาคมตามเวลาไทย เป็น patch เดียวที่แก้การเปิด remote stdio MCP server: เมื่อผู้ใช้กำหนด remote environment variables เอง ระบบต้องยังรักษา SYSTEMROOT, TEMP และ TMP ของ Windows executor ไว้ มิฉะนั้น process บน Windows อาจเริ่มไม่ได้หรือหา temporary directory ไม่เจอครับ
ผมตรวจ release/tag ทางการ, metadata ของ npm 0.160.1, digest ของ release assets, เอกสาร security และ advisories แบบอ่านอย่างเดียว ไม่ได้ดาวน์โหลด ติดตั้ง หรือรัน binary/remote installer รุ่นนี้ ผ่านเกณฑ์คัดกรอง ณ วันที่ตรวจ ภายใต้การจำกัด env, filesystem, shell, network และ MCP ตามงานจริง
สรุป 30 วินาที
- 0.160.1 backport การรักษา environment พื้นฐานของ Windows executor เมื่อ remote stdio MCP ถูกเปิดจาก Unix host พร้อม env ที่ระบุเอง
- fix นี้แก้ availability/compatibility ไม่ได้เพิ่มสิทธิ์ให้ MCP โดยเจตนา แต่ environment คือช่องส่ง secret และ config จึงต้อง allowlist ไม่ใช่ส่ง
process.envทั้งก้อน SYSTEMROOTจำเป็นกับการเริ่มโปรแกรม Windows หลายชนิด ส่วนTEMP/TMPกำหนดพื้นที่ไฟล์ชั่วคราว การรักษาค่าเหล่านี้ช่วยให้ child process ทำงานในบริบท executor ที่ถูกต้อง- asset macOS arm64 tarball มี SHA-256
670af2b0…944984d0ใน GitHub release metadata; npm มี integrity/signature ตามช่องทาง registry - advisory ระดับสูง CVE-2025-59532 กระทบรุ่นเก่า 0.2.0–0.38.0 และแก้ตั้งแต่ 0.39.0; 0.160.1 อยู่นอกช่วงที่ประกาศ ณ วันที่ตรวจ
- อัปเดตแบบ pin version, ตรวจ provenance, ทดสอบด้วย MCP จำลองที่ไม่มี credential และตรวจว่า env นอก allowlist ไม่ข้ามไป remote process
ทำไมเกี่ยวกับคุณ
ทีมที่พัฒนาอยู่บน macOS/Linux แต่อาศัย Windows runner มักเห็นบั๊ก “ทำงาน local แต่ process remote เปิดไม่ได้” Environment เหมือนถุงเครื่องมือเริ่มงาน: ถ้าลืมกุญแจระบบกับที่วางเศษงาน ช่างเริ่มไม่ได้ แต่ถ้ายกทั้งลิ้นชักไปด้วย เราอาจส่ง token, proxy password หรือ cloud credential ที่ไม่เกี่ยวข้องข้าม boundary
MCP server ไม่ใช่แค่ library ใน process เดียว มันอาจเป็น executable คนละ host มี filesystem, network และ secret access ของตัวเอง การแก้ env จึงต้อง review สองด้านพร้อมกัน: process เริ่มได้ตามปกติ และไม่มี ambient authority ไหลเพิ่มโดยไม่ตั้งใจ
ทำงานยังไง: กระเป๋าเดินทางสองชั้น
host ฝั่ง Unix สร้างคำสั่ง remote แล้ว executor ฝั่ง Windows เปิด stdio server หาก config ระบุ env แบบ explicit implementation อาจสร้าง environment ใหม่จากรายการนั้นจนลืมค่าระบบเดิม Patch นี้รักษาค่าสามตัวจาก Windows startup environment แล้วผสมกับค่าที่กำหนดให้ remote process
SYSTEMROOT ชี้ราก Windows และช่วยให้ system components ถูก resolve ถูกบริบท TEMP กับ TMP บอกตำแหน่งไฟล์ชั่วคราว แต่คำว่า preserve ไม่ควรขยายเป็น inherit ทุกตัว เพราะ environment ปกติอาจมี GITHUB_TOKEN, AWS_*, database URL, proxy credential หรือ tracing headers ที่ MCP ไม่ต้องใช้
สำหรับ security boundary ให้สร้าง env ใหม่จาก allowlist: ระบบพื้นฐานที่จำเป็น + config เฉพาะ MCP + secret อายุสั้นที่ scope แคบเมื่อจำเป็นจริง จากนั้น deny/log key อื่นและตั้ง temp directory ในพื้นที่ executor ที่จำกัดสิทธิ์กับ quota
หลักฐานที่ตรวจ
Release rust-v0.160.1 ใน repository openai/codex ระบุ bug fix เดียวและลิงก์ PR backport Windows remote MCP environment preservation จึงมี scope ชัดกว่า release ใหญ่ ไม่มีข้ออ้างว่ารุ่นนี้เพิ่มฟีเจอร์อื่นที่ไม่ได้อยู่ใน changelog
GitHub release metadata ให้ digest ต่อ asset ตัวอย่าง codex-aarch64-apple-darwin.tar.gz เป็น 670af2b049d9c95afb74d7da385f30c5033d13a07175001dd8958c51944984d0 และมี Sigstore bundle สำหรับ Linux musl บาง asset ระดับ signature ต่างตามช่องทาง จึงต้องตรวจ artifact ที่ติดตั้งจริง ไม่อ้าง asset อื่นแทน
npm @openai/codex 0.160.1 เป็นช่องทาง package registry ที่แยกจาก binary release การตรวจ npm ต้องใช้ integrity/signature ของ tarball registry ไม่ใช่ SHA ของ binary ข้ามช่องทาง หน้า advisory ยังไม่แสดง high/critical ที่กระทบ 0.160.1 โดยไม่มี mitigation ณ วันที่ตรวจ แต่ข้อมูลนี้ไม่ครอบคลุม zero-day
เอกสาร security ของ Codex ใช้ยืนยันว่าความปลอดภัยพึ่ง sandbox, approval และ network policy ร่วมกัน ไม่ใช่ version number อย่างเดียว จาก publisher, tag, changelog, registry provenance, per-asset digest และ advisory รุ่นนี้จึง ผ่านเกณฑ์คัดกรอง ณ วันที่ตรวจ 2026-10-06
เงินและผลกระทบ
Patch ลดเวลาไล่บั๊ก remote Windows และลด retry จาก process startup failure แต่ env leakage หนึ่งครั้งอาจนำไปสู่ credential rotation, incident response และ lateral movement ที่แพงกว่าเวลาที่ประหยัด ทีมควรวัด startup success, env-key count, denied env, temp write, MCP tool call และ egress แยกกัน
ทดสอบบน image Windows จริงที่องค์กรใช้ เพราะ path, service account, temp ACL และ remote transport ต่างกัน อย่าเปิด --dangerously-bypass-approvals-and-sandbox เพื่อให้ integration ผ่านเร็ว เพราะจะทำให้เราพิสูจน์อะไรเกี่ยวกับ boundary ไม่ได้เลย
สิ่งที่ยังไม่ชัดและแหล่งข่าวพูดไม่ตรงกัน
Release note ระบุสามตัวแปรที่ preserve แต่ไม่ได้แจกแจง matrix ครบของ merge precedence, empty value, case-insensitive environment keys บน Windows หรือ behavior เมื่อ temp path ใช้ไม่ได้ ทีมต้องเขียน contract test ของตนเอง
Digest บอกว่าไฟล์ตรงกับ artifact บน release ไม่ได้พิสูจน์ว่า code/runtime ไม่มีช่องโหว่ และ advisory ที่ว่างสำหรับรุ่นนี้ไม่ได้แปลว่าไม่มีปัญหาใหม่ Remote MCP server เองมี dependency/advisory คนละชุด ต้องตรวจแยก
วิธีใช้ให้ปลอดภัยขึ้น
- pin
0.160.1และตรวจ integrity/digest ตามช่องทางติดตั้งจริง - ใช้ MCP server จาก publisher/repository ที่รู้จักและ pin version/digest ของมันด้วย
- สร้าง env allowlist เริ่มจาก
SYSTEMROOT,TEMP,TMPกับค่าที่ MCP ต้องใช้จริง ห้าม forward environment ทั้ง process - ใช้ secret อายุสั้น scope ต่อ server และ redact key/value จาก log กับ crash report
- จำกัด filesystem ที่ workspace ทดลอง ปิด network เป็นค่าเริ่มต้น แล้ว allowlist domain เมื่อจำเป็น
- ทดสอบ temp path permissions, quota, symlink/reparse point และ cleanup บน Windows executor
- บังคับ human approval สำหรับ push, publish, deploy และ action ย้อนกลับยากแม้ MCP เรียกได้
แล้วเราควรทำอะไร
ทีมที่ใช้ remote MCP อยู่แล้วควร pin รุ่นนี้ใน canary ก่อน ตรวจว่า server เริ่มได้บนระบบที่รองรับทั้งหมด และ diff environment ที่ child process เห็นกับ allowlist ที่ตั้งใจไว้ หากต้องเพิ่มตัวแปร ให้เพิ่มทีละชื่อพร้อม owner และเหตุผล ไม่คัดลอก environment ทั้งก้อน จากนั้นค่อยขยาย rollout พร้อม alert เมื่อ server restart ถี่, tool catalog เปลี่ยน หรือมี network destination ใหม่
ทีมที่ยังไม่ใช้ remote MCP ไม่จำเป็นต้องเปิดเพราะ release นี้ ให้เก็บค่า default ที่ปิดไว้ สร้าง threat model ของ server, transport และ credential แล้วเริ่มจาก tool read-only ใน repository ทดลองก่อน ทุกคำสั่งที่แก้ remote state, publish, deploy หรือเข้าถึง secret ต้องมี approval และ evidence แยกจากการที่ process เริ่มทำงานสำเร็จ
ความเสี่ยงคงเหลือ
MCP server ที่เชื่อถือได้อาจถูก prompt injection ผ่านข้อมูลที่มันอ่าน Child process อาจสร้าง process ต่อหรืออ่าน credential จากช่องทางอื่นนอก env เช่นไฟล์ config, keychain หรือ ambient identity Temp directory อาจเป็นจุด symlink/race หรือพื้นที่เก็บข้อมูลลับหลัง crash
Remote transport และ host policy อาจเปลี่ยนหลังอัปเดต การผ่าน test ครั้งเดียวไม่แทน runtime monitoring ต้องมี kill switch, audit trail และวิธีหยุด MCP โดยไม่หยุดงานทั้งหมด
Recap
- pin 0.160.1 และตรวจ provenance ของ artifact จริง
- preserve เฉพาะ env ระบบที่จำเป็น ไม่ forward ทั้งถุง
- แยก secret ต่อ MCP และจำกัดอายุ/scope
- ทดสอบ Windows temp/ACL/reparse point บน image จริง
- จำกัด filesystem, network, shell และ side effect คนละชั้น
- เก็บ residual risk และ kill switch หลัง rollout
Patch นี้เล็กแต่แตะรอยต่อสำคัญครับ หลักที่ดีคือให้ process พกกุญแจเริ่มงานครบ โดยไม่ยกพวงกุญแจทั้งอาคารข้ามเครื่องไปด้วย