Hacker News

CSP за Pentesters: Разбиране на основите

Коментари

2 min read Via www.kayssel.com

Mewayz Team

Editorial Team

Hacker News

Защо всеки Pentester трябва да овладее политиката за сигурност на съдържанието

Правилата за сигурност на съдържанието (CSP) се превърнаха в един от най-критичните защитни механизми от страна на браузъра срещу междусайтови скриптове (XSS), инжектиране на данни и атаки за кликване. И все пак при ангажименти за тестване за проникване, CSP хедърите остават един от най-често неправилно конфигурираните — и неразбрани — контроли за сигурност. Проучване от 2024 г., анализиращо над 1 милион уебсайта, установи, че само 12,8% изобщо са разположили заглавки на CSP, а от тях почти 94% съдържат поне една слабост на политиката, която може да бъде използвана. За пентестерите разбирането на CSP не е задължително – това е разликата между оценка на повърхностно ниво и доклад, който всъщност укрепва позицията за сигурност на клиента.

Независимо дали провеждате оценки на уеб приложения, търсите грешки или вграждате сигурност в бизнес платформа, която обработва чувствителни клиентски данни, познанията за CSP са основополагащи. Това ръководство разбива какво е CSP, как работи под капака, къде се проваля и как пентестерите могат систематично да оценяват и заобикалят слабите политики.

Какво всъщност прави политиката за сигурност на съдържанието

В основата си CSP е декларативен механизъм за сигурност, доставян чрез заглавка на HTTP отговор (или по-рядко таг ). Той инструктира браузъра кои източници на съдържание - скриптове, стилове, изображения, шрифтове, рамки и други - могат да се зареждат и изпълняват на дадена страница. Когато даден ресурс наруши правилата, браузърът го блокира и по желание докладва нарушението на определена крайна точка.

Първоначалната мотивация зад CSP беше да смекчи XSS атаките. Традиционните защити на XSS като дезинфекция на входа и кодиране на изхода са ефективни, но крехки – единичен пропуснат контекст или грешка в кодирането може да въведе отново уязвимостта. CSP добавя защитен слой в дълбочина: дори ако нападател инжектира злонамерен скриптов маркер в DOM, правилно конфигурирана политика не позволява на браузъра да го изпълни.

CSP работи по модел на бял списък. Вместо да се опитва да блокира известно лошо съдържание, той определя какво е изрично разрешено. Всичко останало е отказано по подразбиране. Тази инверсия на модела за сигурност е мощна на теория, но на практика поддържането на стриктни политики в сложни уеб приложения – особено платформи, управляващи десетки интегрирани модули като CRM, фактуриране, анализи и системи за резервации – е изключително трудно.

Анатомия на CSP хедър: Директиви и източници

Заглавието на CSP се състои от директиви, всяка от които контролира определен тип ресурс. Разбирането на тези директиви е от съществено значение за всеки pentester, който оценява политиката на дадена цел. Най-важните директиви включват default-src (резервен вариант за всяка директива, която не е изрично зададена), script-src (изпълнение на JavaScript), style-src (CSS), img-src (изображения), connect-src (XHR, Fetch, WebSocket връзки), frame-src (вградени iframes) и object-src (приставки като Flash или Java аплети).

Всяка директива приема един или повече изходни изрази, които дефинират разрешените източници. Те варират от конкретни имена на хостове (https://cdn.example.com) до по-общи ключови думи:

  • 'self' — позволява ресурси от същия произход като документа
  • 'none' — блокира всички ресурси от този тип
  • 'unsafe-inline' — разрешава вградени скриптове или стилове (ефективно неутрализира XSS защитата)
  • 'unsafe-eval' — позволява eval(), setTimeout(string) и подобно динамично изпълнение на код
  • 'nonce-{random}' — позволява конкретни вградени скриптове, маркирани със съвпадащ криптографски nonce
  • 'strict-dynamic' — вярва на скриптове, заредени от вече надеждни скриптове, игнорира базирани на хост списъци с разрешени
  • данни: — разрешава URI на данни като източници на съдържание

Заглавката на CSP в реалния свят може да изглежда така: Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.jsdelivr.net 'nonce-abc123'; style-src 'self' 'unsafe-inline'; img-src *; object-src 'няма'. Като пентестър, вашата работа е да прочетете тази политика и незабавно да определите къде е силна, къде е слаба и къде може да се използва.

Често срещани грешни конфигурации на CSP, които пентестерите трябва да насочват

Разликата между внедряването на CSP хедър и внедряването на ефективен CSP хедър е огромна. На практика повечето политики съдържат слабости, въведени от удобството на разработчиците, интеграции на трети страни или просто недоразумение. По време на оценки пентестерите трябва систематично да проверяват за тези често срещани грешки.

Най-опустошителната неправилна конфигурация е наличието на 'unsafe-inline' в директивата script-src. Тази единствена ключова дума прави цялото анти-XSS предимство на CSP по същество безполезно, защото позволява на браузъра да изпълни всеки вграден