Programmazione Web

Vulnerabilità Race Condition nelle applicazioni Web

Vulnerabilità Race Condition nelle applicazioni Web
Quando un'applicazione web configurata per gestire le funzioni in una sequenza fissa è richiesta per eseguire due o più operazioni contemporaneamente, si verifica un attacco race condition. Questa tecnica sfrutta un ritardo temporale tra quando viene introdotto un servizio e quando si verifica un controllo di sicurezza. Questo attacco può essere effettuato in uno dei due modi, sulla base di applicazioni multithread: intrusione causata da processi non attendibili e intrusione sostenuta da un processo affidabile che potrebbe avere gli stessi e uguali diritti.

Processi diversi possono interagire tra loro senza misure adeguate. Questi attacchi sono noti anche come attacco Time of Check, attacco Time of Use o attacchi TOC/TOU. Le vulnerabilità delle race condition sono presenti in primo luogo a causa di errori di programmazione di base che gli sviluppatori di solito creano e questi errori si sono rivelati costosi. Le entità dannose hanno sfruttato le race condition per molti scopi dannosi, i.e., dall'ottenere buoni gratuiti per rubare denaro da conti online e società di investimento.

Supponiamo che due thread di esecuzione parallela tentino di aumentare il valore di una variabile globale di 5. In definitiva, quindi, la variabile globale avrebbe un valore di 10. Tuttavia, se tutti i thread vengono eseguiti contemporaneamente, l'esecuzione può essere errata senza blocchi o sincronizzazione delle risorse. Quando il primo thread esegue alcune manipolazioni su quella variabile globale, il secondo thread lo legge e inizia a eseguire altre manipolazioni. In questo caso, il valore finale non sarebbe quello previsto.

Ciò si verifica poiché l'effetto della terminazione di un thread dipende dall'esito dell'altro. Quando i due thread vengono eseguiti contemporaneamente, ci saranno conseguenze indesiderate.

Ambito degli attacchi alle condizioni di gara:

Immagina che qualcosa di un po' più critico venga eseguito dai due thread dell'esempio precedente, come lo scambio di denaro tra conti bancari. Per inviare correttamente il denaro, il programma dovrà eseguire queste attività in questa sequenza; Controlla se c'è abbastanza saldo nel conto del mittente, aggiungi denaro sul conto del destinatario, quindi deduci dal conto del mittente. Ma se invii contemporaneamente due richieste, potresti essere in grado di attivare una condizione in cui cambia la sequenza di esecuzione del thread. In una situazione come questa, ti ritroverai con un importo diverso dal previsto.

La vulnerabilità alle condizioni di gara è stata trovata da Egor Homakov sul sito Web di Starbucks. Ha scoperto un modo per creare una quantità infinita di credito sui buoni regalo Starbucks gratuitamente utilizzando browser diversi con cookie diversi.

L'importante attacco Meltdown è un esempio di vulnerabilità delle race condition. Nell'attacco di fusione, la debolezza è innescata dall'elaborazione parallela del recupero dei dati dalla memoria e dall'autenticazione se un utente è autorizzato o meno ad accedere alla memoria. Questo difetto consente a uno strumento di evitare i controlli dei privilegi standard che separano il meccanismo di attacco dall'accesso ai dati del sistema operativo. Questa scappatoia consente a qualsiasi processo non autorizzato di visualizzare dati e informazioni da qualsiasi altro indirizzo collegato allo stato di avanzamento corrente nella memoria. Nel processo di esecuzione errata, le informazioni provenienti da un indirizzo non approvato verranno spesso rapidamente impilate nella cache della CPU, dalla quale le informazioni possono essere recuperate.

Scenari di attacco nella vita reale:

Inviando continuamente numerose richieste al server web, puoi cercare e manipolare le race condition nelle applicazioni web. Se vuoi vedere se puoi prelevare o meno più denaro di quello che hai nel tuo conto bancario, usando la funzione curl, puoi inviare contemporaneamente più richieste di prelievo al server.

arricciatura (ritira 50000) & (ritira 50000) & (ritira 50000) & (ritira 50000) & (ritira 50000) & (ritira 50000)

Più richieste invii in un breve lasso di tempo, maggiori sono le possibilità che il tuo attacco funzioni.

Inoltre, se invii richieste di follow-up asincrone, seguirai un utente più volte invece di inviare una risposta di errore. io.e., se aggiungi un'intestazione falsa contenente %s mentre rilasci le richieste usando turbo intruder e incolli il seguente codice python:

def followReqs(target, wordlist):
engine = RequestEngine(endpoint=target.punto finale,
ConcurrentConnections=40,
requestPerConnection=100,
pipeline=Falso
)
per i nell'intervallo (40):
motore.coda (obiettivo.req, str(i), gate='verifica')
motore.openGate('verifica')
motore.completo(timeout=60)
def responseHandle(req, interessante):
tavolo.aggiungi (richiesto)

Vedrai un pulsante di attacco. Dopo averlo premuto, Turbo Intruder invia 40 query e scansiona i codici di stato. Se vedi più risposte con lo stato 201 Generato, ciò indica più volte che hai seguito la persona.

Esiste una vulnerabilità race condition in cui è possibile accedere a più console offerte agli account gratuiti. La maggior parte dei siti Web che forniscono console gratuite ha account gratuiti, pacchetti standard e premium. Gli account gratuiti forniscono solo 2 o 3 console per utente. Per superare questo limite e utilizzare console illimitate, intromettersi nella richiesta GET utilizzando payload NULL più volte, come 100 o 200. E quindi elimina manualmente una delle console dall'interfaccia utente mentre i thread sono in esecuzione.

Conclusione:

Come mezzo per minare i controlli di accesso, sono incluse le condizioni di gara. Qualsiasi programma che dipende da meccanismi di controllo degli accessi può essere vulnerabile. La maggior parte delle volte, sui siti web delle istituzioni finanziarie, gli hacker sfruttano le race condition. Dal momento che potrebbe portare a vantaggi finanziari illimitati per l'hacker se venisse scoperta una race condition su una caratteristica vitale come il prelievo di contanti, il trasferimento di denaro o il pagamento con carta di credito. Le piattaforme di e-commerce, i videogiochi e i servizi di voto online sono altre tecnologie ad alto rischio. L'implementazione della concorrenza sicura è il segreto per evitare le condizioni di gara. E puoi anche usare i blocchi delle risorse. Ci sarà anche una funzione di blocco integrata per i linguaggi di programmazione con capacità di concorrenza che aiutano a prevenire tali condizioni. Inoltre, seguendo standard di codifica sicuri, i.e., il concetto di privilegio minimo e il codice di controllo ridurranno la possibilità di violazione del programma.

Come utilizzare AutoKey per automatizzare i giochi Linux
AutoKey è un'utilità di automazione desktop per Linux e X11, programmata in Python 3, GTK e Qt. Utilizzando la sua funzionalità di scripting e MACRO, ...
Come mostrare il contatore FPS nei giochi Linux
I giochi Linux hanno avuto una grande spinta quando Valve ha annunciato il supporto Linux per il client Steam e i loro giochi nel 2012. Da allora, mol...
Come scaricare e giocare a Sid Meier's Civilization VI su Linux
Introduzione al gioco Civilization 6 è una versione moderna del concetto classico introdotto nella serie dei giochi Age of Empires. L'idea era abbasta...