EST. 2026 — Notes from real server work SYSADMIN · SECURITY · AI · DIRECTADMIN Issue 01
THE SYSADMIN ALMANAC
Home / Security Notice / Guzzle คุกกี้ข้ามขอบเขตโดเมน CVE-2026-69245
Security Notice

Guzzle คุกกี้ข้ามขอบเขตโดเมน CVE-2026-69245

by Ton-Or ·3 Aug 2026·4 min read
Guzzle คุกกี้ข้ามขอบเขตโดเมน CVE-2026-69245

นักพัฒนาและผู้ดูแลระบบแอป PHP ที่ใช้ Guzzle พร้อมคุกกี้ร่วมกันข้ามโฮสต์ตามเงื่อนไขควรเร่งติดตั้งรุ่นแก้ไข

1-minute summary

Symptom / problem
คุกกี้ของโดเมนที่เขียนเป็นที่อยู่รูปแบบพิเศษอาจหลุดไปยังโฮสต์อื่น หรือรับคุกกี้จากโฮสต์ที่ไม่ควรเชื่อถือ
Who should read
นักพัฒนาและผู้ดูแลระบบที่ใช้ Guzzle เปิดคุกกี้ และแชร์ CookieJar ระหว่างโฮสต์ตามเงื่อนไขในประกาศ
Fix in short
อัปเดตเป็น 7.15.2 หรือ 8.0.1 ตามสายรุ่น ระหว่างรอให้แยก CookieJar ตามโฮสต์หรือขอบเขตความเชื่อถือ
Jump to steps

พอดีไล่ฟีด Packagist เจอประกาศของ guzzlehttp/guzzle ไลบรารี HTTP สำหรับ PHP เรื่อง CVE-2026-69245 Guzzle อาจส่งหรือรับคุกกี้ผิดโฮสต์ เมื่อแอปเขียนที่อยู่ปลายทางในรูปแบบพิเศษ ความรุนแรงระดับปานกลาง คะแนน CVSS 3.1 อยู่ที่ 6.5/10 (รายละเอียดประกาศ)

Guzzleไลบรารี HTTP ของ PHP
6.5/10CVSS ระดับปานกลาง
7.15.2รุ่นแก้ไขสาย 7
8.0.1รุ่นแก้ไขสาย 8

ใครต้องทำอะไร

  • นักพัฒนา: ถ้าแอปใช้คุกกี้ของ Guzzle ร่วมกันระหว่างโฮสต์ตามเงื่อนไขด้านล่าง ให้เร่งอัปเดตแพ็กเกจและทดสอบการส่งคุกกี้ก่อนนำขึ้นใช้งาน
  • ผู้ดูแลระบบ: ถ้าดูแลแอป PHP ที่เข้าเงื่อนไข ให้ประสานทีมพัฒนานำรุ่นแก้ไขขึ้นใช้งานโดยเร็วพร้อมตรวจรุ่นที่ติดตั้งจริง

เกิดอะไรขึ้น

SetCookie::matchesDomain() อาจมองค่า Domain บางแบบเป็นชื่อโดเมน และยอมให้ใช้คุกกี้กับโดเมนย่อยด้วย แต่ตัวเชื่อมต่อเครือข่ายกลับอ่านค่าเดียวกันเป็น IP รูปแบบที่มีปัญหาคือเลขฐานสิบหก เลขฐานผสม และ percent escape หรือการเขียนอักขระด้วย % ตามด้วยรหัส

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

แอปต้องเปิดใช้คุกกี้ เรียกปลายทางด้วยรูปแบบที่มีปัญหา และติดต่อโฮสต์อื่นที่ชื่อลงท้ายด้วยรูปแบบนั้น โดยใช้ CookieJar เดียวกัน ประกาศระบุว่า DNS สาธารณะไม่มีการมอบหมายชื่อลักษณะนี้ ความเสี่ยงเลยอยู่ใน DNS ภายใน ระบบ DNS ที่ตอบต่างกันตามเครือข่าย และโซนของคอนเทนเนอร์

