Vue.js

tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

XSS Sinks in Vue.js

v-html Direktief

Die v-html direktief render rou HTML, so enige <script> (of 'n attribuut soos onerror) ingebed in ongesuiwerde gebruikersinvoer voer onmiddellik uit.

html
<div id="app">
<div v-html="htmlContent"></div>
</div>
<script>
new Vue({
el: '#app',
data: {
htmlContent: '<img src=x onerror=alert(1)>'
}
})
</script>

v-bind met src of href

Binding 'n gebruikersstring aan URL-draende eienskappe (href, src, xlink:href, formaction …) laat payloads soos javascript:alert(1) toe om te loop wanneer die skakel gevolg word.

html
<div id="app">
<a v-bind:href="userInput">Click me</a>
</div>
<script>
new Vue({
el: '#app',
data: {
userInput: 'javascript:alert(1)'
}
})
</script>

v-on met gebruiker-beheerde handlers

v-on kompileer sy waarde met new Function; as daardie waarde van die gebruiker kom, gee jy vir hulle kode-uitvoering op 'n skinkbord.

html
<div id="app">
<button v-on:click="malicious">Click me</button>
</div>
<script>
new Vue({
el: '#app',
data: { malicious: 'alert(1)' }
})
</script>

Dinamiese attribuut / gebeurtenis name

Gebruiker-geleverde name in v-bind:[attr] of v-on:[event] laat aanvallers toe om enige attribuut of gebeurtenis handler te skep, wat statiese analise en baie CSP-reëls omseil.

html
<img v-bind:[userAttr]="payload">
<!-- userAttr = 'onerror', payload = 'alert(1)' -->

Dinamiese komponent (<component :is>)

Die toelaat van gebruikersstringe in :is kan arbitrêre komponente of inline sjablone monteer—gevaarlik in die blaaiers en katastrofies in SSR.

html
<component :is="userChoice"></component>
<!-- userChoice = '<script>alert(1)</script>' -->

Onbetroubare sjablone in SSR

Tydens bediener-kant weergawe, loop die sjabloon op jou bediener; die invoeging van gebruiker HTML kan XSS tot volle Afgeleë Kode Uitvoering (RCE) opgradeer. CVE's in vue-template-compiler bewys die risiko.

js
// DANGER – never do this
const app = createSSRApp({ template: userProvidedHtml })

Filters / render functions that eval

Erfgoedfilters wat render stringe bou of eval/new Function op gebruikersdata aanroep, is 'n ander XSS-vak—vervang hulle met berekende eienskappe.

js
Vue.filter('run', code => eval(code))   // DANGER

Ander Algemene Kw vulnerabilities in Vue Projekte

Prototipe besoedeling in plugins

Deep-merge helpers in sommige plugins (bv., vue-i18n) het aanvallers toegelaat om na Object.prototype te skryf.

js
import merge from 'deepmerge'
merge({}, JSON.parse('{ "__proto__": { "polluted": true } }'))

Oop omleidings met vue-router

Om ongekontroleerde gebruikers-URL's na router.push of <router-link> te stuur, kan lei na javascript: URI's of phishing-domeine.

js
this.$router.push(this.$route.query.next) // DANGER

CSRF in Axios / fetch

SPAs het steeds bediener-kant CSRF tokens nodig; SameSite koekies alleen kan nie outomaties ingediende kruis-oorsprong POSTs blokkeer nie.

js
axios.post('/api/transfer', data, {
headers: { 'X-CSRF-TOKEN': token }
})

Click-jacking

Vue-apps kan in rame geplaas word tensy jy beide X-Frame-Options: DENY en Content-Security-Policy: frame-ancestors 'none' stuur.

http
X-Frame-Options: DENY
Content-Security-Policy: frame-ancestors 'none';

Content-Security-Policy valkuils

Die volle Vue-bou benodig unsafe-eval; skakel oor na die runtime-bou of vooraf-gecompileerde sjablone sodat jy daardie gevaarlike bron kan laat vaar.

http
Content-Security-Policy: default-src 'self'; script-src 'self';

Verskaffingsketting-aanvalle (node-ipc – Maart 2022)

Die sabotasie van node-ipc—getrek deur Vue CLI—het gewys hoe 'n transitive afhanklikheid arbitrêre kode op ontwikkelingsmasjiene kan uitvoer. Pin weergawes en oudit gereeld.

shell
npm ci --ignore-scripts   # safer install

Versterking Kontrolelys

  1. Sanitiseer elke string voordat dit v-html bereik (DOMPurify).
  2. Whitelist toegelate skemas, eienskappe, komponente, en gebeurtenisse.
  3. Vermy eval en dinamiese templates heeltemal.
  4. Patching afhanklikhede weekliks en monitor advies.
  5. Stuur sterk HTTP koppe (CSP, HSTS, XFO, CSRF).
  6. Vergrendel jou voorsieningsketting met oudit, vergrendel lêers, en onderteken verbintenisse.

Verwysings

tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks