Palo Alto เป็น Next Generation Firewall ชื่อดัง ซึ่งถูกใช้ในองค์กรมากมาย ล่าสุดพบช่องโหว่ในหน้า web admin ของตัว Product ทำให้ Attacker ที่สามารถเข้าถึง web admin page ได้สามารถสั่งการ product ได้

Philip Pettersson กล่าวว่าช่องโหว่ Remote Code Execution (RCE) (CVE-2017-15944) นั้นเกิดจากช่องโหว่หลายๆช่องโหว่ด้วยกัน โดยช่องโหว่ทั้งหมดจะสามารถทำได้ก็ต่อเมื่อ Attacker สามารถเข้าถึง Web Admin page ของ Palo Alto ได้ แต่ไม่จำเป็นต้อง authentication แต่อย่างใด

  • ช่องโหว่ Insecure Deserialization เกิดจากที่หน้าเว็บใน /php/* ใดๆของ Palo Alto มีการตรวจสอบ session ที่เป็นค่าข้อมูลแบบ serialized data ซึ่งประเด็นคือ Palo Alto มีการใช้งาน readSessionVarsFromFile() ซึ่งไม่ใช่ php function ต้นตำหรับเป็น function ที่เขียนใหม่เอง โดย function ที่เขียนใหม่นั้นไม่มีการ sanitize ข้อมูลที่ดี ทำให้ Attacker สามารถ inject data ใดๆที่ต้องการได้ (ช่องโหว่ดังกล่าวตรงกับ OWASP Top 10 2017 – A8 Insecure Deserialization ครับ) และสุดท้ายทำให้ XML parser ที่ใช้ในการตรวจสอบ session เกิด error และก็ถือว่า user นั้น authentication success ไปเลย
  • ช่องโหว่ Arbitrary directory creation , ภายใน /php/utils/router.php เป็นตัวจัดการ API request สำหรับ Web Management Interface backend communication ซึ่งมี PHP Class หลายๆอันที่รองรับการทำ remote procedure call (RPC) ผ่าน ​HTTP POST/JSON ตัว /php/device/Administrator.php ซึ่งเป็นตัวที่ใช้ในการประกาศ Administrator class ภายในนั้นจะมี ‘get’ method อยู่ ซึ่งมันจะไปเรียก router.php อีกที ภายใน ‘get’ method นั้น มีช่องโหว่ XML Injection ที่ obj attribute หาก set ไปเป็น async-mode=’yes’ ตัวระบบ backend จะทำการสร้าง temporary file ขึ้นมา ตาม path นี้ /opt/pancfg/session/pan/user_tmp/<cookie value>/<jobid>.xml ซึ่งจะเก็บ output ของ request ไว้ เมื่อเรากำหนดค่าของ cookie value ได้ ก็จะทำ directory traversal creation ได้ เช่น
ก็จะกลายเป็นการสร้างไฟล์ /tmp/hacked/<jobid>.xml ขึ้นมา และภายในไฟล์นั้นก็จะมี content เป็น
  • ช่องโหว่ Command injection ใน cron script, โดยปกติแล้ว Palo Alto จะมีการรัน /usr/local/bin/genindex_batch.sh ทุกๆ 15 นาที โดยใน script ดังกล่าวจะไปรันไฟล์ /usr/local/bin/genindex.sh เพื่อทำการสร้าง index ของ database file ใน /opt/pancfg/mgmt/logdb/ ตัว script ดังกล่าวไม่ได้ตรวจสอบชื่อของ database file หากเราทำการสร้าง $PAN_BASE_DIR/logdb/$dir/1 แล้วกำหนด “-exec” ไว้ในชื่อ file ก็จะกลายเป็นการกำหนดให้ find command ที่อยู่ใน /usr/local/bin/genindex.sh ทำการรันคำสั่งตามที่กำหนดได้ ซึ่งจากตัวอย่างการโจมตีจะตั้งชื่อเป็น ‘* -print -exec python -c exec(“[base64 code..]”.decode(“base64”)) ;’ ก็จะกลายเป็นสั่งให้คำสั่ง find รัน python script ที่อยู่ในรูปแบบของ base64-encoded โดยใช้สิทธิ์ของ root ได้ทันที, ซึ่งจะทำให้เกิด  backdoor web shell ใน /var/appweb/htdocs/api/c.php

ระบบที่ได้รับผลกระทบ: Palo Alto PAN-OS 6.1.x < 6.1.19, 7.0.x < 7.0.19, 7.1.x < 7.1.14, และ 8.0.x < 8.0.6
ผลกระทบ: Remote Code Execution without authentication
วิธีแก้ไข: Update PAN-OS

Source:: Seclists