
A08:2021 - Fallades d'Integritat del Programari i Dades
Celia CatalánCompartir
Descripció de la vulnerabilitat
Aquest tipus de vulnerabilitat es manifesta quan l'aplicació no està protegida adequadament contra la manipulació de dades crítiques o components del programari, cosa que pot donar lloc a alteracions en les dades, atacs de suplantació o la injecció de codi no autoritzat. Aquesta categoria inclou específicament riscos com la manca d'integritat en actualitzacions de programari, biblioteques externes o configuracions crítiques de dades.
Impacte
L'impacte d'aquesta vulnerabilitat en els sistemes i aplicacions on està present inclou el següent:
- Injeccions de codi: Els atacants poden comprometre el programari i les aplicacions injectant codi que s'executa al sistema. Això podria resultar en accés no autoritzat, filtració de dades o alteració de la funcionalitat del sistema.
- Compromís de la cadena de subministrament del programari: Si un atacant aconsegueix comprometre una dependència o biblioteca utilitzada per múltiples organitzacions, l'impacte pot ser ampli, afectant nombroses aplicacions que depenen d'aquest component.
- Atacs d'escalada de privilegis o denegació de servei: És possible modificar configuracions crítiques del sistema o introduir vulnerabilitats que permetin elevar privilegis, comprometent la infraestructura o impedint el seu correcte funcionament.
Relació amb altres vulnerabilitats de l'OWASP Top Ten
- A06:2021 - Components vulnerables i obsolets: Aquesta vulnerabilitat està estretament relacionada amb l'ús de components insegurs o obsolets, ja que la manca d'integritat del programari sovint implica dependències vulnerables.
- A07:2021 - Fallades d'Identificació i Autenticació: Si les configuracions d'autenticació no estan adequadament protegides, els atacants poden aprofitar fallades en la integritat de les dades per manipular aquests mecanismes.
- A09:2021 - Fallades en la registració i monitorització de la seguretat: La manca d'una monitorització adequada pot fer que els errors en la integritat del programari o les dades passin desapercebuts, incrementant el risc d'explotació.
Exemple pràctic
Deserialització Insegura
La deserialització insegura es produeix quan un lloc web deserialitza dades controlades per l'usuari. Això pot permetre que un atacant manipuli objectes serialitzats per introduir dades malicioses en el codi de l'aplicació.
En alguns casos, l'atacant pot reemplaçar un objecte serialitzat per un d'una classe completament diferent. El preocupant és que qualsevol objecte d'una classe disponible al lloc web serà deserialitzat i instanciat, sense importar la classe que originalment s'esperava. Per aquesta raó, la deserialització insegura també es coneix com una vulnerabilitat d'"injecció d'objectes".
Un objecte d'una classe inesperada podria generar una excepció, però en molts casos el dany ja s'haurà produït. De fet, molts atacs basats en la deserialització es completen abans que finalitzi el procés. Això significa que el mateix procés de deserialització pot desencadenar l'atac, fins i tot si la funcionalitat del lloc web no interactua directament amb l'objecte maliciós. Per tant, els llocs web que utilitzen llenguatges amb tipatge estricte també poden ser vulnerables a aquestes tècniques.
Manipulació d'objectes serialitzats
Explotar algunes vulnerabilitats de deserialització pot ser tan simple com modificar un atribut en un objecte serialitzat. Atès que l'estat de l'objecte es conserva, és possible analitzar les dades serialitzades per identificar i canviar els valors d'atributs rellevants. A continuació, l'objecte maliciós es pot enviar al lloc web a través del seu procés de deserialització. Aquest és el pas inicial en un atac bàsic de deserialització.
En termes generals, hi ha dos enfocaments per manipular objectes serialitzats. Es pot editar l'objecte directament en la seva forma de flux de bytes, o bé escriure un petit script en el llenguatge corresponent per crear i serialitzar el nou objecte per compte propi. Aquest últim enfocament sol ser més senzill quan es treballa amb formats de serialització binària.
Modificació dels atributs dels objectes serialitzats
En manipular les dades, sempre que l'atacant conservi un objecte serialitzat vàlid, el procés de deserialització crearà un objecte al servidor amb els valors dels atributs modificats.
A mode d'exemple, s'accedeix a una web amb credencials d'usuari sense privilegis vàlids i la web genera una cookie de sessió, com es pot observar a la següent imatge:
Mitigacions
- Utilitzar signatures digitals o mecanismes similars per verificar que el programari o les dades provenen de la font original i no han estat alterades.
- Cal assegurar que les biblioteques i dependències, com npm o Maven, s'obtenen de repositoris de confiança. Si l'aplicació té un perfil de risc elevat, es pot considerar allotjar un repositori intern de confiança.
- Utilitzar eines de seguretat per a la cadena de subministrament de programari, com OWASP Dependency Check o OWASP CycloneDX, per verificar que els components no contenen vulnerabilitats conegudes.
- Establir un procés de revisió dels canvis en el codi i la configuració per minimitzar la possibilitat d'introduir codi o configuracions malicioses en el pipeline.
- Assegurar que el pipeline CI/CD compti amb la segregació, configuració i control d'accés adequats per garantir la integritat del codi que flueix a través dels processos de construcció i desplegament.
- Garantir que les dades serialitzades sense signar o sense xifrar no s'enviïn a clients no fiables sense algun tipus de comprovació d'integritat o signatura digital per detectar la manipulació o reproducció de les dades serialitzades.