# 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

- ประเภท: ข่าว · หมวด: Software
- เผยแพร่: 2026-10-27T07:42:00.000Z · อัปเดต: 2026-10-27T07:42:00.000Z
- โดย: กองบรรณาธิการ THAI DATA, THAI DATA IT BUSINESS ENTERPRISE
- ที่มา: https://thaidata.co.th/software/python-3-15-2-security-release-emudhra-ca-distrust/

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

- ทีมปล่อยรุ่นของ 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 หลุด](/security/emudhra-intermediate-ca-key-compromise-root-distrust/) ผู้เสนอแนวทางใน issue gh-160040 เมื่อ 21 ตุลาคม อธิบายว่าการถอดความเชื่อถือเป็นหน้าที่ของ root store แต่ในทางปฏิบัติการอัปเดตล่าช้า และไม่มีวิธีที่เชื่อถือได้ในการส่งการเพิกถอนใบรับรองระดับ intermediate ไปถึงแอปพลิเคชัน ตราบใดที่รากยังอยู่ Python ก็ยังจับมือ TLS ผ่านกุญแจที่รู้กันว่าเสียแล้วได้

![ประกาศรุ่น Python 3.15.2 และอีก 4 รุ่นบน Python Insider วันที่ 26 ตุลาคม 2026 ระบุรายการความปลอดภัยทั้งสาม](https://thaidata-co-th.s3.ap-southeast-1.amazonaws.com/thaidata.co.th/images/articles/python-3-15-2-security-release-emudhra-ca-distrust/python-3-15-2-release-blog-post.webp?v=7fb42ddd) _(ภาพ: 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 และเป็นรุ่นความปลอดภัยเร่งด่วน](https://thaidata-co-th.s3.ap-southeast-1.amazonaws.com/thaidata.co.th/images/articles/python-3-15-2-security-release-emudhra-ca-distrust/python-3-15-2-release-page.webp?v=9014fd38) _(ภาพ: 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) | รับเฉพาะแพตช์ความปลอดภัย |

![บันทึกคำแนะนำ GHSA-x547-2835-q547 สำหรับ CVE-2026-115557 แสดงคะแนน CVSS v4.0 9.4 ระดับ Critical และอ้างอิง PR และ commit ของ CPython](https://thaidata-co-th.s3.ap-southeast-1.amazonaws.com/thaidata.co.th/images/articles/python-3-15-2-security-release-emudhra-ca-distrust/python-cve-2026-115557-github-advisory.webp?v=4c4c2af2) _(ภาพ: 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 ตุลาคม](/software/python-3-15-release-jit-lazy-imports-utf-8/) นี่คือรุ่นแก้ไขรุ่นที่สองภายในสามสัปดาห์

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

- **อัปเกรดทุกสายที่ใช้งาน** เป็น 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)** จะไม่ได้ประโยชน์จากแพตช์นี้ ควรเปิดการตรวจสอบใบรับรองให้ครบทุกจุดเชื่อมต่อ

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

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

### 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


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

- [Python 3.15.2, 3.14.10, 3.13.18, 3.12.16 and 3.11.18 are out](https://blog.python.org/2026/10/python-3152-31410-31318-31216-31118/) — Python Software Foundation (Python Insider)
- [Python Release Python 3.15.2](https://www.python.org/downloads/release/python-3152/) — Python Software Foundation
- [CVE-2026-115557 (NVD record)](https://nvd.nist.gov/vuln/detail/CVE-2026-115557) — NIST National Vulnerability Database
- [CVE-2026-114583 (NVD record)](https://nvd.nist.gov/vuln/detail/CVE-2026-114583) — NIST National Vulnerability Database
- [gh-160040: ssl: distrust compromised eMudhra intermediate CA keys](https://github.com/python/cpython/issues/160040) — python/cpython (GitHub)
- [Our Response To The eMudhra Key Disclosure Incident](https://go.dev/blog/emudhra-incident) — The Go Programming Language
