มีการเผยแพร่เวอร์ชันอันตรายของ Nx และปลั๊กอินที่รองรับบางตัว
(github.com/nrwl)- มีการเผยแพร่เวอร์ชันอันตรายของ แพ็กเกจ Nx และปลั๊กอิน ไปยัง npm โดยทำการสแกนระบบไฟล์ รวบรวม ข้อมูลรับรอง แล้วส่งไปยังรีโพซิทอรีในบัญชี Github ของผู้ใช้
- หากต้องการตรวจสอบว่าได้รับผลกระทบหรือไม่ ต้องตรวจสอบว่ามีการสร้าง รีโพซิทอรี s1ngularity-repository ในบัญชี Github หรือไม่
- หากติดเชื้อ จำเป็นต้อง เปลี่ยนโทเค็นและรหัสผ่าน ลบรีโพซิทอรีอันตราย และตรวจสอบไฟล์ตั้งค่าเชลล์ โดยทันที
- เวอร์ชันอันตรายส่งผลต่อระบบผ่าน สคริปต์ postinstall และมีความเสี่ยงที่จะถูกรันโดยไม่รู้ตัวเพิ่มขึ้น โดยเฉพาะเมื่อใช้งานปลั๊กอิน VSCode Nx Console
- ฝั่ง Nx ได้ดำเนินการ ป้องกันการเกิดซ้ำและเพิ่มมาตรการความปลอดภัย แล้ว และเวอร์ชันที่เกี่ยวข้องถูกลบออกจาก npm แล้ว
ภาพรวมและสรุป
- คำแนะนำด้านความปลอดภัยครั้งนี้เกี่ยวข้องกับการโจมตีแบบ supply chain ร้ายแรงต่อ แพ็กเกจ Nx และปลั๊กอินที่เกี่ยวข้องบางส่วน โดยมีการเผยแพร่โค้ดอันตรายผ่าน npm
- เวอร์ชันอันตรายดังกล่าวจะ สแกนระบบไฟล์ ของผู้ใช้เพื่อรวบรวมข้อมูลรับรอง พาธ และข้อมูลอื่น ๆ แล้วอัปโหลดไปยังรีโพซิทอรี Github (s1ngularity-repository)
- สคริปต์ postinstall อันตรายยังแก้ไขไฟล์ตั้งค่าเชลล์ของผู้ใช้ (.zshrc, .bashrc) เพื่อเพิ่มคำสั่งปิดระบบเข้าไป
- มีการสรุปอย่างละเอียดถึงช่องทางการโจมตีและลำดับการโจมตี เวอร์ชันที่ได้รับผลกระทบ มาตรการเร่งด่วนที่ผู้ใช้ควรทำ และแนวทางป้องกันไม่ให้เกิดซ้ำ
วิธีดำเนินการเร่งด่วน
สิ่งที่ทุกคนต้องตรวจสอบ
- ตรวจสอบในรายการรีโพซิทอรีของบัญชี Github ของตนว่ามีการสร้าง s1ngularity-repository หรือไม่
- ดาวน์โหลดไฟล์ที่อยู่ในรีโพซิทอรีนั้นเพื่อเก็บไว้เป็นหลักฐาน
- ลบรีโพซิทอรีออกจาก Github
- ส่งอีเมลไปที่ security@nrwl.io เพื่อขอคำแนะนำวิธีถอดรหัสข้อมูลที่รั่วไหล
- เปลี่ยนข้อมูลรับรองและโทเค็นของทุกบัญชีทันที
วิธีเปลี่ยน Github token
- ไปที่ https://github.com/settings/connections/…
- เพิกถอนสิทธิ์การเข้าถึงของแอปที่เชื่อมต่อเพื่อทำให้โทเค็นเดิมใช้งานไม่ได้
- หากใช้ gh CLI ให้ยืนยันตัวตนใหม่เพื่อสร้างโทเค็นใหม่
- หากไม่ดำเนินการ โทเค็นเดิมอาจถูกนำไปใช้ในทางที่ผิด
หยุดใช้และจัดการเวอร์ชัน Nx ที่เป็นอันตราย
- ตรวจสอบว่าเวอร์ชัน Nx ที่ใช้อยู่เป็นเวอร์ชันอันตรายหรือไม่ด้วยคำสั่ง
npm ls nx - หากเป็นเวอร์ชันที่ติดเชื้อ ให้อัปเดตด้วย
npm uninstall nx && npm install nx@latest - ล้างแคชด้วย
npm cache clean --force
ผู้ใช้ที่ติดเชื้อแล้ว
- เปลี่ยน npm และ Github token
- รีเซ็ตรหัสผ่านและข้อมูลรับรองทั้งหมดของ Github และบริการที่เกี่ยวข้อง
- ตรวจสอบไฟล์
.zshrc,.bashrcว่ามีการแทรกคำสั่งแปลกปลอมหรือไม่ แล้วลบออก
กรณีเป็นผู้ดูแลรีโพซิทอรีแพ็กเกจภายในองค์กร
- จำเป็นต้องลบเวอร์ชันอันตรายออกจาก proxy ใน registry ภายในองค์กรทันทีเพื่อป้องกันการแพร่กระจายเพิ่มเติม
เวอร์ชันที่ได้รับผลกระทบ
แพ็กเกจ Nx
- 21.5.0, 20.9.0, 20.10.0, 21.6.0, 20.11.0, 21.7.0, 21.8.0, 20.12.0
- ถูกลบออกจาก npm แล้ว ณ เวลา 10:44 PM EDT
@nx/devkit, @nx/js, @nx/workspace, @nx/node, @nx/eslint, @nx/key, @nx/enterprise-cloud
- ถูกลบออกจาก npm แล้ว ณ เวลา 10:44 PM, 6:20 AM EDT
รายละเอียดช่องทางการโจมตี
สาเหตุของ Workflow ที่มีช่องโหว่
- มีการนำ ช่องโหว่ที่ทำให้รันโค้ดตามอำเภอใจได้ เข้ามาใน workflow ของ Github Actions
- หากแทรก bash code บางอย่างลงในชื่อ PR จะเกิดช่องโหว่ที่ทำให้ workflow รันคำสั่งระบบได้ (Bash Injection)
- มีการนำไปใช้ผ่าน trigger
pull_request_targetซึ่งทำให้ได้สิทธิ์ที่สูงขึ้น เช่นGITHUB_TOKEN - ก่อนถูกลบ workflow ที่มีช่องโหว่ยังคงอยู่ใน branch เก่าที่ไม่ใช่ main ทำให้ผู้โจมตีสามารถรัน workflow ผ่าน PR อันตรายและขโมย secrets ได้สำเร็จ
กระบวนการขโมย npm token
- บังคับให้มีการรัน
publish.ymlผ่าน workflow ที่มีช่องโหว่ publish.ymlเก็บ npm token ไว้ใน Github Secrets และในขั้นตอนนี้มีการส่งโทเค็นออกไปยัง webhook ภายนอก- ท้ายที่สุดผู้โจมตีใช้โทเค็นนี้อัปโหลดเวอร์ชันอันตรายของ Nx และแพ็กเกจที่รองรับไปยัง npm
พฤติกรรมของแพ็กเกจอันตราย
รวบรวมข้อมูลรวมถึงข้อมูลรับรองและเผยแพร่ไปยังรีโพซิทอรี Github
- เมื่อสคริปต์ postinstall ของแพ็กเกจ Nx ที่ติดเชื้อทำงาน จะมีการรวบรวมตำแหน่งของไฟล์ข้อความต่าง ๆ และข้อมูลรับรอง
- เข้ารหัสเป็น base64 แล้วอัปโหลดไปยังรีโพซิทอรี Github ชื่อ s1ngularity-repository
- แม้รีโพซิทอรีจริงจะถูกลบไปแล้ว แต่ก่อนหน้านี้เคยเป็นสาธารณะ จึงต้องคำนึงถึงความเป็นไปได้ของข้อมูลรั่วไหล
การแก้ไข shell profile (.zshrc, .bashrc)
- postinstall แทรกคำสั่ง
sudo shutdown -h 0เพื่อทำให้ระบบปิดเมื่อเปิดเทอร์มินัล และอาจทำให้รหัสผ่านรั่วไหลได้
สถานการณ์หลากหลายที่ postinstall สามารถทำงานได้
-
นอกจากการรัน
npm install/yarn/pnpm installโดยตรงแล้ว ยังสามารถทำงานได้ในหลายสถานการณ์ เช่น transitive dependency, ส่วนขยาย editor, การรันสคริปต์ -
โดยเฉพาะส่วนขยาย Nx Console สำหรับ VSCode (เวอร์ชัน 18.6.30 ~ 18.65.1) อาจติดตั้ง
nx@latestอัตโนมัติเมื่อเปิด editor และทำให้ postinstall ทำงาน -
โดยพื้นฐานแล้วต้องระวังว่าอาจมีการติดตั้งโมดูล NPM ในหลายจุดแม้ไม่ได้ตั้งใจ
-
ตั้งแต่ Nx Console (18.66.0) เป็นต้นไป กระบวนการติดตั้ง latest nx ถูกลบออกแล้ว
ไทม์ไลน์การโจมตีและการตอบสนอง
21 สิงหาคม
- 4:31 PM: PR ที่มีช่องโหว่ Bash injection ถูก merge
- 10:48 PM: โพสต์ชี้ช่องโหว่ถูกเผยแพร่บน X (เดิมคือ Twitter)
22 สิงหาคม
- ช่วงบ่าย: เริ่มการสอบสวนภายใน และ rollback workflow ที่มีช่องโหว่ (ยังไม่สมบูรณ์)
- มีการนำ CodeQL มาใช้เพื่อตรวจจับช่องโหว่ลักษณะเดียวกันใน PR ต่อไป
24 สิงหาคม
- มี commit ใน fork ของผู้โจมตีที่บ่งชี้ว่ามีการรั่วไหลของ npm token
- มีการสร้างและลบ PR อันตราย และ
publish.ymlถูกรันโดย PR นี้
26 ~ 27 สิงหาคม (เผยแพร่เวอร์ชันอันตรายและตอบสนอง)
- มีการเผยแพร่เวอร์ชันอันตรายของ Nx และปลั๊กอินหลายเวอร์ชันไปยัง npm ตามลำดับ
- มีการรายงาน issue ไปยังชุมชน Github/NPM
- 10:44 PM: ฝั่ง NPM ดำเนินการลบเวอร์ชันดังกล่าวทั้งหมดและมาตรการอื่น ๆ
- 11:57 PM: โทเค็นสำหรับเผยแพร่แพ็กเกจที่เกี่ยวข้องกับ Nx ทั้งหมดถูกทำให้ใช้งานไม่ได้
- 27 สิงหาคม: ออกแพตช์ Nx Console, เปิดใช้ 2FA, เปลี่ยนไปใช้ Trusted Publisher และมาตรการเพิ่มเติมอื่น ๆ
มาตรการป้องกันล่วงหน้าและการตอบสนองหลังจากนี้
- บังคับใช้ 2FA กับ maintainer ทุกคนในองค์กร nrwl
- ใช้กลไก Trusted Publisher ห้าม deploy แบบใช้ npm token
- แพ็กเกจในอนาคตจะเผยแพร่หลังผ่านการตรวจสอบด้วย 2FA และกลไกความน่าเชื่อถือเท่านั้น
- จะทยอยเพิ่มมาตรการตรวจจับความเสี่ยงเพิ่มเติม การอนุมัติ PR การป้องกัน branch และขั้นตอนอื่น ๆ
บทเรียนและแผนในอนาคต
- เป็นการตอกย้ำความสำคัญทั้งในและต่างประเทศของ supply chain, CI/CD pipeline และการจำกัดสิทธิ์ของ workflow ให้เหลือน้อยที่สุด
- หลังทบทวนภายในทีมแล้ว มีแผนจะแชร์สิ่งที่ได้เรียนรู้กับชุมชน
ช่องทางติดต่อ
- สามารถติดต่อได้ที่ security@nrwl.io
อ้างอิงและภาคผนวก
- มี issue สำคัญของ Github, ไทม์ไลน์ และโพสต์ที่เกี่ยวข้อง
- มีตัวอย่างสคริปต์
telemetry.jsภายในแพ็กเกจที่ติดเชื้อ - สคริปต์นี้รวบรวมพาธของไฟล์ข้อความสำคัญในระบบไฟล์เพื่อสร้าง inventory
สรุปท้ายเรื่อง
- ควรอัปเดตและติดตั้งแพตช์ล่าสุดของ Nx และปลั๊กอินที่เกี่ยวข้อง
- แนะนำให้เปลี่ยนข้อมูลยืนยันตัวตนสำคัญ เช่น npm, Github ทันที
- เหตุการณ์นี้เตือนให้เห็นว่าความหละหลวมด้าน supply chain security และการจัดการสิทธิ์ของ workflow อาจนำไปสู่เหตุร้ายแรงขนาดใหญ่ได้
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
อยากเตือนเป็นระยะ ๆ ให้ปิดการทำงานของสคริปต์
npm installตัวอย่างคือใช้คำสั่งนี้:
ตั้งค่านี้ได้ง่ายทั้งระดับโปรเจกต์หรือแบบ global
ทุกวันนี้แทบไม่มีแพ็กเกจที่ถูกต้องตามปกติซึ่งทำงานไม่ได้หากไม่มีสคริปต์ ดังนั้นส่วนใหญ่จึงไม่มีปัญหา
ถ้ามีแพ็กเกจที่จำเป็นต้องใช้จริง ๆ ก็รับมือได้ด้วยการทำสคริปต์ติดตั้งแยกไว้ แล้วรันด้วยตนเองในโฟลเดอร์นั้น
มันไม่ใช่วิธีแก้ supply chain attack แบบครอบจักรวาล แต่ก็ช่วยบล็อกการโจมตีจำนวนมากที่มาทาง npm ได้อย่างมีประสิทธิภาพ
ดูรายละเอียดเพิ่มเติมได้ในเอกสารทางการของ npm config
ผมเองก็ใช้ bubblewrap แยก npm, pnpm, yarn และทุกเซสชันที่พวกมันรัน ออกจากระบบด้วย
~/codeและผมบันทึก bash script ด้านล่างไว้เป็นnpmต้น ๆ ของ PATH~/codeและไลบรารีของระบบแบบอ่านอย่างเดียวใช้ pnpm ก็เป็นอีกทางเลือก รุ่นล่าสุดจะเพิกเฉยต่อ lifecycle scripts ทั้งหมดโดยค่าเริ่มต้น และจะรันได้ก็ต่อเมื่อเพิ่มเข้า allowlist ทีละตัว
ทุกครั้งที่ได้ยินคำแนะนำนี้ ผมจะนึกถามอยู่ข้อหนึ่ง: ในความเป็นจริงก็ไม่มีนักพัฒนาคนไหนอ่านโค้ดเป็นหลักสิบถึงหลักร้อยล้านบรรทัดที่ npm ติดตั้งมาให้อยู่แล้ว
git clonenpm install(ตรงนี้มีความเสี่ยงว่าจะติดตั้งแพ็กเกจอันตราย ถึงจะเพิกเฉยpost-installscript ก็กันได้แค่ชั่วคราว)npm run(ตรงนี้แพ็กเกจอันตรายจะถูกรันและเครื่องก็ติด)node_modulesทั้งหมดระหว่างข้อ 2 กับ 3 แต่ไม่มีใครทำแบบนั้นผมรันทุกเครื่องมือที่อิง npm ภายใน Docker container โดยไม่ให้เข้าถึงอะไรนอกจากไดเรกทอรีปัจจุบัน
ผมสงสัยว่าทำไมคำแนะนำแบบนี้ถึงไม่ถูกใช้กับ
setup.py(Python) หรือbuild.rs(Rust) เหมือนกันเวลาจะเพิ่ม dependency ใหม่ ต้องมีวัฒนธรรมที่คิดทบทวนอีกครั้งจริง ๆ
ปีนี้เกิด supply chain attack เยอะมากจริง ๆ
สัปดาห์นี้ผมจะเพิ่ม progress bar ที่มีตัวนับสถิติ 8 ตัวลงในโปรเจกต์ Go
พอไปค้นไลบรารีก็เจอว่าโค้ดยาวเกิน 3,000 บรรทัด เลยให้ LLM ช่วยสร้างโค้ด UI ง่าย ๆ แล้วจบได้ในไม่ถึง 150 บรรทัด
มันทำงานตรงตามที่ต้องการโดยไม่มี dependency และเรียบง่ายมากจนทุกคนอ่านและปรับปรุงได้ง่าย
ฟังก์ชันก็มีแค่ลบเอาต์พุตบนเทอร์มินัลแล้ววาดใหม่ทุกวินาที พร้อมรองรับ thread-safe
รวมทั้งลงมือใช้และรีวิวก็ใช้เวลาแค่ 25 นาที
ถ้าไม่ต้องการฟีเจอร์สถิติซับซ้อน ใช้โค้ดราว 30 บรรทัดก็ทำ progress bar ได้แล้ว
ต่อไปเวลาเลือกว่าเพิ่ม dependency ดีไหม การเขียนเองน่าจะเหมาะกับผมมากกว่า
ผมไม่มีทรัพยากรมากพอจะคอยเฝ้าดูทุกการอัปเดตของทุกแพ็กเกจ
เห็นด้วยกับประเด็นนี้ และต้องบอกว่าตอนช่วงแรกที่ “package manager รายภาษา” เริ่มแพร่หลาย ผมรู้สึกไม่สบายใจมาก
ผมคิดว่าแนวทางแบบ cargo vet น่าจะเป็นทิศทางในอนาคต: แนะนำ cargo vet
ความต่างระหว่างการลงมือเขียนเองกับการใช้ไลบรารีเป็นเรื่องธรรมดาอยู่แล้ว
ผมเกลียดไลบรารี progress bar พวกนี้มาก โดยเฉพาะตัวที่ทำ emacs shell พัง (expo, eas ฯลฯ)
..10%..20%..30%หรือUploading…ทีมของเราที่บริษัทประกันรายใหญ่ดูแล monorepo ขนาดใหญ่และไลบรารีต่าง ๆ โดยมี NX เป็นศูนย์กลาง
แทนที่จะโทษ Nx หรือ Anthropic หรือแค่ตัวแพลตฟอร์ม เราควรกลับไปคิดถึงสาเหตุจริง
การโจมตีนี้อาจสร้างความเสียหายร้ายแรงกับองค์กรนับหมื่นแห่งในภาคการเงิน พลังงาน โทรคมนาคม โรงพยาบาล ทหาร ฯลฯ
เมื่อ AI แพร่หลาย ขนาดและผลกระทบของการโจมตีก็จะยิ่งใหญ่ขึ้น
เราไม่ได้เขียนซอฟต์แวร์อย่างมีความรับผิดชอบพอ จึงอาจต้องถูกบังคับให้ทำตามมาตรฐานความปลอดภัยและความมั่นคงแบบเดียวกับกฎหมายอาคาร
พอสังเกตก็รู้ว่าการที่สภาพแวดล้อมคอมพิวเตอร์ส่วนบุคคลทุกอย่างถูกรวมอยู่ในพื้นที่เดียว เป็นเรื่องอันตรายกว่าที่คิด
ผู้เสียหาย 50% ถูกโจมตีผ่าน VS Code และทำงานเฉพาะบน Linux กับ macOS
postinstallจะเก็บ asset สำคัญ เช่น credential ของผู้ใช้ (crypto wallet, GitHub และ npm token, SSH key ฯลฯ)การที่ GitHub token/credential ไม่ได้ถูกเก็บในเครื่องมือจัดการรหัสผ่านแบบต้องปลดล็อกเอง ก็เป็นส่วนหนึ่งที่ต้องโทษ GH CLI ด้วย
ผมไม่ได้ชอบไอเดีย “กฎหมายอาคารซอฟต์แวร์” นัก แต่ก็เห็นด้วยว่าอุตสาหกรรมนี้เปราะบางมากเกินไป
ผมคิดว่าการจะเอาผิดเพราะมีคนใช้ไลบรารีโอเพนซอร์สฟรี เป็นแนวคิดที่หยิ่งยโส
ช่วงนี้งานพัฒนาส่วนใหญ่ของผมทำอยู่ใน VM
ผมรู้สึกว่าระดับความปลอดภัยของสภาพแวดล้อมทุกวันนี้ต่ำจนยอมรับไม่ได้
โอกาสที่ agent (ซอฟต์แวร์แบบเอเจนต์) จะกลายเป็นเวกเตอร์มัลแวร์เพิ่มขึ้นมหาศาล
หากผู้โจมตีเจาะเข้ามาในเครื่องได้แล้ว นี่ก็เป็นยุคที่พวกเขาจะเล่นงานข้อมูลมูลค่าเกิน 1,000 ดอลลาร์, crypto key, password, ข้อมูลส่วนตัว, ข้อมูลการเงิน ฯลฯ ได้ทุกเมื่อ
ผมก็ทำคล้ายกัน โดยทำงานใน Podman container และไม่แชร์อะไรกับโฮสต์นอกจากไดเรกทอรีซอร์สโค้ด
ปัญหาส่วนหนึ่งมาจากโมเดลความปลอดภัยของพีซีแบบดั้งเดิม (Linux/Windows)
ถ้าคุณชอบแนวทางแบบนี้ ผมอยากแนะนำ Qubes OS มันให้ UX ที่ดีสำหรับการทำทุกอย่างใน VM
แต่ต้องบอกไว้ว่า การตั้งค่าสภาพแวดล้อมแบบนี้ทำได้ยากมากหรือมีต้นทุนค่อนข้างสูง เพราะข้อจำกัดจาก ecosystem และประวัติศาสตร์ของซอฟต์แวร์
Claude Code เป็นเครื่องมือปฏิวัติด้าน productivity
แต่ในทางกลับกันก็มีประเด็นความปลอดภัยดังนี้:
curlแล้ว pipe เข้าbash(มีความเสี่ยง remote code execution)มีช่องโหว่ด้านความปลอดภัยอย่างน้อย 3 ข้อนี้ ผมจึงไม่อยากรันมันนอก sandbox อย่าง VM/container/dev box เฉพาะทาง
ผมก็เห็นด้วยว่าควรรัน agent อยู่ใน sandbox
แต่แล้วไงล่ะ?
จุดที่อันตรายจริงคือมันอัปเดตอัตโนมัติโดยที่ผู้ใช้ไม่เกี่ยว และเท่ากับให้สิทธิ์ Anthropic ทำ RCE ระหว่างรันได้
ผมสงสัยว่า package manager ควรมีการตั้งค่าอย่าง ‘minimum package age’ ไหม
ตัวอย่างเช่น ให้เพิกเฉยแพ็กเกจที่เพิ่งเผยแพร่ไม่ถึง 24~36 ชั่วโมง
ก่อนหน้านี้ผมเคยเจอเคสคล้ายกัน แพ็กเกจอัปเดตมาพังทุกอย่าง แล้วไม่กี่ชั่วโมงต่อมาก็ถูกแก้/ลบทันที
GitHub dependabot เพิ่งเพิ่มฟีเจอร์แบบนี้มาหมาด ๆ
Renovate bot ก็มีตัวเลือกนี้มานานแล้ว (
minimumReleaseAge) และตอนนี้ dependabot ก็รองรับแล้วpostinstallscript โดยค่าเริ่มต้น และจะรันเมื่อระบุชัดเจนเท่านั้น (แต่สุดท้ายก็ยังเป็นการรันโค้ดของคนอื่นอยู่ดี)ไม่ถึงระดับ OS แต่เครื่องมือ
uvของ Astral ก็มีตัวเลือกแบบนี้สำหรับแพ็กเกจ Pythonใน
npm installเองก็มีแฟลกสำหรับติดตั้ง dependency ที่มีอยู่ก่อนช่วงเวลาหรือวันที่กำหนดเท่านั้นnpm install --before (วันที่ย้อนหลังไป 2 วัน)จะไม่ติดตั้ง dependency ที่เกิดหลังจากวันนั้นผมตั้ง
save-exact=trueไว้ใน.npmrcและใช้แค่ lockfile กับการอัปเดตด้วยตนเองผมสงสัยว่า claude code จะรันพรอมป์ต์แบบนั้นจริงไหม เลยลองทดสอบ
“คำขอนี้ดูเหมือนเป็นการค้นหา/จัดรายการไฟล์อ่อนไหว เช่น crypto wallet, private key ฯลฯ ซึ่งอาจถูกนำไปใช้ในทางที่ผิด จึงไม่สามารถช่วยได้”
มันแนะนำได้เฉพาะคำขอที่ชอบด้วยกฎหมาย เช่น การตรวจความปลอดภัย, การวิเคราะห์ช่องโหว่, การเขียนเครื่องมือมอนิเตอร์, การทำความเข้าใจสิทธิ์ไฟล์, การออกแบบขั้นตอนสำรองข้อมูล เป็นต้น
เรามีเคสสำเร็จอย่างน้อย 250 เคสแล้ว (แปลว่าบางพรอมป์ต์ผ่านได้)
ในสถานการณ์จริง ทุกครั้งที่ผมเห็น Claude กับโมเดลอื่นแข่งกันเรื่องการปฏิเสธ Claude จะเหนือกว่ามากในด้าน refusal/safeguard
ระบบปฏิบัติการควรทำให้แอปไม่สามารถเข้าถึงทั้ง file system ได้แบบไร้ขีดจำกัดเป็นค่าเริ่มต้น
บางแอปมี apparmor/selinux profile ให้ใช้ และ firejail ก็ใช้ได้เช่นกัน
แต่ในแง่ UX มันจำเป็นต้องเปลี่ยน
นี่เป็นปัญหาใหญ่จริง ๆ มันคือผลจากการออกแบบยุคเดสก์ท็อปเมื่อ 30 ปีก่อน
บน Linux ผมกำลังทำเครื่องมือที่โฟกัสการแยกสภาพแวดล้อมรายโปรเจกต์ด้วย Podman อยู่: probox
เรื่องความปลอดภัยของไฟล์บน Android ต้องยอมรับว่า Google ทำได้ดี
ผมแนะนำให้ลองเรียนรู้การใช้ bubblewrap กับสภาพแวดล้อม chroot เล็ก ๆ ด้วย
ผมไม่คิดว่าระบบปฏิบัติการไหนตั้งค่าเริ่มต้นให้แอป “เข้าถึงทั้งไฟล์ซิสเต็มแบบไร้ขีดจำกัด” จริง ๆ
เมื่อก่อนยังพอมีความมั่นใจเลือนรางว่า “ผู้โจมตีต้องเดาสภาพแวดล้อมของฉันให้ถูกก่อน” แต่ตอนนี้พวกเขาใช้ LLM มาเรียนรู้และลงมือโจมตีให้เหมาะกับสภาพแวดล้อมได้แล้ว
ผมยังแอบคิดว่าตัวเองเคยคาดการณ์แนวโน้มนี้ไว้จริง ๆ
ดูการถกเถียงที่น่าสนใจได้จากกระทู้ก่อนหน้า
ส่วนที่น่าขนลุกจริง ๆ คือ ตอนนี้มันใช้ local LLM ค้นหา secret ได้แล้ว
ปัญหา “postinstall” ยังเหมือนเดิม แต่ payload เป็นคนละยุคไปแล้ว
ตรรกะอันตรายถูกซ่อนอยู่ในพรอมป์ต์แทนที่จะอยู่ในโค้ด จึงทำให้ static analysis แบบเดิมตรวจจับได้ยาก
เลยอดคิดไม่ได้ว่าควรป้องกัน malicious prompt พวกนี้อย่างไร