Condizioni di gara: ricompense bug

Dec 25 2022
Le vulnerabilità delle condizioni di gara, a mio avviso, sono una delle vulnerabilità web più interessanti. Derivano dagli errori più semplici commessi dagli sviluppatori e questi errori si sono rivelati costosi.

Le vulnerabilità delle condizioni di gara, a mio avviso, sono una delle vulnerabilità web più interessanti. Derivano dagli errori più semplici commessi dagli sviluppatori e questi errori si sono rivelati costosi.

In passato, gli hacker hanno utilizzato le condizioni di gara per rubare denaro da banche online, siti Web di scambio di criptovalute, siti Web di e-commerce e altro ancora.

Quali sono le condizioni di gara?

  • Le race condition si verificano quando due sezioni di codice progettate per essere eseguite in sequenza vengono eseguite fuori sequenza.
  • Per comprendere meglio queste vulnerabilità, devi prima comprendere il concetto di concorrenza.
  • Nella programmazione per computer, la concorrenza è la capacità di eseguire diverse parti di codice contemporaneamente senza influire sul risultato del programma.
  • La concorrenza ha due tipi: multiprocessing e multithreading.
  • Multiprocessing si riferisce all'utilizzo di più CPU per eseguire attività simultanee.
  • Tuttavia, il multithreading è quando una singola CPU esegue le attività simultanee utilizzando "thread". Tuttavia, questi thread in realtà non vengono eseguiti contemporaneamente; si alternano usando la potenza della CPU. Quando un thread è inattivo, altri thread possono continuare a sfruttare le risorse di calcolo inutilizzate. L'organizzazione della sequenza di esecuzione di più thread si chiama schedulazione.
  • Questa programmazione è ciò che causa le condizioni di gara.
  • Una race condition diventa una vulnerabilità quando colpisce un meccanismo di controllo della sicurezza.
  • Immagina che due thread stiano eseguendo il trasferimento di denaro tra conti bancari. L'applicazione dovrebbe eseguire tre attività per trasferire correttamente il denaro. In primo luogo, controlla se il conto di origine ha denaro sufficiente, quindi aggiunge il denaro al conto di destinazione e, infine, sottrae l'importo dal conto di origine.

FILO 1

  1. Controlla il saldo del conto di A(>100$); 2. Aggiungi 100$ al conto B; 3. Detrarre 100$ dal conto A
  1. Controlla il saldo del conto di A (<100$) => Trasferimento non riuscito, fondi insufficienti.
  1. [Thread 1] Conto corrente Un saldo (100$);
  2. [Filo 2] Conto corrente Un saldo (100$);
  3. [Thread 1] Aggiungi 500$ al conto B ; [100$ in A, 100$ in B]
  4. [Thread 2] Aggiungi 500$ al conto B; [100$ in A, 200$ in B]
  5. [Thread 1] Detrarre 500$ dal conto A; [0$ in LA; 200$ in SI]
  6. [Thread 2] Detrarre 500$ dal conto A; [0$ in LA; 200$ in SI]

Sebbene le vulnerabilità delle condizioni di gara siano per lo più associate ai siti Web finanziari, gli hacker possono utilizzarle anche in altre situazioni, come truccare campagne di voto online.

Come prevenire

Il concetto di sincronizzazione è importante quando si tratta di concorrenza nella programmazione. Implica la garanzia che thread o processi non accedano simultaneamente alle risorse condivise, in quanto ciò può portare a race condition e incoerenze dei dati. Un modo per ottenere la sincronizzazione è attraverso l'uso di blocchi delle risorse, che impediscono ad altri thread di accedere a una risorsa fino a quando il thread che detiene il blocco non ha terminato con esso.

Oltre alla sincronizzazione, è anche importante seguire pratiche di codifica sicure per evitare che le race condition diventino problemi di sicurezza più gravi. Il principio del privilegio minimo è una di queste pratiche, che prevede la concessione alle applicazioni e ai processi solo dei privilegi di cui hanno bisogno per completare le loro attività. Ad esempio, se un'applicazione ha solo bisogno di leggere un file, non dovrebbero essere concesse autorizzazioni di scrittura o esecuzione. Ciò riduce i rischi di compromissione del sistema durante un attacco.

Come cacciare?

1. Trova le funzionalità soggette a condizioni di gara:

  • Le condizioni di competizione si verificano spesso in funzionalità che implicano l'aggiornamento di valori numerici, come votazioni online, punteggi di gioco, bonifici bancari, pagamenti di e-commerce e saldi di carte regalo. Per identificare queste funzionalità in un'applicazione, puoi cercare le richieste coinvolte nell'aggiornamento di questi numeri. Ad esempio, se desideri testare la richiesta utilizzata per trasferire denaro da un sito bancario, puoi copiare la richiesta utilizzando Burp Suite facendo clic con il pulsante destro del mouse e selezionando "Copia come comando curl".
  • Per testare e potenzialmente sfruttare le race condition in un target, puoi inviare più richieste al server contemporaneamente. Ad esempio, se vuoi verificare se è possibile trasferire più denaro di quello che hai sul tuo conto bancario, puoi utilizzare il comando curl per inviare più richieste di trasferimento contemporaneamente. Un modo per farlo è copiare il comando da Burp, incollarlo nel terminale e quindi inserire un simbolo "&" tra ogni comando. Ciò ti consentirà di eseguire più comandi contemporaneamente in background su un sistema Linux.
  • curl (transfer $3000) & curl (transfer $3000) & curl (transfer $3000)
    & curl (transfer $3000) & curl (transfer $3000) & curl (transfer $3000)
    

  • Questo è un gioco da ragazzi, controlla se il tuo attacco ha avuto successo

È importante considerare il potenziale impatto di una race condition sulla funzionalità interessata quando si valuta la gravità della vulnerabilità. Una condizione di competizione che consente a un utente malintenzionato di ottenere un accesso illimitato alle risorse finanziarie, ad esempio tramite prelievo di contanti o trasferimento di fondi, potrebbe essere estremamente dannosa sia per le persone interessate che per l'organizzazione.

Oltre al guadagno finanziario, un utente malintenzionato può essere in grado di utilizzare una race condition per ottenere influenza sociale o accedere a informazioni sensibili. Ad esempio, una race condition che consente a un utente malintenzionato di ottenere l'accesso non autorizzato a un account di social media potrebbe essere potenzialmente utilizzata per diffondere disinformazione o manipolare l'opinione pubblica.

Quando si riporta l'impatto di una race condition, è importante articolare chiaramente le potenziali conseguenze per le persone interessate e per l'organizzazione. Ciò può includere la potenziale perdita finanziaria, la perdita di informazioni sensibili o il danno alla reputazione dell'organizzazione. Fornire informazioni chiare e dettagliate sul potenziale impatto della vulnerabilità può aiutare a dare priorità alla sua risoluzione e mitigare le potenziali conseguenze.

Spero che questo post sul blog abbia aiutato! Buona caccia e buon Natale!