แอปที่ไม่ใช้คุกกี้ของ Guzzle ไม่เข้าเงื่อนไขนี้ เช่นเดียวกับแอปที่แยก CookieJar ตามโฮสต์หรือระดับความน่าเชื่อถือ หรือเรียกปลายทางด้วยชื่อโดเมนปกติเท่านั้น (คำอธิบายจากผู้พัฒนา)

ใครโดนและรุ่นที่แก้

ผู้พัฒนาเผยแพร่ advisory วันที่ 26 กรกฎาคม 2026 ส่วน GitHub Advisory Database เผยแพร่รายการวันที่ 3 สิงหาคม 2026 บทความนี้อิงวันที่ในฐานข้อมูลตามลิงก์ที่มา

แพ็กเกจ / ช่วงรุ่นที่ได้รับผลกระทบ รุ่นแก้ไข
guzzlehttp/guzzle ต่ำกว่า 7.15.2 7.15.2
guzzlehttp/guzzle ตั้งแต่ 8.0.0 แต่ต่ำกว่า 8.0.1 8.0.1

สาย 7 มีปัญหาทั้งเลขฐานสิบหก เลขฐานผสม และ percent escape ส่วน 8.0.0 มีปัญหาเฉพาะ percent escape แพตช์บังคับให้ Domain ที่มี % ตรงกับชื่อโฮสต์ทุกตัวอักษร รุ่น 7.15.2 เพิ่มกฎนี้กับรูปตัวเลขดังกล่าวด้วย (รุ่นและขอบเขตการแก้ไข)

ต้องทำอะไร

ตรวจรุ่นแพ็กเกจในโครงการ แล้วอัปเดตให้ถึงรุ่นแก้ไขในสายที่ใช้ รันคำสั่งนี้ในเครื่องพัฒนา โดย -W อนุญาตให้อัปเดต dependency ที่เกี่ยวข้องด้วย:

composer show guzzlehttp/guzzle
composer update guzzlehttp/guzzle -W
composer show guzzlehttp/guzzle
composer audit

ถ้า composer.json ล็อกรุ่นเก่าไว้ ต้องแก้ให้รับรุ่นที่มีแพตช์ก่อน ตรวจว่าได้รุ่นตามตาราง แล้วทดสอบการล็อกอิน คุกกี้ และ redirect นำ composer.lock ที่ทดสอบแล้วไปใช้ตอนนำแอปขึ้นระบบ ถ้า install จาก lock เดิมก็ยังได้รุ่นเดิม (เอกสาร Composer)

ระหว่างรออัปเดต ให้แยก CookieJar ตามโฮสต์หรือระดับความน่าเชื่อถือ หรือใช้ IP แบบเลขฐานสิบคั่นด้วยจุดตามปกติ ถ้าจะบล็อก percent escape ต้องตรวจก่อนส่งเข้า Guzzle และทุกครั้งที่ redirect อย่าใช้ filter_var() กับ FILTER_VALIDATE_IP เพียงอย่างเดียว เพราะปฏิเสธรูปแบบที่ตัวเชื่อมต่ออ่านเป็น IP ได้ (วิธีลดความเสี่ยง)

ข้อจำกัดของแพตช์

แพตช์นี้ยังไม่แก้กรณีโฮสต์ใช้ตัวเลข Unicode แบบเต็มความกว้างผ่านตัวเชื่อมต่อที่รองรับ IDN ผู้พัฒนาแนะนำให้บล็อกชื่อโฮสต์ที่มีอักขระนอก ASCII เพื่อปิดกรณีนี้

ส่วนตัวผมให้เร่งแพตช์เมื่อแอปเข้าเงื่อนไขการแชร์คุกกี้ข้ามโฮสต์ข้างต้น ที่มา: Guzzle: Noncanonical cookie domain keeps subdomain scope (ประกาศทางการ) หากมีรายละเอียดเพิ่มเติม เดี๋ยวกลับมาแก้เพิ่มให้ภายหลังครับ

Want us to set this up?

Get help with server setup, configuration, migration, or troubleshooting. Save time for the work that matters.

Get a quote

Hit something like this? Stuck somewhere?

Come trade notes on the LinuxThai board

→ Continue on the board

Comments 0

No comments yet — be the first