Hacker News

CSP для пентэстэраў: разуменне асноў

Каментарыі

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 складаецца з дырэктываў, кожная з якіх кіруе пэўным тыпам рэсурсу. Разуменне гэтых дырэктываў вельмі важна для любога пентэстэра, які ацэньвае палітыку мэты. Найбольш важныя дырэктывы ўключаюць default-src (запасны варыянт для любой дырэктывы, не ўстаноўленай яўна), script-src (выкананне JavaScript), style-src (CSS), img-src (малюнкі), connect-src (злучэнні XHR, Fetch, WebSocket), frame-src (убудаваныя iframe) і object-src (убудовы, такія як Flash або аплеты Java).

Кожная дырэктыва прымае адзін або некалькі крынічных выразаў, якія вызначаюць дазволеныя крыніцы. Яны вар'іруюцца ад пэўных імёнаў хостаў (https://cdn.example.com) да больш шырокіх ключавых слоў:

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

Рэальны загаловак CSP можа выглядаць так: Content-Security-Policy: default-src 'self'; script-src 'самастойны' https://cdn.jsdelivr.net 'nonce-abc123'; style-src 'self' 'unsafe-inline'; img-src *; object-src 'няма'. Як пентэстэр, ваша праца складаецца ў тым, каб прачытаць гэтую палітыку і неадкладна вызначыць, дзе яна моцная, дзе слабая, а дзе яе можна выкарыстоўваць.

Агульныя няправільныя канфігурацыі CSP, на якія пентэстэры павінны арыентавацца

Розніца паміж разгортваннем загалоўка CSP і разгортваннем эфектыўнага загалоўка CSP велізарная. На практыцы большасць палітык змяшчае слабыя бакі, выкліканыя зручнасцю распрацоўшчыкаў, староннімі інтэграцыямі або простым непаразуменнем. Падчас ацэнак пентэстэры павінны сістэматычна правяраць гэтыя агульныя памылкі.

Найбольш разбуральнай памылкай канфігурацыі з'яўляецца наяўнасць 'unsafe-inline' у дырэктыве script-src. Гэта адзінае ключавое слова робіць усе перавагі CSP супраць XSS бескарыснымі, таму што дазваляе браўзеру выконваць любы ўбудаваны тэг