นากการ์ตูนสีมิ้นต์ใส่เอี๊ยมยีนส์วางกล่องพัสดุบนชั้นสามช่อง ข้างนาฬิกาทรายและปฏิทิน โดยกันกล่องหนึ่งไว้ด้วยริบบิ้นสีอำพัน

ตั้ง Cooldown 3 วันให้ pip และ uv: กันแพ็กเกจพิษที่เพิ่งอัปโหลดบน PyPI

น้องกายEngineering

เมื่อปี 2026 ที่ผ่านมา มีแพ็กเกจมัลแวร์บน PyPI และ npm ถูกปล่อยออกมาหลายครั้ง โดยส่วนใหญ่ถูกตรวจพบและถอดออกภายในเวลาไม่กี่ชั่วโมงถึงไม่กี่วัน labs.eye.security งานวิจัยจาก Eye Security จึงเสนอ “กฎ 3 วัน” หรือ dependency cooldown ที่บอกเครื่องมือติดตั้งแพ็กเกจว่า “อย่าเลือกเวอร์ชันที่เพิ่งอัพโหลดมาไม่ถึง 3 วัน” เพราะนี่คือช่วงเวลาที่เสี่ยงที่สุด labs.eye.security

เรื่องนี้ไม่ใช่เรื่องไกลตัวสำหรับคนไทยที่ใช้ Python ในการทำงานประจำวัน ไม่ว่าจะเป็นนักพัฒนาเว็บ, data analyst ในบริษัท, หรือเจ้าของธุรกิจเล็กที่ใช้สคริปต์ Python จัดการข้อมูลลูกค้า ถ้าเครื่องทำงานหรือเซิร์ฟเวอร์ติดมัลแวร์จากแพ็กเกจปลอม อาจรั่วข้อมูลบัตรเครดิต รหัสผ่าน หรือข้อมูลลูกค้าออกไปได้ภายในไม่กี่นาที labs.eye.security และข่าวร้ายคือแพ็กเกจมัลแวร์ใหม่ ๆ บน PyPI ยังคงปรากฏขึ้นเรื่อย ๆ เช่นที่เคยรายงานเมื่อวานนี้ (15 ตุลาคม 2026) github.com

สรุป 30 วินาที: เกิดอะไรขึ้น

Eye Security วิเคราะห์การโจมตี supply chain บน npm และ PyPI พบว่ามัลแวร์ส่วนใหญ่ถูกตรวจจับและถอดออกภายใน 1-3 วันหลังปล่อย labs.eye.security การตั้ง cooldown 3 วันจึงช่วยป้องกันไม่ให้มนุษย์หรือ AI coding agent ติดตั้งแพ็กเกจที่ยังไม่ผ่านการตรวจสอบ labs.eye.security

สำหรับ pip สามารถใช้ตัวเลือก --uploaded-prior-to ด้วยรูปแบบ ISO 8601 อย่าง P3D github.com ส่วน uv ใช้ exclude-newer ที่รองรับระยะเวลาแบบ “3 days” github.com npm มี min-release-age เป็นตัวเปรียบเทียบคล้ายกัน labs.eye.security

แต่ cooldown ไม่ใช่ยาวิเศษ มันอาจหน่วงการอัพเดทแพ็กเกจแก้ช่องโหว่ด่วน และไม่ช่วยถ้าแพ็กเกจนั้นเป็นมัลแวร์ตั้งแต่แรก labs.eye.security

ทำไมเรื่องนี้เกี่ยวกับคุณ

ลองนึกภาพตอนเช้าวันจันทร์ คุณเปิด laptop ที่บ้าน ใช้ pip install หรือ uv sync เพื่ออัพเดท dependencies ในโปรเจกต์ที่ทำกับทีม ภายในไม่กี่วินาที มัลแวร์ที่ซ่อนอยู่ในแพ็กเกจใหม่ก็เริ่มขโมย SSH key, token PyPI, รหัสผ่านจาก 1Password หรือแม้แต่ config ของ AI tool อย่าง Cursor และ Claude labs.eye.security

