ข้ามไปยังเนื้อหา
Software

Python 3.15.2 ออกด่วนพร้อมอีก 4 รุ่น บล็อกกุญแจ eMudhra ในโมดูล ssl และอุดช่องโหว่ tarfile

Python 3.15.2 และอีก 4 รุ่นออก 26 ต.ค. 2026 เป็นรุ่นความปลอดภัยเร่งด่วน บล็อกกุญแจ eMudhra ที่หลุด (CVE-2026-115557 CVSS 9.4) และแก้ tarfile CVE-2026-114583

โดย กองบรรณาธิการ THAI DATA อ่าน 6 นาที

แชร์FacebookXLINELinkedIn
แผ่นตัวเลขสำคัญของ Python 3.15.2 และรุ่นความปลอดภัยเร่งด่วน: 5 รุ่น CVSS 9.4 และ 6.9 กุญแจ eMudhra 8 รายการ source-only 3 รุ่น และบั๊กที่แก้ราว 130 รายการ
ภาพ: THAI DATA (ข้อมูล: Python Software Foundation และ NVD)

สรุปประเด็นสำคัญ

  • ทีมปล่อยรุ่นของ Python ประกาศเมื่อ 26 ตุลาคม 2026 ว่า Python 3.15.2, 3.14.10, 3.13.18, 3.12.16 และ 3.11.18 เป็นรุ่นความปลอดภัยแบบเร่งด่วน (expedited security release) โดยหน้า release ของ python.org ระบุวันปล่อย 25 ตุลาคม 2026
  • CVE-2026-115557 (CVSS v4.0 9.4 ระดับ Critical ตามที่ Python แจ้ง NVD) เพิ่มรายการกุญแจ eMudhra Intermediate CA 8 รายการที่ถูกเจาะไว้ในโมดูล ssl ให้ปฏิเสธทุกสายใบรับรองที่มีกุญแจเหล่านี้ ไม่ว่าจะตั้งค่า SSLContext อย่างไร
  • CVE-2026-114583 (CVSS v4.0 6.9 ระดับ Medium) ปิดช่องที่ไฟล์ tar ปลอมหลบ tarfile.tar_filter ด้วย symlink ชื่อว่างหรือชื่อแบบไดเรกทอรี แล้วเขียนไฟล์นอกโฟลเดอร์ปลายทางเมื่อใช้ extractall(filter="tar")
  • Python ระบุว่าหลังอัปเดต การใช้ pip ตามปกติ รวมถึงการอัปเกรด pip เอง ปลอดภัยจากการโจมตีด้วยกุญแจที่หลุด แม้ยังไม่ได้อัปเดต pip โดย 3.15.2 และ 3.14.10 มีตัวติดตั้ง ส่วน 3.13.18, 3.12.16 และ 3.11.18 เป็น source-only
  • แนวทางเดียวกับ Go ที่ออก 1.27.3 และ 1.26.10 ผ่านช่องทาง URGENT เป็นครั้งแรกภายในราว 7 ชั่วโมงครึ่งหลังได้รับแจ้งเมื่อ 19 ตุลาคม ตามบล็อกทีมความปลอดภัยของ Go วันที่ 26 ตุลาคม

ทีมปล่อยรุ่นของ Python ประกาศเมื่อ 26 ตุลาคม 2026 ว่า Python 3.15.2 ออกแล้วพร้อมกับ 3.14.10, 3.13.18, 3.12.16 และ 3.11.18 Python 3.15.2 และอีกสี่รุ่นเป็นรุ่นความปลอดภัยแบบเร่งด่วน เพื่อรับมือกุญแจ eMudhra Intermediate CA ที่ถูกเจาะ โดยโมดูล ssl จะบล็อกกุญแจเหล่านี้เป็นแนวป้องกันขั้นสุดท้าย พร้อมแก้ช่องโหว่ CVE-2026-114583 ใน tarfile และปัญหาคุกกี้ใน http.cookiejar หน้า release บน python.org ระบุวันปล่อยเป็น 25 ตุลาคม 2026

Python 3.15.2 บล็อกกุญแจ eMudhra ที่หลุดอย่างไร

