DOM Clobbering β ΡΠΈΠΏ Π°ΡΠ°ΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ JavaScript ΠΈ DOM.
Π¦Π΅Π»Ρ β Π·Π°ΠΏΡΡΠ°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ JS-ΠΊΠΎΠ΄, Π²ΡΡΠ°Π²Π»ΡΡ Π² Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ HTML-ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΈ, Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉ ΡΠΊΡΠΈΠΏΡΠΎΠ², ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡ Π΅Π³ΠΎ Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄ Ρ ΠΏΠΎΠΌΠΎΡΡΡ named property accesses.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΈΠ·-Π·Π° ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ ΠΈΠΌΡΠ½ ΠΌΠ΅ΠΆΠ΄Ρ JS-ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΈ HTML-ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Ρ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ
id ΠΈΠ»ΠΈ name. ΠΡΠ°ΡΠ·Π΅ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² window ΠΈ document Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠΈΡ
Π°ΡΡΠΈΠ±ΡΡΠΎΠ²:var s = document.createElement('script');
let config = window.globalConfig || {href: 'script.js'};
s.src = config.href;
document.body.appendChild(s);Π’Ρ ΠΌΠΎΠΆΠ΅ΡΡ Π²Π½Π΅Π΄ΡΠΈΡΡ HTML-ΡΠ°Π·ΠΌΠ΅ΡΠΊΡ:
<a id="globalConfig" href="malicious.js">, ΠΈ Π±ΡΠ°ΡΠ·Π΅Ρ Π·Π°ΠΌΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ window.globalConfig Π½Π° ΡΡΠΎΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΠΌΠ΅ΡΡΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΡΠΈΠΏΡΠ° Π·Π°Π³ΡΡΠ·ΠΈΡΡΡ Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΡΠΉ. ΠΠΈΠ½Π³ΠΎπ―π₯·πΏ DOMC Payload Generator β ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ Π΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΡΠΉΠ»ΠΎΠ°Π΄ΠΎΠ² Π΄Π»Ρ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ DOM Clobbering Π°ΡΠ°ΠΊ.
