Cross Site Scripting
XSS, de l'anglès Cross-site scripting és un tipus de vulnerabilitat informàtica o forat de seguretat basat en l'explotació de vulnerabilitats del sistema de validació del HTML incrustat.
Introducció
El seu nom original és "Cross Site Scripting", i s'abrevia com XSS per no ser confòs amb les sigles CSS, ([[fulls d'estil en cascada]]). Les vulnerabilitats de XSS originalment s'extenen qualsevol atac que permeti executar codi de "scripting", com VBScript o JavaScript, en el context de alguna altre lloc web (recentment això es podría classificat més correctament com "diferents orígens"). Aquests errors es poden trobar en qualsevol aplicació que tingui com a objectiu final el presentar la informació en un navegador web. No es limita a llocs web, ja que pot haver aplicacions locals vulnerables a XSS, o inclús el navegador en si mateix. El problema està en que casualment no es validen correctament les dades de entrada que són utilitzats en determinada aplicació. Aquesta vulnerabilitat pot estar present de forma directa (també anomenada persistent) o indirecta (també anomenada reflexada).
- Directa (Persistent): aquest tipus de XSS comunament filtrat, i que consisteix a introduir
codi HTML perillós en llocs que ho permetin; incloent així etiquetes com <script> o <iframe>.
- Indirecta (Reflectida): aquest tipus de XSS consisteix a modificar valors que l'[[aplicació
web]] utilitza per passar variables entre dos pàgines, sense utilitzar sessions i es dona lloc quan hi ha un missatge o ruta en la URL del navegador, en una cookie, o qualsevol altra capçalera HTTP (en alguns navegadors i aplicacions web, això podria extendres al DOM del navegador).
XSS Indirecte (reflexat)
Suposem que un lloc web té la següent URL:
http://www.example.com/home.asp?frame=menu.asp
i que en accedir es crearà un document HTML enllaçant amb un frame a menu.asp. En aquest exemple, que passaria si es poda com URL del frame un codi javascript? (Atenció, no ho poseu vosaltres al vostre propi navegador!).
javascript:while(1)alert("Aquest missatge sortirà indefinidament en bucle");
Si aquest enllaç el posa un atacant cap a una víctima, el visitant podrà veure'l i veurà que es del mateix domini, suposant que no pot ser dolent i de resultat tindrà un bucle infinit de missatges. Un atacant en realitat intentaria de col·locar un script que s'emporti les cookies de la víctima, per a desprès poder personificar-se com amb la seva sessió, o fer automàtic el procés amb la utilització de la biblioteca cURL o alguna similar. D'aquesta forma, al rebre la cookie, el atacant podria executar accions amb els permisos de la víctima sense necessitar tan sol la seva contrasenya. Un altre ús comú per aquestes vulnerabilitats és aconseguir fer phishing. Vol dir que la víctima veu en la barra de direccions una web, però realment esta en una altra. La víctima introdueix la seva contrasenya i s'envia al atacant. Una pàgina com la següent:
error.php?error=Usuari%20Invalid
és probablement vulnerable a XSS indirecte, ja que si escriu el document "Usuari invàlid", això
significa que un atacant
podria insertar HTML i JavaScript si així ho desitja.
Per exemple, un tag com <script>
que executi codi javascript, que creï una sessió
com un altre usuari i envïi la
sessió actual al atacant.
Per provar vulnerabilitats de XSS en cookies es pot modificar el contingut d'una cookie de forma
senzilla, utilitzant el
següent script. Tan sols s'ha de col·locar a la barra de direccions i prèmer 'Enter'.
javascript:void prompt("Introdueix la
cookie:",document.cookie).replace(/[^;]+/g,function(_){document.cookie=_;});
XSS Directe (persistent)
Funciona localitzant punts dèbils en la programació dels filtres de HTML, si és que existeixen,
per a publicar contingut
(com blogs, fòrums, etc.).
Normalment l'atacant intentarà insertar tags com <iframe>, o <script>, però en cas de fallar,
l'atacant pot intentar
posar tags que gairebé sempre estan permesos i és poc coneguda la seva capacitat de executar
codi. De aquesta forma el atacant
podria executar codi viral.
Exemples:
Una possibilitat és de utilitzar atributs que permetin executar codi.
<BR SIZE="&{alert('XSS')}">
<FK STYLE="behavior: url(http://yoursite/xss.htc);">
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
També es pot crear un DIV amb background-image: url(javascript:eval(this.fu))
com estil i afegir al DIV un camp
anomenat fu
que contingui el codi a executar, per exemple:
<div fu="alert('Hola món');" STYLE="background-image: url(javascript:eval(this.fu))">
Referencies
- Seth Fogie, Cross Site Scripting Attacks: Xss Exploits and Defense. 2007 ISBN
1-59749-154-3
Enllaços externs