A08:2021 - Software and Data Integrity Failures

A08:2021 - Fallades d'Integritat del Programari i Dades

Celia Catalán


En aquest capítol de l'OWASP Top Ten, parlarem de la vulnerabilitat A08:2021 - Software and Data Integrity Failures o en català A08:2021 - Fallades en el programari i en la integritat de les dades.

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:


A continuació, si s'accedeix a la secció de l'aplicació on estan les dades del compte de l'usuari mitjançant el mètode HTTP GET, s'observa com la cookie de sessió també és enviada.


Aquesta cookie de sessió s'envia en base64 amb codificació URL, per tant, si es deserialitza és possible veure els objectes i els camps que s'envien en ella.


Analitzant la cookie en text pla, es pot observar que l'objecte "admin" és de tipus boolean i té com a valor 0, és a dir, usuari sense privilegis. Veient això, és possible que l'aplicació web detecti si un usuari té o no privilegis a causa d'aquest paràmetre.

Si ara es modifica el valor boolean de "admin" de 0 a 1 i es realitza la petició, en no tenir un mecanisme de control de les dades serialitzades que eviti la modificació d'aquestes per part de l'usuari, serà possible elevar privilegis a Administrador i, per tant, accedir al panell d'administració del web.



Mitigacions

Les mitigacions recomanades per OWASP per minimitzar l'impacte d'aquesta vulnerabilitat són les següents:
  • 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.


Conclusions

La vulnerabilitat A08:2021 - Fallades d'integritat del programari i les dades és un risc crític que compromet la seguretat de les aplicacions quan no s'asseguren adequadament els mecanismes que garanteixen l'autenticitat i fiabilitat del programari i les dades. 

Per prevenir aquesta vulnerabilitat, és fonamental implementar mesures com l'ús de signatures digitals, la gestió segura de dependències i biblioteques de programari, la protecció de configuracions crítiques i la integració de controls de seguretat al llarg del cicle de vida del desenvolupament, augmentant així la integritat de les dades de l'aplicació.

Justo Martin, Analista de Ciberseguretat a Zerolynx.


Tornar al bloc

Deixa un comentari

Tingueu en compte que els comentaris s'han d'aprovar abans que es publiquin.