.net System.Security.Principal.WindowsPrincipal user namespace ldap injection

0

Una recente scansione di un'applicazione .net ha rilevato una vulnerabilità ldap injection per un campo utilizzato per un nome utente assegnato a un'istanza di una classe personalizzata denominata User.

Dopo aver analizzato il codice, ho scoperto che all'istanza User è stata fornita l'istanza System.Security.Principal.WindowsPrincipal e in effetti ha inviato una richiesta di autenticazione per il nome utente fornito al server IIS del computer host, che appare come un evento di accesso nella Sicurezza log.

Non sono ancora riuscito a ottenere una risposta consistente per l'iniezione per i risultati delle query ldap positive e negative, ma sembra molto probabile, e sto lavorando per ottenere un'altra scansione con gli stessi risultati, avendo qualche problema , ma non ho ancora raggiunto un muro.

Convalidare una lista bianca impedirà che la stringa classObject venga iniettata, ma penso che l'utilizzo della stringa User in .net non debba essere eseguito per questo motivo, tuttavia mi sto anche interrogando sullo spazio dei nomi System.Security.Principal.WindowsPrincipal essendo una vulnerabilità di ldap injection stessa.

Sono comunque in grado di impedire ciò oltre alla convalida della whitelist, ma consentono comunque l'utilizzo dello spazio dei nomi di sistema in un file .cs. O se le classi User dovessero essere personalizzate, essere cambiate in un'altra stringa?

    
posta tuson 27.02.2014 - 02:59
fonte

1 risposta

1

Dalla tua domanda posso dedurre che stai utilizzando uno scenario di autenticazione della delega dei server Web LDAP SPNEGO.

  • Ciò significa che non dovresti consentire l'autenticazione anonima in IIS , dal momento che stai delegando in IIS per autenticare l'utente che non hai scelta sulla tua app ma per accettare qualsiasi risposta IIS ti dà. Se disponi dell'autenticazione anonima potrebbe essere possibile per un utente dichiarare di essere qualcuno che non è.

  • Inoltre, solitamente System.Security.Principal.WindowsPrincipal viene utilizzato per sapere quale utente sta eseguendo l'applicazione e System.Web.HttpContext.User è il giusto oggetto per identificare l'utente che ha effettuato l'accesso attraverso la richiesta web.

Questa analisi potrebbe essere lontana, avrei bisogno di vedere la configurazione del pool di applicazioni, la configurazione di IIS e i dettagli di implementazione del modulo di autenticazione per essere sicuri di cosa sta succedendo.

    
risposta data 27.02.2014 - 17:30
fonte

Leggi altre domande sui tag