ต้นเรื่องคือกุญแจส่วนตัวของ eMudhra Intermediate CA ที่กู้คืนได้ง่าย ซึ่งเราเคยรายงานไว้ในข่าวกุญแจ eMudhra Intermediate CA หลุด ผู้เสนอแนวทางใน issue gh-160040 เมื่อ 21 ตุลาคม อธิบายว่าการถอดความเชื่อถือเป็นหน้าที่ของ root store แต่ในทางปฏิบัติการอัปเดตล่าช้า และไม่มีวิธีที่เชื่อถือได้ในการส่งการเพิกถอนใบรับรองระดับ intermediate ไปถึงแอปพลิเคชัน ตราบใดที่รากยังอยู่ Python ก็ยังจับมือ TLS ผ่านกุญแจที่รู้กันว่าเสียแล้วได้

ประกาศบน Python Insider วันที่ 26 ตุลาคม 2026 ว่า Python 3.15.2, 3.14.10, 3.13.18, 3.12.16 และ 3.11.18 ออกแล้ว พร้อมรายการ CVE-2026-115557 และ CVE-2026-114583
ประกาศรุ่น Python 3.15.2 และอีก 4 รุ่นบน Python Insider วันที่ 26 ตุลาคม 2026 ระบุรายการความปลอดภัยทั้งสาม ภาพ: Python Software Foundation (ภาพหน้าจอ)

ทางแก้ที่รวมอยู่ใน Python 3.15.2 คือเพิ่มรายการปฏิเสธ (denylist) ขนาดเล็กในส่วน _ssl ซึ่งจับคู่ค่าแฮช SHA-256 ของ SubjectPublicKeyInfo ที่เข้ารหัสแบบ DER ของกุญแจที่ถูกเจาะ การตรวจจะทำระหว่างขั้นตอนยืนยันใบรับรองเมื่อเปิดโหมด CERT_OPTIONAL หรือ CERT_REQUIRED ส่วนโหมด CERT_NONE ไม่ได้รับผลกระทบ เนื่องจากจับคู่ที่ตัวกุญแจไม่ใช่ลายนิ้วมือของใบรับรอง ใบรับรองที่ cross-sign ด้วยกุญแจเดียวกันจึงถูกบล็อกด้วย ไฟล์ distrusted_spki.h ในซอร์สของ CPython ระบุกุญแจ eMudhra 8 รายการ ได้แก่ CA ประเภท OV, DV และ EV สำหรับ TLS และ CA สำหรับ code signing ทั้งของ eMudhra BV (เนเธอร์แลนด์) และ eMudhra Inc (สหรัฐฯ) และเขียนกำกับว่านี่เป็น "มาตรการพิเศษและแนวป้องกันขั้นสุดท้าย" ที่ใช้เฉพาะช่วงรอ root store ของระบบ container image หรือรายการ CA ที่ฝังในแพ็กเกจ Python อัปเดตตาม

CVE-2026-115557 ใน Python 3.15.2: คะแนน CVSS 9.4 และรุ่นที่ได้รับผลกระทบ

Python แจ้ง CVE-2026-115557 สำหรับการเปลี่ยนแปลงนี้ด้วยคะแนน CVSS v4.0 ที่ 9.4 ระดับ Critical (เวกเตอร์ AV:N/AC:L/AT:N/PR:N/UI:P) ตามบันทึกของ NVD ซึ่งระบุรุ่นที่ได้รับผลกระทบคือทุกรุ่นก่อน 3.11.18, 3.12.0 ถึงก่อน 3.12.16, 3.13.0 ถึงก่อน 3.13.18, 3.14.0 ถึงก่อน 3.14.10, 3.15.0 ถึงก่อน 3.15.2 และ 3.16.0a1 Seth Larson ส่งประกาศนี้ในรายชื่อ security-announce เมื่อ 24 ตุลาคม และ PR แก้ไขถูกรวมในวันเดียวกัน

CVE-2026-114583: ช่องโหว่ tarfile.tar_filter และรายการแก้ไขอื่น

ช่องโหว่ที่สองที่ Python 3.15.2 แก้อยู่ใน tarfile.tar_filter ตามบันทึกของ NVD ไฟล์ tar ที่ประดิษฐ์ขึ้นสามารถใช้ link entry เช่น symlink ที่มีชื่อว่างหรือชื่อแบบไดเรกทอรี เปลี่ยนเส้นทางของสมาชิกถัดไปในไฟล์เก็บถาวรให้เขียนออกนอกโฟลเดอร์ปลายทาง เมื่อโปรแกรมเรียก tarfile.extractall() ด้วย filter="tar" ตามสิทธิ์ของโปรเซสที่แตกไฟล์ Python ให้คะแนน CVSS v4.0 ที่ 6.9 ระดับ Medium (AV:L/AC:L/AT:N/PR:N/UI:N/VI:H) และระบุว่าเป็นคู่ขนานของ CVE-2026-7774 ที่เคยแก้ใน tarfile.data_filter ก่อนหน้านี้