ไม่ใช่แค่นักพัฒนาเท่านั้น Office worker ที่ใช้ Python script จัดการข้อมูล Excel, พ่อแม่ที่สอนลูกเขียนโค้ดง่าย ๆ หรือเจ้าของร้านค้าออนไลน์ที่ใช้สคริปต์จัดการสต็อก ล้วนเสี่ยงเหมือนกัน เพราะมัลแวร์ทำงานทันทีที่ติดตั้งหรือ import labs.eye.security และในปี 2026 นี้ LLM coding agent เริ่มช่วยเขียนโค้ดและเลือกแพ็กเกจให้อัตโนมัติ ยิ่งทำให้ความเสี่ยงสูงขึ้นเพราะ agent อาจเลือกเวอร์ชันที่เพิ่งโผล่มาเมื่อ 10 นาทีก่อน labs.eye.security

สำหรับคนที่ทำงานกับ Python ทุกวัน การถูกโจมตีแบบนี้ไม่ใช่แค่เสียเวลาแก้ไขโค้ด แต่ยังอาจทำให้ข้อมูลส่วนตัวของครอบครัวหรือข้อมูลลูกค้าของธุรกิจรั่วไหล ซึ่งส่งผลต่อความเชื่อมั่นและอาจมีค่าใช้จ่ายตามมาในภายหลัง

ทำงานยังไง

หลักการของ cooldown คือบอก package manager ว่า “เลือกเฉพาะเวอร์ชันที่ถูกอัพโหลดมาก่อนวันที่กำหนดเท่านั้น” labs.eye.security ระบบตรวจจับมัลแวร์ทั้งอัตโนมัติจาก registry และจากผู้ดูแลแพ็กเกจเองมักจับแพ็กเกจพิษได้ภายในเวลาไม่นานหลังอัปโหลด ตามตัวอย่างเคสที่ Eye Security รวบรวมไว้ labs.eye.security

ใน Python มัลแวร์ไม่จำเป็นต้องรอ install เสร็จ เมื่อ import module หรือแค่เปิด Python interpreter ก็อาจทำงานได้ทันทีผ่านไฟล์ init.py หรือ setup.pth labs.eye.security

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

# ~/.config/pip/pip.conf หรือไฟล์ pip.conf ในโปรเจกต์
[install]
uploaded-prior-to = P3D

หรือใช้ environment variable PIP_UPLOADED_PRIOR_TO=P3D github.com pip.pypa.io

# pyproject.toml
[tool.uv]
exclude-newer = "3 days"

หรือใช้ environment variable UV_EXCLUDE_NEWER="3 days" github.com docs.astral.sh

npm ใช้ min-release-age เป็นการเปรียบเทียบสั้น ๆ ว่าแนวคิดเดียวกัน labs.eye.security

ทำไมต้องมี lockfile ด้วย เพราะ cooldown ทำงานตอน resolve dependencies แต่ lockfile จะล็อกเวอร์ชันที่ผ่านการตรวจสอบแล้วไว้ labs.eye.security

ส่วนเรื่อง analogy ง่าย ๆ แบบคนไทย: เหมือนของสดที่ตลาดนัด รอ 3 วันให้คนอื่นซื้อไปชิมและรีวิวก่อนค่อยซื้อตาม ไม่งั้นอาจโดนของเน่าแบบไม่รู้ตัว หรือเหมือนข่าวลือในกรุ๊ปไลน์ครอบครัว รอสักพักให้คนอื่นยืนยันก่อนค่อยแชร์ ไม่งั้นอาจแพร่เรื่องเท็จไปทั่วบ้าน github.com

การรอของสด 3 วันนี้เปรียบเสมือนการให้ชุมชนและเครื่องมือรักษาความปลอดภัยได้มีเวลาตรวจสอบก่อนที่เราจะนำมาใช้ในมื้ออาหารประจำวันของโปรเจกต์เรา

จุดหักมุม: AI coding agent ทำให้เรื่องแย่ลง

สิ่งที่เปลี่ยนไปในปี 2025-2026 คือ LLM coding agent เริ่มเลือกและติดตั้งแพ็กเกจให้เราโดยอัตโนมัติ labs.eye.security มันอาจเลือกเวอร์ชันที่เพิ่ง publish เมื่อ 5 นาทีก่อนโดยไม่รู้ตัว และมัลแวร์ก็ออกแบบมาโจมตีเครื่องมือเหล่านี้โดยตรง เช่น แทรกโค้ดใน Claude Desktop หรือ VS Code settings labs.eye.security

