CVE-2025-20334: Cisco IOS XE HTTP API Command Injection
ช่องโหว่ command injection บน HTTP API ของ Cisco IOS XE (CVSS 8.8) เปิดทาง execute คำสั่งระดับ root บนอุปกรณ์ที่เปิด HTTP server
1. สรุปสั้นๆ#
Cisco PSIRT ออก advisory cisco-sa-ios-xe-cmd-inject-rPJM8BGL แจ้งช่องโหว่ระดับสูง (CVSS 8.8 / High) ใน HTTP API ของ Cisco IOS XE Software รหัส CVE-2025-20334 ผู้โจมตีที่มี administrative privileges (หรือใช้ social engineering หลอก admin ที่ login อยู่ให้คลิกลิงก์ — vector UI:R) สามารถยิง request ผ่าน HTTP API เพื่อรัน OS command ด้วยสิทธิ์ root บน underlying OS ได้ทันที เทียบเท่ายึดอุปกรณ์ทั้งเครื่อง
ที่อันตรายกว่าค่า CVSS ปกติ คือ Cisco ระบุชัดว่า ไม่มี workaround ทางออกมีแค่อัปเกรดไป fixed release หรือปิด HTTP/HTTPS server ทิ้งถ้าไม่ได้ใช้ อุปกรณ์ที่กระทบครอบคลุม Catalyst, ISR, ASR และอุปกรณ์ Cisco อื่นที่รัน IOS XE และเปิด ip http server หรือ ip http secure-server ส่วน IOS classic, IOS XR และ NX-OS ไม่กระทบ
| รายการ | ค่า |
|---|---|
| CVE-ID | CVE-2025-20334 |
| CVSS v3.1 | 8.8 (High) |
| Component | HTTP API subsystem ของ IOS XE |
| Privilege ที่ต้องใช้ | Administrative (PR:H) — หรือหลอก admin คลิกลิงก์ (UI:R) |
| ผลกระทบ | Command execution as root |
| Workaround | ไม่มี (ต้อง patch หรือปิด HTTP server) |
2. รายละเอียดช่องโหว่#
ต้นเหตุของ CVE-2025-20334 คือ insufficient input validation ใน HTTP API ของ IOS XE เมื่อ user ที่ผ่าน auth ส่ง request ที่ craft มาเป็นพิเศษ ระบบจะส่ง input ต่อไปประมวลผลในชั้น shell โดยไม่ sanitize ผู้โจมตีจึงแทรก OS command เข้าไปและให้รันด้วยสิทธิ์ของ process HTTP API ซึ่งเทียบเท่า root บน Linux ที่อยู่ใต้ IOS XE
จุดที่ต้องย้ำคือ vector ของช่องโหว่นี้ต้องการ admin-level credential (PR:H ตาม CVSS vector) แต่ Cisco ระบุว่ามี exploit path ที่สอง: ผู้โจมตีไม่ต้องมี credential ของตัวเอง แต่ใช้ social engineering หลอก admin ที่ login อยู่ให้คลิกลิงก์อันตราย ให้ browser ยิง request เข้าอุปกรณ์แทน (ลักษณะคล้าย CSRF chain — UI:R) แปลว่าทีมที่คิดว่า "admin ไม่กดลิงก์มั่ว เลยปลอดภัย" ก็ยังเสี่ยงถ้า admin browser session ใน LAN เดียวกันกับอุปกรณ์
เมื่อได้ root shell บน management plane ผู้โจมตีจะ:
- แก้ configuration ทั้งก้อน รวม routing, ACL, AAA
- ฝัง backdoor account หรือกลไก persistence อื่น
- Pivot จาก management network เข้าสู่ฝั่ง production
- ดึง certificate, key, credential ที่เก็บบน device
3. Affected products / versions#
ครอบคลุมอุปกรณ์ Cisco ทุกตระกูลที่รัน Cisco IOS XE Software และเปิด HTTP server เช่น:
- Catalyst Switches (Catalyst 9000 series ที่ใช้ IOS XE)
- ASR 1000 series routers
- ISR 1000 / 4000 series routers ที่รัน IOS XE
- Catalyst 8000 Edge Platforms
- Cloud Services Router (CSR 1000v) และ Catalyst 8000V
- Wireless LAN Controllers (Catalyst 9800) ที่เปิด web UI / RESTCONF
อุปกรณ์ที่ ไม่กระทบ ได้แก่ Cisco IOS classic, IOS XR, NX-OS และ Meraki
สำหรับ fixed release ให้ใช้ Cisco Software Checker เช็ค train ที่ใช้อยู่ เพราะ IOS XE มีหลาย train (17.6, 17.9, 17.12, 17.15 ฯลฯ) และ rebuild ที่แก้ช่องโหว่นี้อยู่คนละเวอร์ชันกันในแต่ละ train
4. การตรวจสอบว่าอุปกรณ์เรา expose หรือไม่#
ขั้นแรก เช็คว่า HTTP/HTTPS server เปิดอยู่หรือไม่ บน device:
show running-config | include ip http
ถ้าเจอบรรทัดทำนองนี้ แสดงว่า เปิดบริการอยู่ และอยู่ในขอบเขตที่ถูกโจมตีได้:
ip http server
ip http secure-server
ip http authentication local
ip http secure-port 443
เช็ค ACL ที่จำกัด management plane:
show running-config | include ip http access-class
show running-config | section control-plane
และเช็คเวอร์ชัน IOS XE ที่รันอยู่:
show version | include IOS XE Software
นำเวอร์ชันที่ได้ไปเทียบกับ Cisco Software Checker หรือ advisory ฉบับเต็ม เพื่อยืนยันว่าอยู่ใน vulnerable range หรือไม่
5. Mitigation#
5.1 Patch ไป fixed release (แนะนำที่สุด)#
วิธีที่ Cisco แนะนำคืออัปเกรด IOS XE ไป release ที่มี fix ของ CVE-2025-20334 แล้ว ก่อนอัปเกรด:
- Snapshot config ปัจจุบัน (
copy running-config startup-config+ เก็บออกนอก device) - เช็ค HA / stack pair ว่ามี downtime plan รองรับ
- ทดสอบ image ใหม่บน lab หรือ pilot site ก่อน rollout production
5.2 ปิด HTTP / HTTPS server ถ้าไม่ใช้#
ถ้าอุปกรณ์ไม่ต้องใช้ web UI หรือ RESTCONF (เช่นจัดการผ่าน SSH + NETCONF over SSH อย่างเดียว) ปิดทิ้งเลยปลอดภัยสุด:
configure terminal
no ip http server
no ip http secure-server
end
write memory
ย้ำว่านี่ ไม่ใช่ workaround ของช่องโหว่ แต่เป็นการตัด attack surface ตรง ๆ ไม่มี HTTP API ก็ไม่มีจุดโจมตี
5.3 จำกัด management plane ด้วย ACL#
ถ้าต้องเปิด HTTP server (เช่น orchestrator ใช้ RESTCONF) ให้บังคับ access ผ่าน ACL:
ip access-list standard MGMT-HTTP
permit 10.10.0.0 0.0.0.255
deny any log
!
ip http access-class ipv4 MGMT-HTTP
ip http secure-server
เสริมด้วย Control Plane Policing (CoPP) เพื่อกัน volumetric abuse
ระวัง vector ที่สอง (UI:R) — ถึงแม้ exploit ต้องการ admin credential แต่ Cisco ระบุชัดว่ามี attack path ผ่าน social engineering หลอก admin ที่ login GUI/CLI อยู่ให้คลิกลิงก์อันตราย จากนั้น browser ของ admin จะส่ง crafted request เข้าอุปกรณ์เอง (คล้าย CSRF) แปลว่าถึงไม่มี credential leak ตรง ๆ ก็โดนได้ — ทีมที่มี admin จัดการอุปกรณ์ผ่าน workstation ทั่วไป (อ่านเมล/เว็บ) ควรถือว่าอุปกรณ์ Cisco ที่ HTTP API เปิดอยู่ใน high-risk pool ทันที
ถ้าองค์กรไม่ใช้ HTTP API / web UI ของ IOS XE เลย ใส่ no ip http server + no ip http secure-server เข้าไปใน baseline configuration template ของ device provisioning เลย จะได้ปิดถาวรทุกเครื่องใหม่ ไม่ต้องตามแก้รายเครื่องตอนมีเหตุ
6. สรุป + Action Priority#
CVE-2025-20334 เป็นช่องโหว่ระดับ High ที่อันตรายกว่าค่า CVSS บอก เพราะ:
- ไม่มี workaround จริง
- admin credential ที่หลุด หรือ admin โดน phish คลิกลิงก์ → ยึดอุปกรณ์ได้ทันที (vector UI:R)
- ผลลัพธ์คือ root command execution บน device
ลำดับงานที่แนะนำสำหรับทีม network / security:
- Inventory ทันที — list device IOS XE ทั้งหมด พร้อมสถานะ
ip http serverและเวอร์ชัน - ปิด HTTP server บนอุปกรณ์ที่ไม่ใช้ web UI / RESTCONF เพื่อลด exposure ระหว่างรอ patch
- ใส่ ACL จำกัด management plane ของอุปกรณ์ที่ยังต้องเปิด HTTP
- วาง patch window สำหรับอุปกรณ์ vulnerable เรียงจาก edge / internet-facing → distribution → access
- Audit admin account บนอุปกรณ์ Cisco — rotate password ของ admin/privilege-15 account ทุกตัว, เปิด MFA สำหรับ TACACS/RADIUS, แยก management network ไม่ให้ admin workstation ที่ใช้อ่านเมล/เว็บ access อุปกรณ์ตรง
- เพิ่มกฎ baseline ใน provisioning template ให้ HTTP server ปิด default เปิดเฉพาะ device ที่จำเป็น