รายการแก้ไขทั้งหมดใน Python 3.15.2 และอีก 4 รุ่น

รายการ CVE / issue ครอบคลุมรุ่น หมายเหตุ
บล็อกกุญแจ eMudhra Intermediate CA ในโมดูล ssl CVE-2026-115557 / gh-160040 ทั้ง 5 รุ่น CVSS v4.0 9.4 Critical
ปฏิเสธ link ที่แทนที่ปลายทางใน tarfile.tar_filter CVE-2026-114583 / gh-160097 ทั้ง 5 รุ่น CVSS v4.0 6.9 Medium
ปฏิเสธคุกกี้ที่มี version ติดลบใน http.cookiejar gh-160300 ทั้ง 5 รุ่น ไม่มี CVE ในประกาศ
อัปเดต Expat เป็น 2.9.0 CVE-2026-77214, CVE-2026-102633 / gh-158876 3.13.18, 3.12.16, 3.11.18 มีใน 3.15.1 และ 3.14.9 แล้ว
ไม่อ่าน mimetypes.knownfiles เป็นค่าเริ่มต้นบน Windows CVE-2024-3220 / gh-159428 3.13.18, 3.12.16, 3.11.18 มีใน 3.15.1 และ 3.14.9 แล้ว
แก้ race condition ตอนล้าง tempfile.TemporaryDirectory gh-157579 3.13.18, 3.12.16 มีใน 3.15.0 และ 3.14.9 แล้ว

รายการคุกกี้ที่แก้ใน Python 3.15.2 มาจาก issue gh-160300 ซึ่งอธิบายว่า DefaultCookiePolicy ของ http.cookiejar ตรวจกฎโดเมนเฉพาะคุกกี้ที่ version เป็น 0 หรือบวก คุกกี้ที่ส่ง Version ติดลบจึงไม่ถูกเทียบโดเมนกับโฮสต์ที่ส่งมา ทำให้เซิร์ฟเวอร์ใดก็ตามที่โปรแกรมติดต่อด้วย CookieJar ร่วมกันตั้งหรือเขียนทับคุกกี้ของโดเมนอื่นได้ แม้จะอ่านคุกกี้ของโดเมนนั้นไม่ได้

หน้า release ของ Python 3.15.2 บน python.org ระบุวันปล่อย 25 ตุลาคม 2026 พร้อมภาพโลโก้ Python 3.15
หน้า release ของ Python 3.15.2 บน python.org ระบุวันปล่อย 25 ตุลาคม 2026 และเป็นรุ่นความปลอดภัยเร่งด่วน ภาพ: Python Software Foundation (ภาพหน้าจอ)

Python 3.15.2 กับ 3.14.10 มีตัวติดตั้ง อีก 3 รุ่นต้องคอมไพล์เอง

หน้า release ของ Python 3.15.2 ระบุว่าเป็นรุ่นบำรุงรักษาที่สองของสาย 3.15 มีการแก้บั๊ก ปรับปรุงการ build และเอกสารราว 130 รายการจากผู้ร่วมพัฒนา 70 คนนับจาก 3.15.1 ซึ่งเพิ่งออกเมื่อ 21 ตุลาคม มีตัวติดตั้ง macOS (10.15 ขึ้นไป) ตัวจัดการติดตั้ง Windows ทั้ง 64 บิต 32 บิต และ ARM64 รวมถึงแพ็กเกจสำหรับ Android และ iOS ส่วน Python 3.13.18, 3.12.16 และ 3.11.18 เป็นรุ่นความปลอดภัยแบบ source-only ตามรอบปกติของสายที่อยู่ในช่วงรับเฉพาะแพตช์ความปลอดภัย ผู้ใช้ต้องคอมไพล์เองหรือรอแพ็กเกจจากผู้จัดจำหน่ายระบบปฏิบัติการ