การสั่งให้โมเดล “ระวังหน่อยนะ” ไม่พอ เพราะ context window อาจลืมหรือถูก override แต่การตั้งค่าใน package manager เป็นกฎแข็งที่ agent ไม่สามารถพูดคุยให้เปลี่ยนได้ labs.eye.security

นี่คือจุดหักมุมที่ทำให้หลายบริษัทต้องรีบปรับการตั้งค่า เพราะเครื่องมือ AI ที่ช่วยเพิ่ม productivity กลับกลายเป็นช่องโหว่ใหม่ที่มัลแวร์ใช้ประโยชน์

เรื่องเงิน / ผลกระทบ

ถ้าถูกโจมตี อาจเสียเงินจากข้อมูลรั่วไหล เช่น credential AWS, Azure, GCP, token npm/PyPI หรือ SSH key ที่ใช้ deploy ระบบจริง labs.eye.security บริษัทขนาดใหญ่เคยเจอการโจมตีที่ทำให้ต้องหมุนเวียน credential ทุกตัวและอาจเสียเวลาแก้ไขเป็นวัน

สำหรับ freelancer หรือ SME อาจเสียเงินจากบัญชีที่ถูกขโมย หรือต้องจ่ายค่าฟื้นฟูระบบ นอกจากนี้ cooldown อาจทำให้ patch security ล่าช้า 2-3 วัน ซึ่งในบางกรณีอาจสร้างความเสี่ยงเพิ่ม labs.eye.security

แต่โดยรวมแล้ว cost ต่ำมากเมื่อเทียบกับการถูกโจมตี เพราะ “รอสามวัน” ไม่ได้ทำให้งานช้าลงมากนัก ยกเว้นแพ็กเกจที่มี critical fix github.com

ข้อมูลที่ยังไม่ชัด และจุดที่แหล่งข่าวพูดไม่ตรงกัน

Eye Security บอกว่าหนึ่งวันก็พอสำหรับเหตุการณ์ส่วนใหญ่ แต่เลือกใช้สามวันเพื่อเป็น保险สำหรับ weekend และการโจมตีในอนาคต labs.eye.security ขณะที่ mprpic/cooldowns บอกว่าสามวันช่วยลดความเสี่ยงได้ 80-90% github.com

pip รองรับ P3D ตั้งแต่เวอร์ชัน 26.1 แต่เอกสาร pip หลักยังไม่ได้อัพเดทรายละเอียดนี้อย่างชัดเจนในบางส่วน pip.pypa.io github.com

เอกสาร uv ระบุว่า exclude-newer รับค่าแบบ “friendly duration” เช่น 30 days ได้ แต่ถ้า uv ในเครื่องเป็นรุ่นเก่ามาก ให้อัปเดตแล้วลองรันจริงก่อนใช้ใน CI github.com docs.astral.sh

cooldown ไม่ช่วยถ้าแพ็กเกจเป็นมัลแวร์ตั้งแต่เวอร์ชันแรกและอยู่มานาน หรือถ้าใช้ lockfile ที่มีเวอร์ชันมัลแวร์อยู่แล้ว labs.eye.security

บางแหล่งระบุว่า npm และ PyPI ตรวจพบมัลแวร์เร็วมาก แต่บางกรณีก็ใช้เวลานานกว่านั้นเล็กน้อย ทำให้ตัวเลข 3 วันถูกเลือกมาเป็นจุดสมดุล

แล้วเราควรทำอะไร

สำหรับคนทั่วไป (office worker, นักเรียน, เจ้าของธุรกิจเล็ก):

  1. ถ้าใช้ pip ให้เพิ่ม uploaded-prior-to = P3D ในไฟล์ pip.conf แล้วรีสตาร์ท terminal
  2. ใช้ lockfile (requirements.txt หรือ uv.lock) เสมอและ commit เข้า git
  3. ก่อนติดตั้งแพ็กเกจสำคัญ ให้เช็ควันที่ publish บน PyPI ด้วยมือก่อน 3 วัน
  4. ใช้ virtual environment แยกโปรเจกต์ทุกครั้งเพื่อลดความเสี่ยง
  5. อ่าน changelog หรือเช็ค release date ก่อนนำแพ็กเกจใหม่มาใช้ในงานสำคัญที่เกี่ยวกับเงินหรือข้อมูลลูกค้า

