Vai al contenuto

A08:2021 – Software and Data Integrity Failures icon

Fattori

CWEs corrispondenti Tasso di incidenza Max Tasso di incidenza Medio Sfruttabilità pesata Impatto Medio Copertura Max Copertura media Occorrenze Totali CVE Totali
10 16.67% 2.05% 6.94 7.94 75.04% 45.35% 47,972 1,152

Panoramica

Una nuova categoria per il 2021 che è relativa alla verifica dell'integrità di aggiornamenti software, dati critici, e pipeline di CI/CD. Uno dei più alti impatti pesati dai dati di Common Vulnerability e Exposures/Common Vulnerability Scoring System (CVE/CVSS). Le Common Weakness Enumerations (CWEs) incluse sono CWE-829: Inclusion of Functionality from Untrusted Control Sphere, CWE-494: Download of Code Without Integrity Check, e CWE-502: Deserialization of Untrusted Data.

Descrizione

Le problematiche dell'integrità del software e dei dati riguardano il codice e l'infrastruttura che non ne verificano adeguatamente l'integrità. Un esempio è quando un'applicazione si affida a plugin, librerie o moduli da fonti, repository e content delivery network (CDN) non attendibili. Una pipeline CI/CD insicura può aprire la porta ad accessi non autorizzati, codice dannoso o compromissione completa del sistema. Infine, molte applicazioni ora includono funzionalità di auto-aggiornamento, dove gli aggiornamenti vengono scaricati senza una sufficiente verifica dell'integrità e applicati all'applicazione. Gli attaccanti potrebbero potenzialmente caricare i propri aggiornamenti malevoli da distribuire e da eseguire su tutte le installazioni. Un altro esempio è la deserializzazione insicura, quando gli oggetti o i dati sono codificati o serializzati in una struttura che un attaccante può ispezionare e modificare liberamente.

Come prevenire

  • Usare firme digitali o meccanismi equivalenti per verificare che il software o i dati provengano dalla fonte prevista e non siano stati alterati.

  • Assicurarsi che le librerie e le dipendenze, come npm o Maven, siano collegati a repository affidabili. Se avete un profilo di rischio più alto, considerate l'hosting di un repository interno ben conosciuto e controllato.

  • Assicuratevi che venga usato uno strumento di sicurezza della supply chain del software, come OWASP Dependency Check o OWASP CycloneDX, per verificare che i componenti non contengano vulnerabilità note

  • Assicurarsi che ci sia un processo di revisione per le modifiche al codice e alla configurazione per ridurre al minimo la possibilità che codice o configurazione dannosi vengano introdotti nella pipeline del software.

  • Assicurarsi che la pipeline CI/CD sia adeguatamente segregata, configurata adeguatamente e sia presente un meccanismo di controllo degli accessi per assicurare l'integrità del codice che passa attraverso i processi di compilazione e distribuzione.

  • Assicuratevi che i dati serializzati non firmati o non crittografati non vengano inviati a client non fidati senza qualche forma di controllo dell'integrità o firma digitale per rilevare la manomissione o il replay dei dati serializzati.

Esempi di scenari d'attacco

Scenario #1 Aggiornamenti senza firma: Molti router domestici, set-top box, e altri dispositivi non verificano gli aggiornamenti attraverso una firma. Il firmware non firmato è sempre più spesso un obiettivo per gli attaccanti e questo è un trend che sembra non essere destinato a cessare. Questa è una problematica rilevante in quanto molte volte non è presente alcun meccanismo per rimediare se non quello di correggere in una versione futura e aspettare che le versioni precedenti invecchino.

Scenario #2 Aggiornamento malevolo di SolarWinds: Gli stati-nazione sono sempre stati noti per perpetrare attacchi verso i meccanismi di aggiornamento, con un recente e degno di nota attacco a SolarWinds Orion. L'azienda che sviluppa il software aveva processi per svolgere le build in modo sicuro e controlli sull'integrità degli aggiornamenti. Tuttavia, questi controlli sono violati e per parecchi mesi l'azienda distribuì un aggiornamento malevolo altamente mirato a più di 18,000 organizzazioni, delle quali, circa 100 sono state infettate. Questo è uno dei breach di questa natura di più ampia portata e più significativo nella storia.

Scenario #3 Deserializzazione insicura: Un'applicazione React chiama un insieme di microservizi Spring Boot. Essendo stata scritta nel paradigma funzionale, gli sviluppatori hanno cercato di garantire l'immutabilità del codice. La soluzione che hanno trovato è serializzare lo stato dell'utente e passarlo avanti e indietro ad ogni richiesta. Un attaccante nota la firma dell'oggetto Java "rO0" (in base64) e usa lo strumento Java Serial Killer per ottenere esecuzione di codice remoto sul server dell'applicazione.

Riferimenti

Lista dei CWE correlati

CWE-345 Insufficient Verification of Data Authenticity

CWE-353 Missing Support for Integrity Check

CWE-426 Untrusted Search Path

CWE-494 Download of Code Without Integrity Check

CWE-502 Deserialization of Untrusted Data

CWE-565 Reliance on Cookies without Validation and Integrity Checking

CWE-784 Reliance on Cookies without Validation and Integrity Checking in a Security Decision

CWE-829 Inclusion of Functionality from Untrusted Control Sphere

CWE-830 Inclusion of Web Functionality from an Untrusted Source

CWE-915 Improperly Controlled Modification of Dynamically-Determined Object Attributes