รุ่น ตัวติดตั้งจาก python.org สถานะสาย
Python 3.15.2 มี (Windows, macOS, Android, iOS, ซอร์ส) รุ่นบำรุงรักษาที่สองของ 3.15
Python 3.14.10 มี รุ่นบำรุงรักษา
Python 3.13.18 ไม่มี (source-only) รับเฉพาะแพตช์ความปลอดภัย
Python 3.12.16 ไม่มี (source-only) รับเฉพาะแพตช์ความปลอดภัย
Python 3.11.18 ไม่มี (source-only) รับเฉพาะแพตช์ความปลอดภัย
หน้า GitHub Advisory Database ของ CVE-2026-115557 ที่ Python 3.15.2 แก้ไข แสดงคะแนน CVSS v4.0 9.4 ระดับ Critical
บันทึกคำแนะนำ GHSA-x547-2835-q547 สำหรับ CVE-2026-115557 แสดงคะแนน CVSS v4.0 9.4 ระดับ Critical และอ้างอิง PR และ commit ของ CPython ภาพ: GitHub Advisory Database (ภาพหน้าจอ)

ทำไมเรื่องนี้สำคัญ

Python 3.15.2 เป็นครั้งแรกที่ Python ฝังรายการกุญแจที่ไม่เชื่อถือไว้ในตัวภาษาโดยตรง แทนที่จะพึ่ง root store ของระบบหรือแพ็กเกจ certifi เพียงอย่างเดียว ซึ่ง Python ระบุว่าเลียนแบบการเปลี่ยนแปลงใน crypto/x509 ของ Go ทีมความปลอดภัยของ Go เล่าในบล็อกวันที่ 26 ตุลาคมว่าได้รับแจ้งเมื่อ 19 ตุลาคม และปล่อย Go 1.27.3 กับ 1.26.10 ผ่านช่องทาง URGENT เป็นครั้งแรกภายในราว 7 ชั่วโมงครึ่ง เพราะเชื่อว่ากุญแจส่วนตัวจะถูกเปิดเผยในไม่กี่ชั่วโมง โดย Go ให้เหตุผลว่า Linux ไม่มีกลไกตรวจการเพิกถอนที่เป็นมาตรฐานเดียวกัน และผู้ใช้บนแพลตฟอร์มอื่นอาจไม่ได้รับอัปเดตจากระบบทันเวลา

สำหรับผู้ใช้ Python 3.15.2 ผลที่ตามมาคือสคริปต์ที่ใช้ urllib, http.client หรือ pip ซึ่งอาศัยโมดูล ssl จะปฏิเสธใบรับรองปลอมที่ลงนามด้วยกุญแจ eMudhra ทันทีหลังอัปเกรด ไม่ต้องรอ certifi หรือ pip รุ่นใหม่ และต่อเนื่องจาก Python 3.15 ที่เพิ่งออกเมื่อ 9 ตุลาคม นี่คือรุ่นแก้ไขรุ่นที่สองภายในสามสัปดาห์

ผลต่อองค์กรไทยและทีมพัฒนา

  • อัปเกรดทุกสายที่ใช้งาน เป็น Python 3.15.2 หรือรุ่นคู่ขนานคือ 3.14.10, 3.13.18, 3.12.16 หรือ 3.11.18 ตามสายที่องค์กรใช้ และ rebuild container image ที่ฝัง Python ไว้ เพราะ Python ที่อยู่ใน image ไม่ได้อัปเดตตามโฮสต์
  • สายที่ไม่มีตัวติดตั้ง (3.13, 3.12, 3.11) ให้ตรวจว่าผู้จัดจำหน่ายระบบปฏิบัติการหรือ image ฐานปล่อยแพ็กเกจที่รวมแพตช์นี้แล้วหรือยัง ก่อนตัดสินใจคอมไพล์เอง
  • ตรวจโค้ดที่แตกไฟล์ tar จากภายนอก ว่าใช้ filter="tar" หรือ filter="data" และอัปเดตรันไทม์ก่อนรับไฟล์จากผู้ใช้ภายนอก
  • ตรวจรายการ CA ที่ฝังในแอป เช่น certifi หรือ bundle ที่ทีมดูแลเอง ให้ถอดรากของ eMudhra ออกเช่นกัน เพราะรายการปฏิเสธของ Python เป็นเพียงแนวป้องกันชั่วคราว
  • ระบบที่ปิดการตรวจใบรับรอง (CERT_NONE) จะไม่ได้ประโยชน์จากแพตช์นี้ ควรเปิดการตรวจสอบใบรับรองให้ครบทุกจุดเชื่อมต่อ

ติดตามข่าวรันไทม์และเครื่องมือพัฒนาได้ที่หมวดซอฟต์แวร์

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

