¿Tu web está en riesgo? Descubre por qué las librerías obsoletas son una bomba de tiempo

¿La teva web està en risc? Descobreix per què les biblioteques obsoletes són una bomba de temps.

Celia Catalán


 Components vulnerables i obsolets

Introducció

Les aplicacions web modernes segueixen arquitectures de múltiples components de programari com bases de dades, APIs (Application Programming Interface), biblioteques, frameworks, sistemes operatius, etc. La gestió i inventariat dels components de programari suposa una tasca bàsica i necessària per a les organitzacions, donada la seva importància per garantir la seguretat, mantenir la compatibilitat, optimitzar el rendiment, reduir riscos operatius, i assegurar el compliment de normatives i llicències vigents com ISO o GDPR. 

Com a conseqüència de la falta de manteniment dels components de programari, existeixen riscos com la vulnerabilitat de Components Vulnerables i Desactualitzats, sent una de les principals amenaces de seguretat identificades en l'OWASP Top Ten de 2021, classificat en la sisena posició. 

Components vulnerables vs Components desactualitzats

Els Components vulnerables són aquells que compten amb vulnerabilitats de seguretat que els atacants poden aprofitar per accedir a informació sensible o guanyar accés al sistema. 

D'altra banda, els Components desactualitzats es refereixen a l'ús de components de programari que ja no reben actualitzacions de seguretat, i que, per tant, manquen de pegats de seguretat que solucionin les vulnerabilitats existents.

Impacte

Algunes de les vulnerabilitats que afecten els components vulnerables o desactualitzats i que poden ser susceptibles d'ésser explotades per usuaris malintencionats són les següents:

  • Injecció de codi: Debilitat de seguretat que permet a un atacant introduir codi maliciós en una aplicació (generalment a través d'entrades d'usuari no validades o mal sanititzades) el qual és executat per l'aplicació, permetent a l'atacant realitzar accions no autoritzades. 
  • Desbordament de búfer: Els desbordaments de búfer succeeixen quan s'excedeix la capacitat de memòria assignada, permetent que els atacants alterin i corrompin dades a la memòria adjacent. Això pot resultar en l'execució de codi maliciós que provoca fallades del sistema, altera controls de seguretat o permet l'escalament de privilegis.
  • Cross Site Scripting: El Cross-Site Scripting és un risc crític per a les aplicacions web modernes, ja que permet als atacants injectar scripts maliciosos en llocs de confiança. Un enfocament comú és el XSS emmagatzemat, on els atacants inserten scripts en components vulnerables de tercers, aprofitant la manca d'actualitzacions i revisions de seguretat, cosa que pot generar amenaces persistents que afecten a múltiples usuaris i sistemes. 

Identificar components vulnerables i desactualitzats

El primer pas per a la detecció de components vulnerables és identificar els programaris existents a l'aplicació o al sistema i les seves versions. Identificar aquestes versions pot involucrar diferents enfocaments, eines i tècniques, com les que es comenten a continuació:

  • Codi font: El codi és la columna vertebral de qualsevol programari i, si conté errors de seguretat, pot ser explotat per comprometre la integritat, confidencialitat i disponibilitat d'un sistema. Les vulnerabilitats en el codi solen originar-se per males pràctiques de programació o per la integració de biblioteques de tercers desactualitzades. 

L'anàlisi estàtica de codi (SAST) és una tècnica que permet revisar el codi font d'una aplicació sense executar-lo, amb l'objectiu d'identificar patrons que representin vulnerabilitats de seguretat. Aquest anàlisi es duu a terme mitjançant eines automatitzades que detecten males pràctiques, violacions d'estàndards de programació segura i l'ús de funcions crítiques. 


  • Exposició de versions en el frontend: És freqüent trobar en aplicatius web versions dels components emprats en la interfície pública.


  • Capçaleres HTTP: Algunes aplicacions web i servidors exposen les versions del programari a les capçaleres HTTP de les respostes. Aquestes capçaleres poden incloure detalls com el servidor web utilitzat (Apache, Nginx, IIS), versions de PHP, Python, ASP.NET, o fins i tot informació sobre frameworks com per exemple Django o Ruby on Rails.
A continuació, es mostren alguns exemples de capçaleres útils:
  • Servidor: Exposa el tipus i versió del servidor web.
    • Exemple: Servidor: Apache/2.4.49 (Ubuntu)
  • X-Powered-By: Indica el llenguatge de programació o framework utilitzat.
    • Exemple: X-Powered-By: PHP/7.4.3 o X-Powered-By: ASP.NET
  • Via: Pot revelar detalls sobre proxies o gateways utilitzats.
    • Exemple: Via: 1.1 vegur
  • X-AspNet-Version: Específica d'aplicacions ASP.NET.
    • Exemple: X-AspNet-Version: 4.0.30319
  • X-Drupal-Cache: En sistemes basats en Drupal.
    • Exemple: X-Drupal-Cache: HIT

  • Provocar errors: La pràctica de sotmetre un sistema, aplicació o programari a situacions que desencadenin comportaments inesperats, fallades o respostes inusuals pot arribar a revelar algunes de les tecnologies emprades.
