Riferimenti a oggetti diretti non sicuri

È probabile che si verifichi un riferimento diretto a un oggetto quando uno sviluppatore espone un riferimento a un oggetto di implementazione interna, come un file, una directory o una chiave di database senza alcun meccanismo di convalida che consenta agli aggressori di manipolare questi riferimenti per accedere a dati non autorizzati.

Cerchiamo di comprendere gli agenti di minaccia, i vettori di attacco, la debolezza della sicurezza, l'impatto tecnico e gli impatti sul business di questo difetto con l'aiuto di un semplice diagramma.

Esempio

L'app utilizza dati non verificati in una chiamata SQL che accede alle informazioni sull'account.

String sqlquery = "SELECT * FROM useraccounts WHERE account = ?";
PreparedStatement st = connection.prepareStatement(sqlquery, ??);
st.setString( 1, request.getParameter("acct"));
ResultSet results = st.executeQuery( );

L'autore dell'attacco modifica il parametro della query nel browser in modo che punti all'amministratore.

http://webapp.com/app/accountInfo?acct=admin

Mani su

Step 1- Accedi a Webgoat e vai alla sezione dei difetti di controllo degli accessi. L'obiettivo è recuperare tomcat-users.xml navigando nel percorso in cui si trova. Di seguito l'istantanea dello scenario.

Step 2 - Il percorso del file viene visualizzato nel campo "la directory corrente è" - C: \ Users \ userName $ \. Extract \ webapps \ WebGoat \ lesson_plans \ en e sappiamo anche che il file tomcat-users.xml è conservato sotto C: \ xampp \ tomcat \ conf

Step 3- Dobbiamo attraversare completamente la directory corrente e navigare da C: \ Drive. Possiamo eseguire lo stesso intercettando il traffico utilizzando Burp Suite.

Step 4 - Se il tentativo ha esito positivo, visualizza tomcat-users.xml con il messaggio "Congratulazioni. Hai completato con successo questa lezione."

Meccanismi preventivi

Gli sviluppatori possono utilizzare le seguenti risorse / punti come guida per prevenire riferimenti a oggetti diretti non sicuri durante la fase di sviluppo stessa.

  • Gli sviluppatori devono utilizzare solo un utente o una sessione per i riferimenti a oggetti indiretti.

  • Si consiglia inoltre di verificare l'accesso prima di utilizzare un riferimento a un oggetto diretto da una fonte non attendibile.