Python 3.15.2 แก้อะไรบ้าง?

Python 3.15.2 เป็นรุ่นความปลอดภัยเร่งด่วนที่ออกพร้อม 3.14.10, 3.13.18, 3.12.16 และ 3.11.18 ตามประกาศวันที่ 26 ตุลาคม 2026 แก้ CVE-2026-115557 โดยเพิ่มรายการกุญแจ eMudhra Intermediate CA ที่ถูกเจาะให้โมดูล ssl ปฏิเสธ แก้ CVE-2026-114583 ใน tarfile.tar_filter และปฏิเสธคุกกี้ที่มี version ติดลบใน http.cookiejar (gh-160300) รวมทั้งแก้บั๊กราว 130 รายการนับจาก 3.15.1

ทำไม Python ต้องบล็อกกุญแจ eMudhra เองในโมดูล ssl?

ตาม issue gh-160040 ที่นำไปสู่ Python 3.15.2 การถอดความเชื่อถือเป็นหน้าที่ของ root store ของระบบปฏิบัติการ แต่การอัปเดตมักล่าช้า และไม่มีวิธีที่เชื่อถือได้ในการส่งการเพิกถอนใบรับรองระดับ intermediate ไปถึงแอปพลิเคชัน Python จึงเพิ่มรายการ SPKI ของกุญแจ eMudhra 8 รายการเป็นแนวป้องกันขั้นสุดท้าย โดยจับคู่ที่ตัวกุญแจ ใบรับรองที่ cross-sign ด้วยกุญแจเดิมจึงถูกบล็อกด้วย

ใช้ Python 3.15.2 แล้ว pip ปลอดภัยจากกุญแจ eMudhra ที่หลุดหรือไม่?

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

CVE-2026-114583 ใน tarfile กระทบใครบ้าง?

กระทบโปรแกรมบน Python รุ่นก่อน Python 3.15.2 หรือรุ่นคู่ขนานที่แตกไฟล์ tar จากแหล่งที่ไม่น่าเชื่อถือด้วย tarfile.extractall() โดยใช้ filter="tar" ไฟล์ tar ที่ประดิษฐ์ขึ้นอาจใช้ link entry เช่น symlink ชื่อว่างเปลี่ยนเส้นทางสมาชิกถัดไปให้เขียนออกนอกโฟลเดอร์ปลายทางตามสิทธิ์ของโปรเซสที่แตกไฟล์ Python ให้คะแนน CVSS v4.0 ที่ 6.9 และแก้ในทั้ง 5 รุ่นที่ออกครั้งนี้

Python 3.13, 3.12 และ 3.11 ต้องอัปเดตอย่างไรเมื่อไม่มีตัวติดตั้ง?

ต่างจาก Python 3.15.2 ที่มีตัวติดตั้ง Python 3.13.18, 3.12.16 และ 3.11.18 เป็นรุ่นความปลอดภัยแบบ source-only ไม่มีตัวติดตั้งจาก python.org องค์กรที่ใช้รุ่นเหล่านี้ต้องคอมไพล์จากซอร์ส รอแพ็กเกจจากผู้จัดจำหน่ายระบบปฏิบัติการหรือ container image ที่อัปเดตแล้ว ส่วน 3.15.2 และ 3.14.10 มีตัวติดตั้งสำหรับ Windows และ macOS

แหล่งอ้างอิง

  1. Python 3.15.2, 3.14.10, 3.13.18, 3.12.16 and 3.11.18 are out — Python Software Foundation (Python Insider)
  2. Python Release Python 3.15.2 — Python Software Foundation
  3. CVE-2026-115557 (NVD record) — NIST National Vulnerability Database
  4. CVE-2026-114583 (NVD record) — NIST National Vulnerability Database
  5. gh-160040: ssl: distrust compromised eMudhra intermediate CA keys — python/cpython (GitHub)
  6. Our Response To The eMudhra Key Disclosure Incident — The Go Programming Language

บุคคล องค์กร และสถานที่ในข่าวนี้

เลือกชื่อเพื่ออ่านข่าวทั้งหมดที่กล่าวถึง ตัวเลขคือจำนวนข่าว

ผลิตภัณฑ์และเทคโนโลยี
Python29Windows84macOS33Android59Linux64
แชร์FacebookXLINELinkedIn

พบข้อมูลคลาดเคลื่อน? แจ้งกองบรรณาธิการ