สำหรับทีม IT และนักพัฒนา:

  1. ใส่การตั้งค่า cooldown ลงใน pyproject.toml หรือ pip.conf ของ repository แล้ว commit labs.eye.security
  2. สร้างขั้นตอน emergency update เช่น ใช้ environment variable ชั่วคราวเพื่อข้าม cooldown สำหรับแพ็กเกจที่ตัวเอง maintain github.com
  3. เปิดใช้ hash checking ใน requirements และ lockfile เพื่อป้องกัน tampering
  4. ทดสอบใน CI/CD ด้วยการ enforce cooldown และตรวจสอบว่า AI agent เคารพการตั้งค่านี้
  5. สำหรับ urgent security fix ให้มีกระบวนการ review แยกและใช้คำสั่งยกเว้น labs.eye.security
  6. อบรมทีมให้เข้าใจว่าทำไมต้องรอ 3 วัน และวิธีจัดการเมื่อต้องการอัพเดทด่วน

การทำตามขั้นตอนเหล่านี้จะช่วยลดความเสี่ยงจาก supply chain attack ได้อย่างมีนัยสำคัญโดยไม่กระทบ workflow มากนัก

ผมมองว่า…

ผมมองว่า cooldown 3 วันเป็นการป้องกันที่คุ้มค่ามาก ไม่ใช่การไล่ล่ามัลแวร์ด้วยเครื่องมือใหม่ ๆ แต่คือการใช้กฎง่าย ๆ ที่มีอยู่ใน package manager อยู่แล้วเพื่อลดโอกาสโดนโจมตีลงเกือบ 90% github.com มันทำให้ทั้งมนุษย์และ AI agent ทำงานอย่างปลอดภัยขึ้นโดยไม่ต้องพึ่งความระมัดระวังของแต่ละคน ซึ่งเหมาะกับคนไทยที่ชอบวิธีแก้ปัญหาที่เรียบง่ายแต่ได้ผลจริง

ปิดท้าย: สิ่งที่ต้องจับตา

ต้องจับตาว่า pnpm, uv, Poetry และ GitHub Dependabot จะขยายการใช้ cooldown เป็นค่าเริ่มต้นมากขึ้นแค่ไหน และจะมีแพ็กเกจมัลแวร์ใหม่ ๆ ที่พยายาม绕ผ่านกฎ 3 วันนี้หรือไม่ โดยเฉพาะที่เกี่ยวข้องกับ AI coding tools labs.eye.security นอกจากนี้ควรติดตามการพัฒนา per-package exemption ให้ดีขึ้นเพื่อไม่ให้กระทบ urgent fixes มากเกินไป

อีกเรื่องคือการรายงานมัลแวร์ใหม่บน PyPI ที่ยังเกิดขึ้นต่อเนื่อง เช่น กรณีที่เพิ่งมีเมื่อวานนี้ (ดูรายละเอียดเพิ่มได้ที่ /blog/pypi-getpubip-py-wormgpt-malware-oct-2026/) เราควรติดตามข่าวจาก Eye Security และ community Python ไทยอย่างสม่ำเสมอเพื่อปรับการตั้งค่าให้ทันสมัย

Recap

  • ตั้ง uploaded-prior-to = P3D ใน pip หรือ exclude-newer = "3 days" ใน uv
  • ใช้ lockfile + commit เข้า repo เสมอ
  • เตรียมขั้นตอน emergency bypass สำหรับ security patch
  • ตรวจสอบวันที่ publish ของแพ็กเกจสำคัญก่อนใช้
  • ใช้ virtual environment และ hash verification
  • แชร์การตั้งค่านี้กับทีมงานและเพื่อนร่วมงาน
  • อัพเดทเครื่องมือให้เป็นเวอร์ชันที่รองรับ cooldown ดีที่สุด
  • สร้างกระบวนการ review สำหรับแพ็กเกจที่ต้องการยกเว้น cooldown