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

PyPI มัลแวร์ webreader 2.3.8 + pafer 0.9.7/0.9.8 แฝง pickle เป็น config

น้องกายEngineering

เมื่อต้นเดือนตุลาคม 2569 มีแพ็กเกจ Python บน PyPI ชื่อ webreader เวอร์ชัน 2.3.8 และแพ็กเกจที่มันเรียกใช้เป็น dependency ชื่อ pafer เวอร์ชัน 0.9.7 กับ 0.9.8 ถูกพบว่าเป็นมัลแวร์ (https://osv.dev/vulnerability/MAL-2026-17757) (https://osv.dev/vulnerability/MAL-2026-17756) แพ็กเกจเหล่านี้แฝง “pickle” ที่ดูเหมือนไฟล์ config ธรรมดาไว้ข้างใน เมื่อไหร่ที่ Python โหลดแพ็กเกจนี้ โค้ดมัลแวร์ก็จะรันทันที ติดตั้งตัวเองถาวรผ่านไฟล์ .pth แล้วดาวน์โหลด RAT (Remote Access Trojan) ตัวที่สองเพื่อขโมยข้อมูลและควบคุมเครื่องจากระยะไกล (https://radar.offseq.com/threat/malicious-code-in-pafer-pypi-f0056149adbeed1f) (https://radar.offseq.com/threat/malicious-code-in-webreader-pypi-474d07ae4c750fd1) Snyk ยังจัดความรุนแรงของ pafer ไว้ที่คะแนน 9.3 ถือว่าอันตรายมาก (https://security.snyk.io/vuln/SNYK-PYTHON-PAFER-20758000)

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

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

  • webreader 2.3.8 และ pafer 0.9.7/0.9.8 ถูกอัปโหลดขึ้น PyPI เมื่อช่วงต้นเดือนตุลาคม 2569
  • pafer มีโค้ดโหลด pickle ที่แฝงอยู่ใน webreader โดยอ้างว่าเป็นไฟล์ config
  • เมื่อ Python ทำการ unpickle โค้ดมัลแวร์จะรันอัตโนมัติ
  • มันสร้างไฟล์ .pth ในโฟลเดอร์ site-packages เพื่อให้ตัวเองรันทุกครั้งที่เปิด Python
  • จากนั้นดาวน์โหลด payload ที่สองจากโดเมน supabase และ npoint.io แล้วทำงานเป็น RAT ขโมยไฟล์และรันคำสั่งจากระยะไกล
  • แพ็กเกจทั้งสองตัวถูกระบุว่าเป็น malicious package และถูกถอดออกจาก PyPI แล้ว

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

ถ้าคุณเคยพิมพ์ pip install webreader หรือมีโปรเจกต์ที่ระบุ dependency ตัวนี้ใน requirements.txt หรือ pyproject.toml แม้แต่ในเครื่องที่ใช้ทำงานออฟฟิศ ใช้เขียนสคริปต์ดึงข้อมูลหุ้น หรือทำบอทส่งไลน์แจ้งเตือนลูกค้า คุณก็อาจติดมัลแวร์โดยไม่รู้ตัวแล้ว

มัลแวร์ตัวนี้ไม่ใช่ไวรัสที่เปิดไฟล์ .exe แต่เป็น “ม้าโทรจันในกล่องข้าว” แบบที่ผมจะอธิบายต่อไป มันสามารถขโมยรหัสผ่าน คีย์ API บัญชีธนาคารออนไลน์ หรือแม้แต่ไฟล์เอกสารส่วนตัวที่เก็บอยู่ในเครื่องเดียวกัน คนธรรมดาที่ไม่ได้เป็นโปรแกรมเมอร์แต่ใช้เครื่องเดียวกับลูกที่เรียนโปรแกรมมิ่ง หรือใช้เครื่องเดียวกับแฟนที่รับงานฟรีแลนซ์เขียน Python ก็เสี่ยงตามไปด้วย

ทำงานยังไง

ลองนึกภาพร้านข้าวตามสั่งแถวออฟฟิศครับ เวลาคุณสั่งข้าวมันไก่ พนักงานจะเอากล่องข้าวมาให้คุณ แต่ข้างในกล่องมีโน้ตแปะติดมาด้วยว่า “ใส่เครื่องเทศเพิ่มหน่อย” คุณเปิดกล่องแล้วก็ทำตามโน้ตโดยอัตโนมัติ

ในโลกของ Python “pickle” ก็เหมือนกล่องข้าวที่เปิดแล้วมีคนสั่งงานติดมาด้วย (https://osv.dev/vulnerability/MAL-2026-17757) มันไม่ใช่แค่ข้อมูลธรรมดา แต่เป็นวัตถุ Python ที่บรรจุโค้ดได้ เมื่อไหร่ที่ใช้คำสั่ง pickle.load() มันจะ “ทำตามโน้ต” นั้นทันทีโดยไม่ถามอะไร

ส่วน .pth นั้นเหมือนโน้ตแปะตู้เย็นที่ Python อ่านทุกครั้งที่เปิดโปรเจกต์ (https://radar.offseq.com/threat/malicious-code-in-pafer-pypi-f0056149adbeed1f) มัลแวร์เลยสร้างไฟล์ .pth ไว้ในโฟลเดอร์ site-packages เพื่อให้ตัวเองถูกเรียกทุกครั้งที่รัน Python โดยไม่ต้องติดตั้งใหม่

ขั้นตอนการทำงานคือ

  1. ติดตั้ง webreader 2.3.8 ซึ่งมี pickle แฝงอยู่
  2. pafer 0.9.7 หรือ 0.9.8 ถูกติดตั้งตามมาเป็น dependency
  3. pafer โหลด pickle ที่แฝงตัวเป็น config
  4. unpickling ทำให้โค้ดมัลแวร์รัน
  5. มันเขียนไฟล์ .pth เพื่อ persistence
  6. ดาวน์โหลด payload ที่สองจาก https://api.npoint.io/40e32d283a9d97e59252/a และเชื่อมต่อกับโดเมน frjmzbjbhwvtdnsuodmu.supabase.co
  7. กลายเป็น RAT ที่สามารถขโมยไฟล์และรันคำสั่งจากระยะไกล (https://radar.offseq.com/threat/malicious-code-in-webreader-pypi-474d07ae4c750fd1)

จุดหักมุม: มันไม่ใช่บั๊ก แต่คือการโจมตี supply chain

ที่น่ากลัวคือมัลแวร์ไม่ได้ซ่อนอยู่ในแพ็กเกจหลักอย่างเดียว แต่แอบฝังตัวใน dependency ที่ชื่อ pafer ซึ่งหลายคนอาจไม่เคยได้ยินชื่อมาก่อน (https://security.snyk.io/vuln/SNYK-PYTHON-PAFER-20758000) แสดงว่า attacker วางแผนมาเป็นขั้นเป็นตอน โดยตั้งใจให้คนติดตั้ง webreader แล้วโดนตามมาแบบไม่รู้ตัว นี่คือเทคนิค supply chain attack ที่เกิดบ่อยขึ้นในปีที่ผ่านมา

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

ถ้าเครื่องติด RAT ผู้โจมตีสามารถขโมยข้อมูลบัญชีธนาคาร คีย์ API ของบริการ cloud หรือรหัสผ่านที่ใช้กับเว็บต่าง ๆ ได้ทันที สำหรับ SME ที่ใช้ Python ทำระบบหลังบ้าน อาจถูกขโมยฐานข้อมูลลูกค้าไปขายต่อ หรือถูกใช้เป็นเครื่องส่งสแปม

ในแง่ธุรกิจ ถ้าบริษัทของคุณใช้แพ็กเกจนี้ใน production environment อาจเจอปัญหา compliance เพราะมีมัลแวร์แทรกเข้ามาใน supply chain อาจถูกลูกค้าหรือ auditor ถามถึงมาตรฐานความปลอดภัยได้

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

  • วันที่แน่นอนที่แพ็กเกจถูกอัปโหลดขึ้น PyPI ยังไม่มีตัวเลขชัดเจน OSV บอก import_time ประมาณ 10 ตุลาคม 2569 เวลา 11:40 UTC ซึ่งตรงกับเวลาไทยประมาณ 18:40 น. (https://osv.dev/vulnerability/MAL-2026-17757) แต่ Snyk ระบุวันที่ 9 ตุลาคม (https://security.snyk.io/vuln/SNYK-PYTHON-PAFER-20758000)
  • OffSeq ระบุว่าไม่มี official patch หรือ remediation อย่างเป็นทางการในขณะนี้ (https://radar.offseq.com/threat/malicious-code-in-pafer-pypi-f0056149adbeed1f)
  • ไม่มีตัวเลขยืนยันว่ามีผู้ติดเชื้อกี่เครื่อง และยังไม่มีรายงานว่ามีการโจมตีจริงในประเทศไทยหรือไม่

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

สำหรับคนทั่วไปและนักเรียนนักศึกษา

  1. เปิดเทอร์มินัลแล้วพิมพ์ pip list | grep -E 'webreader|pafer' หรือ uv pip list ถ้าใช้ uv
  2. ถ้าเจอชื่อเหล่านี้ ให้พิมพ์ pip uninstall webreader pafer -y ทันที
  3. ตรวจโฟลเดอร์ site-packages ว่ามีไฟล์ .pth ที่ไม่คุ้นตาหรือไม่ (มักมีชื่อคล้าย config หรือ random)
  4. เปลี่ยนรหัสผ่านทุกบัญชีที่เคยใช้บนเครื่องนั้น โดยเฉพาะธนาคารและ email

สำหรับ IT และ developer

  1. ตรวจทุก requirements.txt, Pipfile, pyproject.toml ในโปรเจกต์ทั้งหมด
  2. ใช้คำสั่ง pip show webreader และ pip show pafer เพื่อดูเวอร์ชันและที่ติดตั้ง
  3. ลบแพ็กเกจและไฟล์ .pth ที่เกี่ยวข้อง
  4. ใช้ lockfile (requirements.lock หรือ uv.lock) พร้อมระบุ hash ของแพ็กเกจทุกตัว
  5. เปิดใช้งาน dependency scanning tool เช่น Dependabot, Snyk หรือ pip-audit
  6. ถ้าติดตั้งใน production ให้ rotate ทุก secret และ credential ที่อาจรั่วไหล

สำหรับเจ้าของธุรกิจเล็ก ให้พนักงานไอทีหรือฟรีแลนซ์ที่ดูแลระบบเช็คให้ภายใน 24 ชั่วโมงนี้ ถ้าไม่มั่นใจให้จ้างบริการ scan ภายนอกสักครั้ง

ผมมองว่า…

ผมมองว่าเรื่องนี้ไม่ใช่แค่เรื่องของมัลแวร์ตัวเดียว แต่คือสัญญาณเตือนว่าการพึ่งพา PyPI แบบไม่ตรวจสอบอะไรเลยเริ่มอันตรายเกินไปแล้ว มันคือการโจมตีที่ใช้ความไว้ใจของนักพัฒนาเป็นจุดอ่อน

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

  • PyPI จะมีมาตรการตรวจสอบแพ็กเกจใหม่เข้มงวดขึ้นแค่ไหน
  • จะมีมัลแวร์ตัวใหม่ใน campaign 2026-10-webreader เพิ่มอีกหรือไม่
  • นักพัฒนาไทยจะเริ่มใช้ lockfile + hash กันมากขึ้นหรือยัง
  • บริษัทรักษาความปลอดภัยจะออกเครื่องมือตรวจ .pth file โดยเฉพาะหรือเปล่า

Recap

  • เช็คเครื่องด้วย pip list ว่ามี webreader หรือ pafer หรือไม่
  • ถ้ามี ให้ uninstall ทันทีและลบไฟล์ .pth ที่น่าสงสัย
  • เปลี่ยนรหัสผ่านและ rotate secret ทุกตัว
  • เริ่มใช้ lockfile + hash ในทุกโปรเจกต์ตั้งแต่วันนี้
  • เปิด dependency scanning tool ใน CI/CD
  • ตรวจโปรเจกต์เก่า ๆ ที่ไม่ได้แตะมานาน
  • แนะนำเพื่อนที่ใช้ Python ให้ทำเหมือนกัน