Hacker News

CSP pentru Pentesteri: Înțelegerea elementelor fundamentale

Comentarii

15 min read Via www.kayssel.com

Mewayz Team

Editorial Team

Hacker News

De ce fiecare pentester trebuie să stăpânească politica de securitate a conținutului

Politica de securitate a conținutului (CSP) a devenit unul dintre cele mai critice mecanisme de apărare din partea browserului împotriva atacurilor de tip cross-site scripting (XSS), injectarea de date și clickjacking. Cu toate acestea, în angajamentele de testare de penetrare, anteturile CSP rămân unul dintre cele mai frecvent configurate greșit - și înțelese greșit - controale de securitate. Un studiu din 2024, care a analizat peste 1 milion de site-uri web, a constatat că doar 12,8% au implementat antete CSP, iar dintre acestea, aproape 94% conțineau cel puțin o slăbiciune a politicii care ar putea fi exploatată. Pentru pentesteri, înțelegerea CSP nu este opțională – este diferența dintre o evaluare la nivel de suprafață și un raport care întărește de fapt postura de securitate a unui client.

Fie că desfășurați evaluări ale aplicațiilor web, vânătoare de recompense de erori sau construiți securitate într-o platformă de afaceri care gestionează datele sensibile ale clienților, cunoștințele CSP sunt fundamentale. Acest ghid dezvăluie ce este CSP, cum funcționează sub capotă, unde eșuează și cum pentesterii pot evalua sistematic și ocoli politicile slabe.

Ce face de fapt politica de securitate a conținutului

În esență, CSP este un mecanism de securitate declarativ furnizat printr-un antet de răspuns HTTP (sau mai puțin frecvent, o etichetă ). Acesta indică browserului care surse de conținut - scripturi, stiluri, imagini, fonturi, cadre și multe altele - au permisiunea de a încărca și executa pe o anumită pagină. Când o resursă încalcă politica, browserul o blochează și, opțional, raportează încălcarea unui punct final specificat.

Motivația inițială din spatele CSP a fost atenuarea atacurilor XSS. Apărările XSS tradiționale, cum ar fi igienizarea intrărilor și codificarea ieșirii, sunt eficiente, dar fragile - un singur context ratat sau o eroare de codare poate reintroduce vulnerabilitatea. CSP adaugă un strat de apărare în profunzime: chiar dacă un atacator injectează o etichetă de script rău intenționat în DOM, o politică configurată corespunzător împiedică browserul să o execute.

CSP funcționează pe un model de listă albă. În loc să încerce să blocheze conținutul cunoscut rău, definește ceea ce este permis în mod explicit. Orice altceva este refuzat implicit. Această inversare a modelului de securitate este puternică în teorie, dar în practică, menținerea politicilor stricte în aplicațiile web complexe — în special platformele care gestionează zeci de module integrate precum CRM, facturare, analiză și sisteme de rezervare — este notoriu de dificilă.

Anatomia unui antet CSP: directive și surse

Un antet CSP este compus din directive, fiecare controlând un anumit tip de resursă. Înțelegerea acestor directive este esențială pentru orice pentester care evaluează politica unei ținte. Cele mai importante directive includ default-src (funcția de rezervă pentru orice directivă care nu este setată în mod explicit), script-src (execuție JavaScript), style-src (CSS), img-src (imagini), connect-src (XHR, Fetch, WebSocket connection (XHR, Fetch, WebSocket) frame-src, me-src iframes) și object-src (plugin-uri precum aplicațiile Flash sau Java).

Fiecare directivă acceptă una sau mai multe expresii sursă care definesc originile permise. Acestea variază de la anumite nume de gazdă (https://cdn.example.com) la cuvinte cheie mai ample:

  • „self” — permite resurse din aceeași origine ca documentul
  • „niciunul” — blochează toate resursele de acest tip
  • „unsafe-inline” — permite scripturi sau stiluri inline (neutralizează în mod eficient protecția XSS)
  • „unsafe-eval” — permite eval(), setTimeout(string) și execuția de cod dinamic similar
  • „nonce-{random}” — permite anumite scripturi inline etichetate cu un nonce criptografic potrivit
  • „strict-dynamic” — are încredere în scripturile încărcate de scripturi deja de încredere, ignorând listele de permise bazate pe gazdă
  • date: — permite URI-urile de date ca surse de conținut

Un antet CSP din lumea reală ar putea arăta astfel: Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.jsdelivr.net 'nonce-abc123'; style-src 'self' 'unsafe-inline'; img-src *; object-src „niciunul”. Ca pentester, sarcina ta este să citești această politică și să identifici imediat unde este puternică, unde este slabă și unde este exploatabilă.

Configurații greșite ale CSP-urilor comune pe care Pentesterii ar trebui să le vizeze

Decalajul dintre implementarea unui antet CSP și implementarea unui antet CSP eficient este enorm. În practică, majoritatea politicilor conțin puncte slabe introduse de comoditatea dezvoltatorului, integrările terțelor părți sau simpla neînțelegere. În timpul evaluărilor, pentesterii ar trebui să verifice în mod sistematic aceste erori comune.

Cea mai devastatoare configurație greșită este prezența „unsafe-inline” în directiva script-src. Acest singur cuvânt cheie face ca întregul beneficiu anti-XSS al CSP să fie practic inutil, deoarece permite browserului să execute orice etichetă