Aquesta tècnica és coneguda en l'àmbit de la ciberseguretat com a fuzzing o fuzz testing, i té com a objectiu detectar vulnerabilitats o fallades en la robustesa del programari mitjançant la introducció d'entrades aleatòries, malformades o anòmales per provocar errors i analitzar les respostes.


  • Banner Grabbing: El banner grabbing és una tècnica molt utilitzada per obtenir informació de versions de serveis que s'estan executant en un servidor. Molts serveis, com servidors web, FTP, SSH, o SMTP, retornen banners en connectar-se que inclouen el nom del programari, la seva versió, i de vegades informació addicional.
  • Eines d'escanneig de vulnerabilitats i enumeració de serveis: Les eines d'escanneig de vulnerabilitats solen identificar versions de components basant-se en les respostes que els servidors o serveis donen davant certes peticions o característiques.


  • Interacció amb APIs: Moltes aplicacions web exposen APIs que proporcionen detalls sobre el programari, incloent versions. Algunes APIs retornen aquesta informació en capçaleres HTTP o respostes JSON.

Algunes eines interessants

Existeixen multitud d'eines útils que faciliten la identificació de versions en una aplicació web. Algunes d'elles són les següents:

Nmap

Una de les eines més populars per a l'escanneig de xarxes i serveis. Els seus scripts NSE (Nmap Scripting Engine) permeten detectar versions de servidors i aplicacions específiques. 
Per poder fer ús d'aquests scripts, s'empra l'opció --script. Alguns scripts interessants per identificar versions de programari són http-enum i http-server-header.

Nessus / OpenVAS

Aquestes eines realitzen escaneigs de vulnerabilitats avançats, identificant serveis, versions i vulnerabilitats conegudes (CVE). 
La major limitació que té l'eina Nessus, tot i ser més completa i fàcil d'usar que OpenVAS, és el seu ús comercial, amb alts costos de llicència. Per això, com a alternativa de codi obert es troba OpenVAS.

Ningú

Nikto és una eina de codi obert dissenyada per realitzar escaneigs de seguretat en servidors web. És àmpliament utilitzada en auditories i proves de penetració per identificar vulnerabilitats comunes, configuracions incorrectes, versions desactualitzades de programari, i altres problemes de seguretat en servidors web.
La seva base de dades s'actualitza regularment per incloure noves vulnerabilitats i configuracions insegures.

WhatWeb

WhatWeb és una eina inclosa a Kali Linux de reconeixement dissenyada per identificar tecnologies utilitzades en llocs web. WhatWeb examina llocs web i extreu detalls sobre servidors web, frameworks, sistemes de gestió de contingut (CMS), llenguatges de programació, biblioteques, configuracions i més.

Wappalyzer

Una eina que resulta molt còmoda a l'hora de tenir una visió ràpida de quines tecnologies es troben desplegades en una aplicació web és Wappalyzer. Es pot instal·lar com a extensió de diversos navegadors com Chrome, Firefox o Edge, i pot mostrar versions de les tecnologies implicades.

Retire.js

Retire.js és una eina especialitzada en la identificació de vulnerabilitats en biblioteques JavaScript i/o mòduls Node.JS obsolets o vulnerables.
A més, aquesta eina s'ha integrat directament amb BurpSuite i ZAP (Zed Attack Proxy) mitjançant un plugin el qual us adjunto a continuació: https://github.com/h3xstream/burp-retire-js

Una vegada identificada la versió...
Un cop s'identifica la versió per algun dels mètodes citats anteriorment, és necessari comparar les dades extretes amb bases de dades com CVE Details, Exploit DB o https://www.metasploit.com/ per buscar vulnerabilitats associades a les versions específiques.


Mitigació/Remediació

  • Mantenir un inventari de tecnologies emprades (biblioteques, frameworks, components de programari utilitzats en l'aplicació o sistema incloent detalls com les versions específiques de cada component i el seu origen, la qual cosa permet identificar ràpidament aquells que estan desactualitzats o són vulnerables. 
  • Mantenir-se actualitzat: És crucial estar al corrent de les actualitzacions de seguretat i les vulnerabilitats recentment descobertes que afecten els components de programari utilitzats. Això implica subscriure's a butlletins de seguretat, seguir bases de dades de vulnerabilitats conegudes (com CVE), utilitzar eines automàtiques per detectar versions desactualitzades i vulnerables, i monitoritzar activament les alertes dels proveïdors de les tecnologies emprades. Els desenvolupadors han de mantenir bones pràctiques de seguretat en les aplicacions desenvolupades per evitar problemes futurs.
  • Bones pràctiques de desenvolupament. És recomanable a l'hora de desenvolupar les aplicacions web evitar l'ús de biblioteques, frameworks o eines que no rebin actualitzacions regulars o que no comptin amb una comunitat activa que pugui respondre a vulnerabilitats i necessitats de millora.
Alba Vara, Pentester a Zerolynx
Tornar al bloc

Deixa un comentari

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