API Web ASP.NET e potenziale XSS

4

Mi chiedo se la mia API Web ASP.NET abbia una vulnerabilità XSS poiché il mio controller non aveva un metodo per gestire la chiamata GET predefinita.

Senza il metodo GET gestito nel codice, una chiamata a
/api/mycontroller/?<script>alert('hi');</script> risulterebbe in:

{"Message":"No HTTP resource was found that matches the request URI
 'http://localhost:8888/api/mycontroller/?'.",
 "MessageDetail":"No action was found on the controller 'MyController' that 
  matches the request."}

Tieni presente che i tag dello script si trovano nell'origine JSON, non vengono semplicemente visualizzati nella pagina.

Rilascia il punto interrogativo, /api/mycontroller/<script>alert('hi');</script> , e otterrai
"A potentially dangerous Request.Path value was detected from the client (<)." , quindi ora HttpException protegge gli utenti.

Il routing dell'API è semplicemente quello predefinito:

.Routes.MapHttpRoute(
    "DefaultApi", 
    "api/{controller}/{id}", 
    new { id = RouteParameter.Optional });

e ora ho aggiunto un metodo di azione predefinito:

[HttpGet]
public HttpResponseMessage Get()
{ 
    // do something. 
}

L'inserimento di questo metodo di azione, tuttavia, potrebbe facilmente essere perso quando uno sviluppatore sta creando un'API, credo.

Quindi mi stavo chiedendo, si tratta di un problema XSS sfruttabile?

    
posta Boggin 20.12.2013 - 14:00
fonte

1 risposta

6

Probabilmente questa condizione non era una vulnerabilità XSS sfruttabile per la maggior parte delle applicazioni. Questo è più probabilmente un filtro di "difesa in profondità" per evitare che i programmatori causino problemi involontariamente.

XSS è risolto in un'API impostando il tipo di contenuto su application/xml o application/json a seconda del tipo di dati di ritorno (e text/plain è anche comunemente usato per prevenire XSS). XSS riflettente e persistente può essere un problema solo se la pagina ha un tipo di contenuto HTML. XSS basato su DOM è ancora una preoccupazione per i servizi Web. Le norme di sicurezza dei contenuti possono essere utilizzate per limitare ulteriormente la possibilità di eseguire JavaScript utilizzando Iniezione HTML, ed è utile per prevenire l'XSS basato su DOM.

Quando si utilizza un browser moderno, un payload XSS non dovrebbe eseguire su un tipo di contenuto non eseguibile. Tuttavia, è una buona idea disabilitare esplicitamente lo sniffing dei contenuti per i browser legacy o non standard:

X-Content-Type-Options: nosniff
    
risposta data 20.12.2013 - 17:34
fonte

Leggi altre domande sui tag